Add .abiversion related support for ELFv2
[external/binutils.git] / bfd / elf64-ppc.c
1 /* PowerPC64-specific support for 64-bit ELF.
2    Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
3    2009, 2010, 2011, 2012 Free Software Foundation, Inc.
4    Written by Linus Nordberg, Swox AB <info@swox.com>,
5    based on elf32-ppc.c by Ian Lance Taylor.
6    Largely rewritten by Alan Modra.
7
8    This file is part of BFD, the Binary File Descriptor library.
9
10    This program is free software; you can redistribute it and/or modify
11    it under the terms of the GNU General Public License as published by
12    the Free Software Foundation; either version 3 of the License, or
13    (at your option) any later version.
14
15    This program is distributed in the hope that it will be useful,
16    but WITHOUT ANY WARRANTY; without even the implied warranty of
17    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18    GNU General Public License for more details.
19
20    You should have received a copy of the GNU General Public License along
21    with this program; if not, write to the Free Software Foundation, Inc.,
22    51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.  */
23
24
25 /* The 64-bit PowerPC ELF ABI may be found at
26    http://www.linuxbase.org/spec/ELF/ppc64/PPC-elf64abi.txt, and
27    http://www.linuxbase.org/spec/ELF/ppc64/spec/book1.html  */
28
29 #include "sysdep.h"
30 #include <stdarg.h>
31 #include "bfd.h"
32 #include "bfdlink.h"
33 #include "libbfd.h"
34 #include "elf-bfd.h"
35 #include "elf/ppc64.h"
36 #include "elf64-ppc.h"
37 #include "dwarf2.h"
38
39 static bfd_reloc_status_type ppc64_elf_ha_reloc
40   (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
41 static bfd_reloc_status_type ppc64_elf_branch_reloc
42   (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
43 static bfd_reloc_status_type ppc64_elf_brtaken_reloc
44   (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
45 static bfd_reloc_status_type ppc64_elf_sectoff_reloc
46   (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
47 static bfd_reloc_status_type ppc64_elf_sectoff_ha_reloc
48   (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
49 static bfd_reloc_status_type ppc64_elf_toc_reloc
50   (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
51 static bfd_reloc_status_type ppc64_elf_toc_ha_reloc
52   (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
53 static bfd_reloc_status_type ppc64_elf_toc64_reloc
54   (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
55 static bfd_reloc_status_type ppc64_elf_unhandled_reloc
56   (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
57 static bfd_vma opd_entry_value
58   (asection *, bfd_vma, asection **, bfd_vma *, bfd_boolean);
59
60 #define TARGET_LITTLE_SYM       bfd_elf64_powerpcle_vec
61 #define TARGET_LITTLE_NAME      "elf64-powerpcle"
62 #define TARGET_BIG_SYM          bfd_elf64_powerpc_vec
63 #define TARGET_BIG_NAME         "elf64-powerpc"
64 #define ELF_ARCH                bfd_arch_powerpc
65 #define ELF_TARGET_ID           PPC64_ELF_DATA
66 #define ELF_MACHINE_CODE        EM_PPC64
67 #define ELF_MAXPAGESIZE         0x10000
68 #define ELF_COMMONPAGESIZE      0x1000
69 #define elf_info_to_howto       ppc64_elf_info_to_howto
70
71 #define elf_backend_want_got_sym 0
72 #define elf_backend_want_plt_sym 0
73 #define elf_backend_plt_alignment 3
74 #define elf_backend_plt_not_loaded 1
75 #define elf_backend_got_header_size 8
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_default_execstack 0
80
81 #define bfd_elf64_mkobject                    ppc64_elf_mkobject
82 #define bfd_elf64_bfd_reloc_type_lookup       ppc64_elf_reloc_type_lookup
83 #define bfd_elf64_bfd_reloc_name_lookup       ppc64_elf_reloc_name_lookup
84 #define bfd_elf64_bfd_merge_private_bfd_data  ppc64_elf_merge_private_bfd_data
85 #define bfd_elf64_bfd_print_private_bfd_data  ppc64_elf_print_private_bfd_data
86 #define bfd_elf64_new_section_hook            ppc64_elf_new_section_hook
87 #define bfd_elf64_bfd_link_hash_table_create  ppc64_elf_link_hash_table_create
88 #define bfd_elf64_bfd_link_hash_table_free    ppc64_elf_link_hash_table_free
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
92 #define elf_backend_object_p                  ppc64_elf_object_p
93 #define elf_backend_grok_prstatus             ppc64_elf_grok_prstatus
94 #define elf_backend_grok_psinfo               ppc64_elf_grok_psinfo
95 #define elf_backend_write_core_note           ppc64_elf_write_core_note
96 #define elf_backend_create_dynamic_sections   ppc64_elf_create_dynamic_sections
97 #define elf_backend_copy_indirect_symbol      ppc64_elf_copy_indirect_symbol
98 #define elf_backend_add_symbol_hook           ppc64_elf_add_symbol_hook
99 #define elf_backend_check_directives          ppc64_elf_process_dot_syms
100 #define elf_backend_notice_as_needed          ppc64_elf_notice_as_needed
101 #define elf_backend_archive_symbol_lookup     ppc64_elf_archive_symbol_lookup
102 #define elf_backend_check_relocs              ppc64_elf_check_relocs
103 #define elf_backend_gc_keep                   ppc64_elf_gc_keep
104 #define elf_backend_gc_mark_dynamic_ref       ppc64_elf_gc_mark_dynamic_ref
105 #define elf_backend_gc_mark_hook              ppc64_elf_gc_mark_hook
106 #define elf_backend_gc_sweep_hook             ppc64_elf_gc_sweep_hook
107 #define elf_backend_adjust_dynamic_symbol     ppc64_elf_adjust_dynamic_symbol
108 #define elf_backend_hide_symbol               ppc64_elf_hide_symbol
109 #define elf_backend_maybe_function_sym        ppc64_elf_maybe_function_sym
110 #define elf_backend_always_size_sections      ppc64_elf_func_desc_adjust
111 #define elf_backend_size_dynamic_sections     ppc64_elf_size_dynamic_sections
112 #define elf_backend_init_index_section        _bfd_elf_init_2_index_sections
113 #define elf_backend_action_discarded          ppc64_elf_action_discarded
114 #define elf_backend_relocate_section          ppc64_elf_relocate_section
115 #define elf_backend_finish_dynamic_symbol     ppc64_elf_finish_dynamic_symbol
116 #define elf_backend_reloc_type_class          ppc64_elf_reloc_type_class
117 #define elf_backend_finish_dynamic_sections   ppc64_elf_finish_dynamic_sections
118 #define elf_backend_link_output_symbol_hook   ppc64_elf_output_symbol_hook
119 #define elf_backend_special_sections          ppc64_elf_special_sections
120 #define elf_backend_post_process_headers      _bfd_elf_set_osabi
121
122 /* The name of the dynamic interpreter.  This is put in the .interp
123    section.  */
124 #define ELF_DYNAMIC_INTERPRETER "/usr/lib/ld.so.1"
125
126 /* The size in bytes of an entry in the procedure linkage table.  */
127 #define PLT_ENTRY_SIZE 24
128
129 /* The initial size of the plt reserved for the dynamic linker.  */
130 #define PLT_INITIAL_ENTRY_SIZE PLT_ENTRY_SIZE
131
132 /* TOC base pointers offset from start of TOC.  */
133 #define TOC_BASE_OFF    0x8000
134
135 /* Offset of tp and dtp pointers from start of TLS block.  */
136 #define TP_OFFSET       0x7000
137 #define DTP_OFFSET      0x8000
138
139 /* .plt call stub instructions.  The normal stub is like this, but
140    sometimes the .plt entry crosses a 64k boundary and we need to
141    insert an addi to adjust r11.  */
142 #define PLT_CALL_STUB_SIZE (7*4)
143 #define STD_R2_40R1     0xf8410028      /* std   %r2,40(%r1)         */
144 #define ADDIS_R11_R2    0x3d620000      /* addis %r11,%r2,xxx@ha     */
145 #define LD_R12_0R11     0xe98b0000      /* ld    %r12,xxx+0@l(%r11)  */
146 #define MTCTR_R12       0x7d8903a6      /* mtctr %r12                */
147 #define LD_R2_0R11      0xe84b0000      /* ld    %r2,xxx+8@l(%r11)   */
148 #define LD_R11_0R11     0xe96b0000      /* ld    %r11,xxx+16@l(%r11) */
149 #define BCTR            0x4e800420      /* bctr                      */
150
151 #define ADDI_R11_R11    0x396b0000      /* addi %r11,%r11,off@l  */
152 #define ADDIS_R2_R2     0x3c420000      /* addis %r2,%r2,off@ha  */
153 #define ADDI_R2_R2      0x38420000      /* addi  %r2,%r2,off@l   */
154
155 #define XOR_R2_R12_R12  0x7d826278      /* xor   %r2,%r12,%r12   */
156 #define ADD_R11_R11_R2  0x7d6b1214      /* add   %r11,%r11,%r2   */
157 #define XOR_R11_R12_R12 0x7d8b6278      /* xor   %r11,%r12,%r12  */
158 #define ADD_R2_R2_R11   0x7c425a14      /* add   %r2,%r2,%r11    */
159 #define CMPLDI_R2_0     0x28220000      /* cmpldi %r2,0          */
160 #define BNECTR          0x4ca20420      /* bnectr+               */
161 #define BNECTR_P4       0x4ce20420      /* bnectr+               */
162
163 #define LD_R12_0R2      0xe9820000      /* ld    %r12,xxx+0(%r2) */
164 #define LD_R11_0R2      0xe9620000      /* ld    %r11,xxx+0(%r2) */
165 #define LD_R2_0R2       0xe8420000      /* ld    %r2,xxx+0(%r2)  */
166
167 #define LD_R2_40R1      0xe8410028      /* ld    %r2,40(%r1)     */
168
169 /* glink call stub instructions.  We enter with the index in R0.  */
170 #define GLINK_CALL_STUB_SIZE (16*4)
171                                         /* 0:                           */
172                                         /*  .quad plt0-1f               */
173                                         /* __glink:                     */
174 #define MFLR_R12        0x7d8802a6      /*  mflr %12                    */
175 #define BCL_20_31       0x429f0005      /*  bcl 20,31,1f                */
176                                         /* 1:                           */
177 #define MFLR_R11        0x7d6802a6      /*  mflr %11                    */
178                                         /*  ld %2,(0b-1b)(%11)          */
179 #define MTLR_R12        0x7d8803a6      /*  mtlr %12                    */
180 #define ADD_R11_R2_R11  0x7d625a14      /*  add %11,%2,%11              */
181                                         /*  ld %12,0(%11)               */
182                                         /*  ld %2,8(%11)                */
183                                         /*  mtctr %12                   */
184                                         /*  ld %11,16(%11)              */
185                                         /*  bctr                        */
186
187 /* Pad with this.  */
188 #define NOP             0x60000000
189
190 /* Some other nops.  */
191 #define CROR_151515     0x4def7b82
192 #define CROR_313131     0x4ffffb82
193
194 /* .glink entries for the first 32k functions are two instructions.  */
195 #define LI_R0_0         0x38000000      /* li    %r0,0          */
196 #define B_DOT           0x48000000      /* b     .              */
197
198 /* After that, we need two instructions to load the index, followed by
199    a branch.  */
200 #define LIS_R0_0        0x3c000000      /* lis   %r0,0          */
201 #define ORI_R0_R0_0     0x60000000      /* ori   %r0,%r0,0      */
202
203 /* Instructions used by the save and restore reg functions.  */
204 #define STD_R0_0R1      0xf8010000      /* std   %r0,0(%r1)     */
205 #define STD_R0_0R12     0xf80c0000      /* std   %r0,0(%r12)    */
206 #define LD_R0_0R1       0xe8010000      /* ld    %r0,0(%r1)     */
207 #define LD_R0_0R12      0xe80c0000      /* ld    %r0,0(%r12)    */
208 #define STFD_FR0_0R1    0xd8010000      /* stfd  %fr0,0(%r1)    */
209 #define LFD_FR0_0R1     0xc8010000      /* lfd   %fr0,0(%r1)    */
210 #define LI_R12_0        0x39800000      /* li    %r12,0         */
211 #define STVX_VR0_R12_R0 0x7c0c01ce      /* stvx  %v0,%r12,%r0   */
212 #define LVX_VR0_R12_R0  0x7c0c00ce      /* lvx   %v0,%r12,%r0   */
213 #define MTLR_R0         0x7c0803a6      /* mtlr  %r0            */
214 #define BLR             0x4e800020      /* blr                  */
215
216 /* Since .opd is an array of descriptors and each entry will end up
217    with identical R_PPC64_RELATIVE relocs, there is really no need to
218    propagate .opd relocs;  The dynamic linker should be taught to
219    relocate .opd without reloc entries.  */
220 #ifndef NO_OPD_RELOCS
221 #define NO_OPD_RELOCS 0
222 #endif
223 \f
224 #define ONES(n) (((bfd_vma) 1 << ((n) - 1) << 1) - 1)
225
226 /* Relocation HOWTO's.  */
227 static reloc_howto_type *ppc64_elf_howto_table[(int) R_PPC64_max];
228
229 static reloc_howto_type ppc64_elf_howto_raw[] = {
230   /* This reloc does nothing.  */
231   HOWTO (R_PPC64_NONE,          /* type */
232          0,                     /* rightshift */
233          2,                     /* size (0 = byte, 1 = short, 2 = long) */
234          32,                    /* bitsize */
235          FALSE,                 /* pc_relative */
236          0,                     /* bitpos */
237          complain_overflow_dont, /* complain_on_overflow */
238          bfd_elf_generic_reloc, /* special_function */
239          "R_PPC64_NONE",        /* name */
240          FALSE,                 /* partial_inplace */
241          0,                     /* src_mask */
242          0,                     /* dst_mask */
243          FALSE),                /* pcrel_offset */
244
245   /* A standard 32 bit relocation.  */
246   HOWTO (R_PPC64_ADDR32,        /* type */
247          0,                     /* rightshift */
248          2,                     /* size (0 = byte, 1 = short, 2 = long) */
249          32,                    /* bitsize */
250          FALSE,                 /* pc_relative */
251          0,                     /* bitpos */
252          complain_overflow_bitfield, /* complain_on_overflow */
253          bfd_elf_generic_reloc, /* special_function */
254          "R_PPC64_ADDR32",      /* name */
255          FALSE,                 /* partial_inplace */
256          0,                     /* src_mask */
257          0xffffffff,            /* dst_mask */
258          FALSE),                /* pcrel_offset */
259
260   /* An absolute 26 bit branch; the lower two bits must be zero.
261      FIXME: we don't check that, we just clear them.  */
262   HOWTO (R_PPC64_ADDR24,        /* type */
263          0,                     /* rightshift */
264          2,                     /* size (0 = byte, 1 = short, 2 = long) */
265          26,                    /* bitsize */
266          FALSE,                 /* pc_relative */
267          0,                     /* bitpos */
268          complain_overflow_bitfield, /* complain_on_overflow */
269          bfd_elf_generic_reloc, /* special_function */
270          "R_PPC64_ADDR24",      /* name */
271          FALSE,                 /* partial_inplace */
272          0,                     /* src_mask */
273          0x03fffffc,            /* dst_mask */
274          FALSE),                /* pcrel_offset */
275
276   /* A standard 16 bit relocation.  */
277   HOWTO (R_PPC64_ADDR16,        /* type */
278          0,                     /* rightshift */
279          1,                     /* size (0 = byte, 1 = short, 2 = long) */
280          16,                    /* bitsize */
281          FALSE,                 /* pc_relative */
282          0,                     /* bitpos */
283          complain_overflow_bitfield, /* complain_on_overflow */
284          bfd_elf_generic_reloc, /* special_function */
285          "R_PPC64_ADDR16",      /* name */
286          FALSE,                 /* partial_inplace */
287          0,                     /* src_mask */
288          0xffff,                /* dst_mask */
289          FALSE),                /* pcrel_offset */
290
291   /* A 16 bit relocation without overflow.  */
292   HOWTO (R_PPC64_ADDR16_LO,     /* type */
293          0,                     /* rightshift */
294          1,                     /* size (0 = byte, 1 = short, 2 = long) */
295          16,                    /* bitsize */
296          FALSE,                 /* pc_relative */
297          0,                     /* bitpos */
298          complain_overflow_dont,/* complain_on_overflow */
299          bfd_elf_generic_reloc, /* special_function */
300          "R_PPC64_ADDR16_LO",   /* name */
301          FALSE,                 /* partial_inplace */
302          0,                     /* src_mask */
303          0xffff,                /* dst_mask */
304          FALSE),                /* pcrel_offset */
305
306   /* Bits 16-31 of an address.  */
307   HOWTO (R_PPC64_ADDR16_HI,     /* type */
308          16,                    /* rightshift */
309          1,                     /* size (0 = byte, 1 = short, 2 = long) */
310          16,                    /* bitsize */
311          FALSE,                 /* pc_relative */
312          0,                     /* bitpos */
313          complain_overflow_signed, /* complain_on_overflow */
314          bfd_elf_generic_reloc, /* special_function */
315          "R_PPC64_ADDR16_HI",   /* name */
316          FALSE,                 /* partial_inplace */
317          0,                     /* src_mask */
318          0xffff,                /* dst_mask */
319          FALSE),                /* pcrel_offset */
320
321   /* Bits 16-31 of an address, plus 1 if the contents of the low 16
322      bits, treated as a signed number, is negative.  */
323   HOWTO (R_PPC64_ADDR16_HA,     /* type */
324          16,                    /* rightshift */
325          1,                     /* size (0 = byte, 1 = short, 2 = long) */
326          16,                    /* bitsize */
327          FALSE,                 /* pc_relative */
328          0,                     /* bitpos */
329          complain_overflow_signed, /* complain_on_overflow */
330          ppc64_elf_ha_reloc,    /* special_function */
331          "R_PPC64_ADDR16_HA",   /* name */
332          FALSE,                 /* partial_inplace */
333          0,                     /* src_mask */
334          0xffff,                /* dst_mask */
335          FALSE),                /* pcrel_offset */
336
337   /* An absolute 16 bit branch; the lower two bits must be zero.
338      FIXME: we don't check that, we just clear them.  */
339   HOWTO (R_PPC64_ADDR14,        /* type */
340          0,                     /* rightshift */
341          2,                     /* size (0 = byte, 1 = short, 2 = long) */
342          16,                    /* bitsize */
343          FALSE,                 /* pc_relative */
344          0,                     /* bitpos */
345          complain_overflow_bitfield, /* complain_on_overflow */
346          ppc64_elf_branch_reloc, /* special_function */
347          "R_PPC64_ADDR14",      /* name */
348          FALSE,                 /* partial_inplace */
349          0,                     /* src_mask */
350          0x0000fffc,            /* dst_mask */
351          FALSE),                /* pcrel_offset */
352
353   /* An absolute 16 bit branch, for which bit 10 should be set to
354      indicate that the branch is expected to be taken.  The lower two
355      bits must be zero.  */
356   HOWTO (R_PPC64_ADDR14_BRTAKEN, /* type */
357          0,                     /* rightshift */
358          2,                     /* size (0 = byte, 1 = short, 2 = long) */
359          16,                    /* bitsize */
360          FALSE,                 /* pc_relative */
361          0,                     /* bitpos */
362          complain_overflow_bitfield, /* complain_on_overflow */
363          ppc64_elf_brtaken_reloc, /* special_function */
364          "R_PPC64_ADDR14_BRTAKEN",/* name */
365          FALSE,                 /* partial_inplace */
366          0,                     /* src_mask */
367          0x0000fffc,            /* dst_mask */
368          FALSE),                /* pcrel_offset */
369
370   /* An absolute 16 bit branch, for which bit 10 should be set to
371      indicate that the branch is not expected to be taken.  The lower
372      two bits must be zero.  */
373   HOWTO (R_PPC64_ADDR14_BRNTAKEN, /* type */
374          0,                     /* rightshift */
375          2,                     /* size (0 = byte, 1 = short, 2 = long) */
376          16,                    /* bitsize */
377          FALSE,                 /* pc_relative */
378          0,                     /* bitpos */
379          complain_overflow_bitfield, /* complain_on_overflow */
380          ppc64_elf_brtaken_reloc, /* special_function */
381          "R_PPC64_ADDR14_BRNTAKEN",/* name */
382          FALSE,                 /* partial_inplace */
383          0,                     /* src_mask */
384          0x0000fffc,            /* dst_mask */
385          FALSE),                /* pcrel_offset */
386
387   /* A relative 26 bit branch; the lower two bits must be zero.  */
388   HOWTO (R_PPC64_REL24,         /* type */
389          0,                     /* rightshift */
390          2,                     /* size (0 = byte, 1 = short, 2 = long) */
391          26,                    /* bitsize */
392          TRUE,                  /* pc_relative */
393          0,                     /* bitpos */
394          complain_overflow_signed, /* complain_on_overflow */
395          ppc64_elf_branch_reloc, /* special_function */
396          "R_PPC64_REL24",       /* name */
397          FALSE,                 /* partial_inplace */
398          0,                     /* src_mask */
399          0x03fffffc,            /* dst_mask */
400          TRUE),                 /* pcrel_offset */
401
402   /* A relative 16 bit branch; the lower two bits must be zero.  */
403   HOWTO (R_PPC64_REL14,         /* type */
404          0,                     /* rightshift */
405          2,                     /* size (0 = byte, 1 = short, 2 = long) */
406          16,                    /* bitsize */
407          TRUE,                  /* pc_relative */
408          0,                     /* bitpos */
409          complain_overflow_signed, /* complain_on_overflow */
410          ppc64_elf_branch_reloc, /* special_function */
411          "R_PPC64_REL14",       /* name */
412          FALSE,                 /* partial_inplace */
413          0,                     /* src_mask */
414          0x0000fffc,            /* dst_mask */
415          TRUE),                 /* pcrel_offset */
416
417   /* A relative 16 bit branch.  Bit 10 should be set to indicate that
418      the branch is expected to be taken.  The lower two bits must be
419      zero.  */
420   HOWTO (R_PPC64_REL14_BRTAKEN, /* type */
421          0,                     /* rightshift */
422          2,                     /* size (0 = byte, 1 = short, 2 = long) */
423          16,                    /* bitsize */
424          TRUE,                  /* pc_relative */
425          0,                     /* bitpos */
426          complain_overflow_signed, /* complain_on_overflow */
427          ppc64_elf_brtaken_reloc, /* special_function */
428          "R_PPC64_REL14_BRTAKEN", /* name */
429          FALSE,                 /* partial_inplace */
430          0,                     /* src_mask */
431          0x0000fffc,            /* dst_mask */
432          TRUE),                 /* pcrel_offset */
433
434   /* A relative 16 bit branch.  Bit 10 should be set to indicate that
435      the branch is not expected to be taken.  The lower two bits must
436      be zero.  */
437   HOWTO (R_PPC64_REL14_BRNTAKEN, /* type */
438          0,                     /* rightshift */
439          2,                     /* size (0 = byte, 1 = short, 2 = long) */
440          16,                    /* bitsize */
441          TRUE,                  /* pc_relative */
442          0,                     /* bitpos */
443          complain_overflow_signed, /* complain_on_overflow */
444          ppc64_elf_brtaken_reloc, /* special_function */
445          "R_PPC64_REL14_BRNTAKEN",/* name */
446          FALSE,                 /* partial_inplace */
447          0,                     /* src_mask */
448          0x0000fffc,            /* dst_mask */
449          TRUE),                 /* pcrel_offset */
450
451   /* Like R_PPC64_ADDR16, but referring to the GOT table entry for the
452      symbol.  */
453   HOWTO (R_PPC64_GOT16,         /* type */
454          0,                     /* rightshift */
455          1,                     /* size (0 = byte, 1 = short, 2 = long) */
456          16,                    /* bitsize */
457          FALSE,                 /* pc_relative */
458          0,                     /* bitpos */
459          complain_overflow_signed, /* complain_on_overflow */
460          ppc64_elf_unhandled_reloc, /* special_function */
461          "R_PPC64_GOT16",       /* name */
462          FALSE,                 /* partial_inplace */
463          0,                     /* src_mask */
464          0xffff,                /* dst_mask */
465          FALSE),                /* pcrel_offset */
466
467   /* Like R_PPC64_ADDR16_LO, but referring to the GOT table entry for
468      the symbol.  */
469   HOWTO (R_PPC64_GOT16_LO,      /* type */
470          0,                     /* rightshift */
471          1,                     /* size (0 = byte, 1 = short, 2 = long) */
472          16,                    /* bitsize */
473          FALSE,                 /* pc_relative */
474          0,                     /* bitpos */
475          complain_overflow_dont, /* complain_on_overflow */
476          ppc64_elf_unhandled_reloc, /* special_function */
477          "R_PPC64_GOT16_LO",    /* name */
478          FALSE,                 /* partial_inplace */
479          0,                     /* src_mask */
480          0xffff,                /* dst_mask */
481          FALSE),                /* pcrel_offset */
482
483   /* Like R_PPC64_ADDR16_HI, but referring to the GOT table entry for
484      the symbol.  */
485   HOWTO (R_PPC64_GOT16_HI,      /* type */
486          16,                    /* rightshift */
487          1,                     /* size (0 = byte, 1 = short, 2 = long) */
488          16,                    /* bitsize */
489          FALSE,                 /* pc_relative */
490          0,                     /* bitpos */
491          complain_overflow_signed,/* complain_on_overflow */
492          ppc64_elf_unhandled_reloc, /* special_function */
493          "R_PPC64_GOT16_HI",    /* name */
494          FALSE,                 /* partial_inplace */
495          0,                     /* src_mask */
496          0xffff,                /* dst_mask */
497          FALSE),                /* pcrel_offset */
498
499   /* Like R_PPC64_ADDR16_HA, but referring to the GOT table entry for
500      the symbol.  */
501   HOWTO (R_PPC64_GOT16_HA,      /* type */
502          16,                    /* rightshift */
503          1,                     /* size (0 = byte, 1 = short, 2 = long) */
504          16,                    /* bitsize */
505          FALSE,                 /* pc_relative */
506          0,                     /* bitpos */
507          complain_overflow_signed,/* complain_on_overflow */
508          ppc64_elf_unhandled_reloc, /* special_function */
509          "R_PPC64_GOT16_HA",    /* name */
510          FALSE,                 /* partial_inplace */
511          0,                     /* src_mask */
512          0xffff,                /* dst_mask */
513          FALSE),                /* pcrel_offset */
514
515   /* This is used only by the dynamic linker.  The symbol should exist
516      both in the object being run and in some shared library.  The
517      dynamic linker copies the data addressed by the symbol from the
518      shared library into the object, because the object being
519      run has to have the data at some particular address.  */
520   HOWTO (R_PPC64_COPY,          /* type */
521          0,                     /* rightshift */
522          0,                     /* this one is variable size */
523          0,                     /* bitsize */
524          FALSE,                 /* pc_relative */
525          0,                     /* bitpos */
526          complain_overflow_dont, /* complain_on_overflow */
527          ppc64_elf_unhandled_reloc, /* special_function */
528          "R_PPC64_COPY",        /* name */
529          FALSE,                 /* partial_inplace */
530          0,                     /* src_mask */
531          0,                     /* dst_mask */
532          FALSE),                /* pcrel_offset */
533
534   /* Like R_PPC64_ADDR64, but used when setting global offset table
535      entries.  */
536   HOWTO (R_PPC64_GLOB_DAT,      /* type */
537          0,                     /* rightshift */
538          4,                     /* size (0=byte, 1=short, 2=long, 4=64 bits) */
539          64,                    /* bitsize */
540          FALSE,                 /* pc_relative */
541          0,                     /* bitpos */
542          complain_overflow_dont, /* complain_on_overflow */
543          ppc64_elf_unhandled_reloc,  /* special_function */
544          "R_PPC64_GLOB_DAT",    /* name */
545          FALSE,                 /* partial_inplace */
546          0,                     /* src_mask */
547          ONES (64),             /* dst_mask */
548          FALSE),                /* pcrel_offset */
549
550   /* Created by the link editor.  Marks a procedure linkage table
551      entry for a symbol.  */
552   HOWTO (R_PPC64_JMP_SLOT,      /* type */
553          0,                     /* rightshift */
554          0,                     /* size (0 = byte, 1 = short, 2 = long) */
555          0,                     /* bitsize */
556          FALSE,                 /* pc_relative */
557          0,                     /* bitpos */
558          complain_overflow_dont, /* complain_on_overflow */
559          ppc64_elf_unhandled_reloc, /* special_function */
560          "R_PPC64_JMP_SLOT",    /* name */
561          FALSE,                 /* partial_inplace */
562          0,                     /* src_mask */
563          0,                     /* dst_mask */
564          FALSE),                /* pcrel_offset */
565
566   /* Used only by the dynamic linker.  When the object is run, this
567      doubleword64 is set to the load address of the object, plus the
568      addend.  */
569   HOWTO (R_PPC64_RELATIVE,      /* type */
570          0,                     /* rightshift */
571          4,                     /* size (0=byte, 1=short, 2=long, 4=64 bits) */
572          64,                    /* bitsize */
573          FALSE,                 /* pc_relative */
574          0,                     /* bitpos */
575          complain_overflow_dont, /* complain_on_overflow */
576          bfd_elf_generic_reloc, /* special_function */
577          "R_PPC64_RELATIVE",    /* name */
578          FALSE,                 /* partial_inplace */
579          0,                     /* src_mask */
580          ONES (64),             /* dst_mask */
581          FALSE),                /* pcrel_offset */
582
583   /* Like R_PPC64_ADDR32, but may be unaligned.  */
584   HOWTO (R_PPC64_UADDR32,       /* type */
585          0,                     /* rightshift */
586          2,                     /* size (0 = byte, 1 = short, 2 = long) */
587          32,                    /* bitsize */
588          FALSE,                 /* pc_relative */
589          0,                     /* bitpos */
590          complain_overflow_bitfield, /* complain_on_overflow */
591          bfd_elf_generic_reloc, /* special_function */
592          "R_PPC64_UADDR32",     /* name */
593          FALSE,                 /* partial_inplace */
594          0,                     /* src_mask */
595          0xffffffff,            /* dst_mask */
596          FALSE),                /* pcrel_offset */
597
598   /* Like R_PPC64_ADDR16, but may be unaligned.  */
599   HOWTO (R_PPC64_UADDR16,       /* type */
600          0,                     /* rightshift */
601          1,                     /* size (0 = byte, 1 = short, 2 = long) */
602          16,                    /* bitsize */
603          FALSE,                 /* pc_relative */
604          0,                     /* bitpos */
605          complain_overflow_bitfield, /* complain_on_overflow */
606          bfd_elf_generic_reloc, /* special_function */
607          "R_PPC64_UADDR16",     /* name */
608          FALSE,                 /* partial_inplace */
609          0,                     /* src_mask */
610          0xffff,                /* dst_mask */
611          FALSE),                /* pcrel_offset */
612
613   /* 32-bit PC relative.  */
614   HOWTO (R_PPC64_REL32,         /* type */
615          0,                     /* rightshift */
616          2,                     /* size (0 = byte, 1 = short, 2 = long) */
617          32,                    /* bitsize */
618          TRUE,                  /* pc_relative */
619          0,                     /* bitpos */
620          /* FIXME: Verify.  Was complain_overflow_bitfield.  */
621          complain_overflow_signed, /* complain_on_overflow */
622          bfd_elf_generic_reloc, /* special_function */
623          "R_PPC64_REL32",       /* name */
624          FALSE,                 /* partial_inplace */
625          0,                     /* src_mask */
626          0xffffffff,            /* dst_mask */
627          TRUE),                 /* pcrel_offset */
628
629   /* 32-bit relocation to the symbol's procedure linkage table.  */
630   HOWTO (R_PPC64_PLT32,         /* type */
631          0,                     /* rightshift */
632          2,                     /* size (0 = byte, 1 = short, 2 = long) */
633          32,                    /* bitsize */
634          FALSE,                 /* pc_relative */
635          0,                     /* bitpos */
636          complain_overflow_bitfield, /* complain_on_overflow */
637          ppc64_elf_unhandled_reloc, /* special_function */
638          "R_PPC64_PLT32",       /* name */
639          FALSE,                 /* partial_inplace */
640          0,                     /* src_mask */
641          0xffffffff,            /* dst_mask */
642          FALSE),                /* pcrel_offset */
643
644   /* 32-bit PC relative relocation to the symbol's procedure linkage table.
645      FIXME: R_PPC64_PLTREL32 not supported.  */
646   HOWTO (R_PPC64_PLTREL32,      /* type */
647          0,                     /* rightshift */
648          2,                     /* size (0 = byte, 1 = short, 2 = long) */
649          32,                    /* bitsize */
650          TRUE,                  /* pc_relative */
651          0,                     /* bitpos */
652          complain_overflow_signed, /* complain_on_overflow */
653          bfd_elf_generic_reloc, /* special_function */
654          "R_PPC64_PLTREL32",    /* name */
655          FALSE,                 /* partial_inplace */
656          0,                     /* src_mask */
657          0xffffffff,            /* dst_mask */
658          TRUE),                 /* pcrel_offset */
659
660   /* Like R_PPC64_ADDR16_LO, but referring to the PLT table entry for
661      the symbol.  */
662   HOWTO (R_PPC64_PLT16_LO,      /* type */
663          0,                     /* rightshift */
664          1,                     /* size (0 = byte, 1 = short, 2 = long) */
665          16,                    /* bitsize */
666          FALSE,                 /* pc_relative */
667          0,                     /* bitpos */
668          complain_overflow_dont, /* complain_on_overflow */
669          ppc64_elf_unhandled_reloc, /* special_function */
670          "R_PPC64_PLT16_LO",    /* name */
671          FALSE,                 /* partial_inplace */
672          0,                     /* src_mask */
673          0xffff,                /* dst_mask */
674          FALSE),                /* pcrel_offset */
675
676   /* Like R_PPC64_ADDR16_HI, but referring to the PLT table entry for
677      the symbol.  */
678   HOWTO (R_PPC64_PLT16_HI,      /* type */
679          16,                    /* rightshift */
680          1,                     /* size (0 = byte, 1 = short, 2 = long) */
681          16,                    /* bitsize */
682          FALSE,                 /* pc_relative */
683          0,                     /* bitpos */
684          complain_overflow_signed, /* complain_on_overflow */
685          ppc64_elf_unhandled_reloc, /* special_function */
686          "R_PPC64_PLT16_HI",    /* name */
687          FALSE,                 /* partial_inplace */
688          0,                     /* src_mask */
689          0xffff,                /* dst_mask */
690          FALSE),                /* pcrel_offset */
691
692   /* Like R_PPC64_ADDR16_HA, but referring to the PLT table entry for
693      the symbol.  */
694   HOWTO (R_PPC64_PLT16_HA,      /* type */
695          16,                    /* rightshift */
696          1,                     /* size (0 = byte, 1 = short, 2 = long) */
697          16,                    /* bitsize */
698          FALSE,                 /* pc_relative */
699          0,                     /* bitpos */
700          complain_overflow_signed, /* complain_on_overflow */
701          ppc64_elf_unhandled_reloc, /* special_function */
702          "R_PPC64_PLT16_HA",    /* name */
703          FALSE,                 /* partial_inplace */
704          0,                     /* src_mask */
705          0xffff,                /* dst_mask */
706          FALSE),                /* pcrel_offset */
707
708   /* 16-bit section relative relocation.  */
709   HOWTO (R_PPC64_SECTOFF,       /* type */
710          0,                     /* rightshift */
711          1,                     /* size (0 = byte, 1 = short, 2 = long) */
712          16,                    /* bitsize */
713          FALSE,                 /* pc_relative */
714          0,                     /* bitpos */
715          complain_overflow_bitfield, /* complain_on_overflow */
716          ppc64_elf_sectoff_reloc, /* special_function */
717          "R_PPC64_SECTOFF",     /* name */
718          FALSE,                 /* partial_inplace */
719          0,                     /* src_mask */
720          0xffff,                /* dst_mask */
721          FALSE),                /* pcrel_offset */
722
723   /* Like R_PPC64_SECTOFF, but no overflow warning.  */
724   HOWTO (R_PPC64_SECTOFF_LO,    /* type */
725          0,                     /* rightshift */
726          1,                     /* size (0 = byte, 1 = short, 2 = long) */
727          16,                    /* bitsize */
728          FALSE,                 /* pc_relative */
729          0,                     /* bitpos */
730          complain_overflow_dont, /* complain_on_overflow */
731          ppc64_elf_sectoff_reloc, /* special_function */
732          "R_PPC64_SECTOFF_LO",  /* name */
733          FALSE,                 /* partial_inplace */
734          0,                     /* src_mask */
735          0xffff,                /* dst_mask */
736          FALSE),                /* pcrel_offset */
737
738   /* 16-bit upper half section relative relocation.  */
739   HOWTO (R_PPC64_SECTOFF_HI,    /* type */
740          16,                    /* rightshift */
741          1,                     /* size (0 = byte, 1 = short, 2 = long) */
742          16,                    /* bitsize */
743          FALSE,                 /* pc_relative */
744          0,                     /* bitpos */
745          complain_overflow_signed, /* complain_on_overflow */
746          ppc64_elf_sectoff_reloc, /* special_function */
747          "R_PPC64_SECTOFF_HI",  /* name */
748          FALSE,                 /* partial_inplace */
749          0,                     /* src_mask */
750          0xffff,                /* dst_mask */
751          FALSE),                /* pcrel_offset */
752
753   /* 16-bit upper half adjusted section relative relocation.  */
754   HOWTO (R_PPC64_SECTOFF_HA,    /* type */
755          16,                    /* rightshift */
756          1,                     /* size (0 = byte, 1 = short, 2 = long) */
757          16,                    /* bitsize */
758          FALSE,                 /* pc_relative */
759          0,                     /* bitpos */
760          complain_overflow_signed, /* complain_on_overflow */
761          ppc64_elf_sectoff_ha_reloc, /* special_function */
762          "R_PPC64_SECTOFF_HA",  /* name */
763          FALSE,                 /* partial_inplace */
764          0,                     /* src_mask */
765          0xffff,                /* dst_mask */
766          FALSE),                /* pcrel_offset */
767
768   /* Like R_PPC64_REL24 without touching the two least significant bits.  */
769   HOWTO (R_PPC64_REL30,         /* type */
770          2,                     /* rightshift */
771          2,                     /* size (0 = byte, 1 = short, 2 = long) */
772          30,                    /* bitsize */
773          TRUE,                  /* pc_relative */
774          0,                     /* bitpos */
775          complain_overflow_dont, /* complain_on_overflow */
776          bfd_elf_generic_reloc, /* special_function */
777          "R_PPC64_REL30",       /* name */
778          FALSE,                 /* partial_inplace */
779          0,                     /* src_mask */
780          0xfffffffc,            /* dst_mask */
781          TRUE),                 /* pcrel_offset */
782
783   /* Relocs in the 64-bit PowerPC ELF ABI, not in the 32-bit ABI.  */
784
785   /* A standard 64-bit relocation.  */
786   HOWTO (R_PPC64_ADDR64,        /* type */
787          0,                     /* rightshift */
788          4,                     /* size (0=byte, 1=short, 2=long, 4=64 bits) */
789          64,                    /* bitsize */
790          FALSE,                 /* pc_relative */
791          0,                     /* bitpos */
792          complain_overflow_dont, /* complain_on_overflow */
793          bfd_elf_generic_reloc, /* special_function */
794          "R_PPC64_ADDR64",      /* name */
795          FALSE,                 /* partial_inplace */
796          0,                     /* src_mask */
797          ONES (64),             /* dst_mask */
798          FALSE),                /* pcrel_offset */
799
800   /* The bits 32-47 of an address.  */
801   HOWTO (R_PPC64_ADDR16_HIGHER, /* type */
802          32,                    /* rightshift */
803          1,                     /* size (0 = byte, 1 = short, 2 = long) */
804          16,                    /* bitsize */
805          FALSE,                 /* pc_relative */
806          0,                     /* bitpos */
807          complain_overflow_dont, /* complain_on_overflow */
808          bfd_elf_generic_reloc, /* special_function */
809          "R_PPC64_ADDR16_HIGHER", /* name */
810          FALSE,                 /* partial_inplace */
811          0,                     /* src_mask */
812          0xffff,                /* dst_mask */
813          FALSE),                /* pcrel_offset */
814
815   /* The bits 32-47 of an address, plus 1 if the contents of the low
816      16 bits, treated as a signed number, is negative.  */
817   HOWTO (R_PPC64_ADDR16_HIGHERA, /* type */
818          32,                    /* rightshift */
819          1,                     /* size (0 = byte, 1 = short, 2 = long) */
820          16,                    /* bitsize */
821          FALSE,                 /* pc_relative */
822          0,                     /* bitpos */
823          complain_overflow_dont, /* complain_on_overflow */
824          ppc64_elf_ha_reloc,    /* special_function */
825          "R_PPC64_ADDR16_HIGHERA", /* name */
826          FALSE,                 /* partial_inplace */
827          0,                     /* src_mask */
828          0xffff,                /* dst_mask */
829          FALSE),                /* pcrel_offset */
830
831   /* The bits 48-63 of an address.  */
832   HOWTO (R_PPC64_ADDR16_HIGHEST,/* type */
833          48,                    /* rightshift */
834          1,                     /* size (0 = byte, 1 = short, 2 = long) */
835          16,                    /* bitsize */
836          FALSE,                 /* pc_relative */
837          0,                     /* bitpos */
838          complain_overflow_dont, /* complain_on_overflow */
839          bfd_elf_generic_reloc, /* special_function */
840          "R_PPC64_ADDR16_HIGHEST", /* name */
841          FALSE,                 /* partial_inplace */
842          0,                     /* src_mask */
843          0xffff,                /* dst_mask */
844          FALSE),                /* pcrel_offset */
845
846   /* The bits 48-63 of an address, plus 1 if the contents of the low
847      16 bits, treated as a signed number, is negative.  */
848   HOWTO (R_PPC64_ADDR16_HIGHESTA,/* type */
849          48,                    /* rightshift */
850          1,                     /* size (0 = byte, 1 = short, 2 = long) */
851          16,                    /* bitsize */
852          FALSE,                 /* pc_relative */
853          0,                     /* bitpos */
854          complain_overflow_dont, /* complain_on_overflow */
855          ppc64_elf_ha_reloc,    /* special_function */
856          "R_PPC64_ADDR16_HIGHESTA", /* name */
857          FALSE,                 /* partial_inplace */
858          0,                     /* src_mask */
859          0xffff,                /* dst_mask */
860          FALSE),                /* pcrel_offset */
861
862   /* Like ADDR64, but may be unaligned.  */
863   HOWTO (R_PPC64_UADDR64,       /* type */
864          0,                     /* rightshift */
865          4,                     /* size (0=byte, 1=short, 2=long, 4=64 bits) */
866          64,                    /* bitsize */
867          FALSE,                 /* pc_relative */
868          0,                     /* bitpos */
869          complain_overflow_dont, /* complain_on_overflow */
870          bfd_elf_generic_reloc, /* special_function */
871          "R_PPC64_UADDR64",     /* name */
872          FALSE,                 /* partial_inplace */
873          0,                     /* src_mask */
874          ONES (64),             /* dst_mask */
875          FALSE),                /* pcrel_offset */
876
877   /* 64-bit relative relocation.  */
878   HOWTO (R_PPC64_REL64,         /* type */
879          0,                     /* rightshift */
880          4,                     /* size (0=byte, 1=short, 2=long, 4=64 bits) */
881          64,                    /* bitsize */
882          TRUE,                  /* pc_relative */
883          0,                     /* bitpos */
884          complain_overflow_dont, /* complain_on_overflow */
885          bfd_elf_generic_reloc, /* special_function */
886          "R_PPC64_REL64",       /* name */
887          FALSE,                 /* partial_inplace */
888          0,                     /* src_mask */
889          ONES (64),             /* dst_mask */
890          TRUE),                 /* pcrel_offset */
891
892   /* 64-bit relocation to the symbol's procedure linkage table.  */
893   HOWTO (R_PPC64_PLT64,         /* type */
894          0,                     /* rightshift */
895          4,                     /* size (0=byte, 1=short, 2=long, 4=64 bits) */
896          64,                    /* bitsize */
897          FALSE,                 /* pc_relative */
898          0,                     /* bitpos */
899          complain_overflow_dont, /* complain_on_overflow */
900          ppc64_elf_unhandled_reloc, /* special_function */
901          "R_PPC64_PLT64",       /* name */
902          FALSE,                 /* partial_inplace */
903          0,                     /* src_mask */
904          ONES (64),             /* dst_mask */
905          FALSE),                /* pcrel_offset */
906
907   /* 64-bit PC relative relocation to the symbol's procedure linkage
908      table.  */
909   /* FIXME: R_PPC64_PLTREL64 not supported.  */
910   HOWTO (R_PPC64_PLTREL64,      /* type */
911          0,                     /* rightshift */
912          4,                     /* size (0=byte, 1=short, 2=long, 4=64 bits) */
913          64,                    /* bitsize */
914          TRUE,                  /* pc_relative */
915          0,                     /* bitpos */
916          complain_overflow_dont, /* complain_on_overflow */
917          ppc64_elf_unhandled_reloc, /* special_function */
918          "R_PPC64_PLTREL64",    /* name */
919          FALSE,                 /* partial_inplace */
920          0,                     /* src_mask */
921          ONES (64),             /* dst_mask */
922          TRUE),                 /* pcrel_offset */
923
924   /* 16 bit TOC-relative relocation.  */
925
926   /* R_PPC64_TOC16        47       half16*      S + A - .TOC.  */
927   HOWTO (R_PPC64_TOC16,         /* type */
928          0,                     /* rightshift */
929          1,                     /* size (0 = byte, 1 = short, 2 = long) */
930          16,                    /* bitsize */
931          FALSE,                 /* pc_relative */
932          0,                     /* bitpos */
933          complain_overflow_signed, /* complain_on_overflow */
934          ppc64_elf_toc_reloc,   /* special_function */
935          "R_PPC64_TOC16",       /* name */
936          FALSE,                 /* partial_inplace */
937          0,                     /* src_mask */
938          0xffff,                /* dst_mask */
939          FALSE),                /* pcrel_offset */
940
941   /* 16 bit TOC-relative relocation without overflow.  */
942
943   /* R_PPC64_TOC16_LO     48       half16        #lo (S + A - .TOC.)  */
944   HOWTO (R_PPC64_TOC16_LO,      /* type */
945          0,                     /* rightshift */
946          1,                     /* size (0 = byte, 1 = short, 2 = long) */
947          16,                    /* bitsize */
948          FALSE,                 /* pc_relative */
949          0,                     /* bitpos */
950          complain_overflow_dont, /* complain_on_overflow */
951          ppc64_elf_toc_reloc,   /* special_function */
952          "R_PPC64_TOC16_LO",    /* name */
953          FALSE,                 /* partial_inplace */
954          0,                     /* src_mask */
955          0xffff,                /* dst_mask */
956          FALSE),                /* pcrel_offset */
957
958   /* 16 bit TOC-relative relocation, high 16 bits.  */
959
960   /* R_PPC64_TOC16_HI     49       half16        #hi (S + A - .TOC.)  */
961   HOWTO (R_PPC64_TOC16_HI,      /* type */
962          16,                    /* rightshift */
963          1,                     /* size (0 = byte, 1 = short, 2 = long) */
964          16,                    /* bitsize */
965          FALSE,                 /* pc_relative */
966          0,                     /* bitpos */
967          complain_overflow_signed, /* complain_on_overflow */
968          ppc64_elf_toc_reloc,   /* special_function */
969          "R_PPC64_TOC16_HI",    /* name */
970          FALSE,                 /* partial_inplace */
971          0,                     /* src_mask */
972          0xffff,                /* dst_mask */
973          FALSE),                /* pcrel_offset */
974
975   /* 16 bit TOC-relative relocation, high 16 bits, plus 1 if the
976      contents of the low 16 bits, treated as a signed number, is
977      negative.  */
978
979   /* R_PPC64_TOC16_HA     50       half16        #ha (S + A - .TOC.)  */
980   HOWTO (R_PPC64_TOC16_HA,      /* type */
981          16,                    /* rightshift */
982          1,                     /* size (0 = byte, 1 = short, 2 = long) */
983          16,                    /* bitsize */
984          FALSE,                 /* pc_relative */
985          0,                     /* bitpos */
986          complain_overflow_signed, /* complain_on_overflow */
987          ppc64_elf_toc_ha_reloc, /* special_function */
988          "R_PPC64_TOC16_HA",    /* name */
989          FALSE,                 /* partial_inplace */
990          0,                     /* src_mask */
991          0xffff,                /* dst_mask */
992          FALSE),                /* pcrel_offset */
993
994   /* 64-bit relocation; insert value of TOC base (.TOC.).  */
995
996   /* R_PPC64_TOC                  51       doubleword64  .TOC.  */
997   HOWTO (R_PPC64_TOC,           /* type */
998          0,                     /* rightshift */
999          4,                     /* size (0=byte, 1=short, 2=long, 4=64 bits) */
1000          64,                    /* bitsize */
1001          FALSE,                 /* pc_relative */
1002          0,                     /* bitpos */
1003          complain_overflow_bitfield, /* complain_on_overflow */
1004          ppc64_elf_toc64_reloc, /* special_function */
1005          "R_PPC64_TOC",         /* name */
1006          FALSE,                 /* partial_inplace */
1007          0,                     /* src_mask */
1008          ONES (64),             /* dst_mask */
1009          FALSE),                /* pcrel_offset */
1010
1011   /* Like R_PPC64_GOT16, but also informs the link editor that the
1012      value to relocate may (!) refer to a PLT entry which the link
1013      editor (a) may replace with the symbol value.  If the link editor
1014      is unable to fully resolve the symbol, it may (b) create a PLT
1015      entry and store the address to the new PLT entry in the GOT.
1016      This permits lazy resolution of function symbols at run time.
1017      The link editor may also skip all of this and just (c) emit a
1018      R_PPC64_GLOB_DAT to tie the symbol to the GOT entry.  */
1019   /* FIXME: R_PPC64_PLTGOT16 not implemented.  */
1020     HOWTO (R_PPC64_PLTGOT16,    /* type */
1021          0,                     /* rightshift */
1022          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1023          16,                    /* bitsize */
1024          FALSE,                 /* pc_relative */
1025          0,                     /* bitpos */
1026          complain_overflow_signed, /* complain_on_overflow */
1027          ppc64_elf_unhandled_reloc, /* special_function */
1028          "R_PPC64_PLTGOT16",    /* name */
1029          FALSE,                 /* partial_inplace */
1030          0,                     /* src_mask */
1031          0xffff,                /* dst_mask */
1032          FALSE),                /* pcrel_offset */
1033
1034   /* Like R_PPC64_PLTGOT16, but without overflow.  */
1035   /* FIXME: R_PPC64_PLTGOT16_LO not implemented.  */
1036   HOWTO (R_PPC64_PLTGOT16_LO,   /* type */
1037          0,                     /* rightshift */
1038          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1039          16,                    /* bitsize */
1040          FALSE,                 /* pc_relative */
1041          0,                     /* bitpos */
1042          complain_overflow_dont, /* complain_on_overflow */
1043          ppc64_elf_unhandled_reloc, /* special_function */
1044          "R_PPC64_PLTGOT16_LO", /* name */
1045          FALSE,                 /* partial_inplace */
1046          0,                     /* src_mask */
1047          0xffff,                /* dst_mask */
1048          FALSE),                /* pcrel_offset */
1049
1050   /* Like R_PPC64_PLT_GOT16, but using bits 16-31 of the address.  */
1051   /* FIXME: R_PPC64_PLTGOT16_HI not implemented.  */
1052   HOWTO (R_PPC64_PLTGOT16_HI,   /* type */
1053          16,                    /* rightshift */
1054          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1055          16,                    /* bitsize */
1056          FALSE,                 /* pc_relative */
1057          0,                     /* bitpos */
1058          complain_overflow_signed, /* complain_on_overflow */
1059          ppc64_elf_unhandled_reloc, /* special_function */
1060          "R_PPC64_PLTGOT16_HI", /* name */
1061          FALSE,                 /* partial_inplace */
1062          0,                     /* src_mask */
1063          0xffff,                /* dst_mask */
1064          FALSE),                /* pcrel_offset */
1065
1066   /* Like R_PPC64_PLT_GOT16, but using bits 16-31 of the address, plus
1067      1 if the contents of the low 16 bits, treated as a signed number,
1068      is negative.  */
1069   /* FIXME: R_PPC64_PLTGOT16_HA not implemented.  */
1070   HOWTO (R_PPC64_PLTGOT16_HA,   /* type */
1071          16,                    /* rightshift */
1072          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1073          16,                    /* bitsize */
1074          FALSE,                 /* pc_relative */
1075          0,                     /* bitpos */
1076          complain_overflow_signed, /* complain_on_overflow */
1077          ppc64_elf_unhandled_reloc, /* special_function */
1078          "R_PPC64_PLTGOT16_HA", /* name */
1079          FALSE,                 /* partial_inplace */
1080          0,                     /* src_mask */
1081          0xffff,                /* dst_mask */
1082          FALSE),                /* pcrel_offset */
1083
1084   /* Like R_PPC64_ADDR16, but for instructions with a DS field.  */
1085   HOWTO (R_PPC64_ADDR16_DS,     /* type */
1086          0,                     /* rightshift */
1087          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1088          16,                    /* bitsize */
1089          FALSE,                 /* pc_relative */
1090          0,                     /* bitpos */
1091          complain_overflow_bitfield, /* complain_on_overflow */
1092          bfd_elf_generic_reloc, /* special_function */
1093          "R_PPC64_ADDR16_DS",   /* name */
1094          FALSE,                 /* partial_inplace */
1095          0,                     /* src_mask */
1096          0xfffc,                /* dst_mask */
1097          FALSE),                /* pcrel_offset */
1098
1099   /* Like R_PPC64_ADDR16_LO, but for instructions with a DS field.  */
1100   HOWTO (R_PPC64_ADDR16_LO_DS,  /* type */
1101          0,                     /* rightshift */
1102          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1103          16,                    /* bitsize */
1104          FALSE,                 /* pc_relative */
1105          0,                     /* bitpos */
1106          complain_overflow_dont,/* complain_on_overflow */
1107          bfd_elf_generic_reloc, /* special_function */
1108          "R_PPC64_ADDR16_LO_DS",/* name */
1109          FALSE,                 /* partial_inplace */
1110          0,                     /* src_mask */
1111          0xfffc,                /* dst_mask */
1112          FALSE),                /* pcrel_offset */
1113
1114   /* Like R_PPC64_GOT16, but for instructions with a DS field.  */
1115   HOWTO (R_PPC64_GOT16_DS,      /* type */
1116          0,                     /* rightshift */
1117          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1118          16,                    /* bitsize */
1119          FALSE,                 /* pc_relative */
1120          0,                     /* bitpos */
1121          complain_overflow_signed, /* complain_on_overflow */
1122          ppc64_elf_unhandled_reloc, /* special_function */
1123          "R_PPC64_GOT16_DS",    /* name */
1124          FALSE,                 /* partial_inplace */
1125          0,                     /* src_mask */
1126          0xfffc,                /* dst_mask */
1127          FALSE),                /* pcrel_offset */
1128
1129   /* Like R_PPC64_GOT16_LO, but for instructions with a DS field.  */
1130   HOWTO (R_PPC64_GOT16_LO_DS,   /* type */
1131          0,                     /* rightshift */
1132          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1133          16,                    /* bitsize */
1134          FALSE,                 /* pc_relative */
1135          0,                     /* bitpos */
1136          complain_overflow_dont, /* complain_on_overflow */
1137          ppc64_elf_unhandled_reloc, /* special_function */
1138          "R_PPC64_GOT16_LO_DS", /* name */
1139          FALSE,                 /* partial_inplace */
1140          0,                     /* src_mask */
1141          0xfffc,                /* dst_mask */
1142          FALSE),                /* pcrel_offset */
1143
1144   /* Like R_PPC64_PLT16_LO, but for instructions with a DS field.  */
1145   HOWTO (R_PPC64_PLT16_LO_DS,   /* type */
1146          0,                     /* rightshift */
1147          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1148          16,                    /* bitsize */
1149          FALSE,                 /* pc_relative */
1150          0,                     /* bitpos */
1151          complain_overflow_dont, /* complain_on_overflow */
1152          ppc64_elf_unhandled_reloc, /* special_function */
1153          "R_PPC64_PLT16_LO_DS", /* name */
1154          FALSE,                 /* partial_inplace */
1155          0,                     /* src_mask */
1156          0xfffc,                /* dst_mask */
1157          FALSE),                /* pcrel_offset */
1158
1159   /* Like R_PPC64_SECTOFF, but for instructions with a DS field.  */
1160   HOWTO (R_PPC64_SECTOFF_DS,    /* type */
1161          0,                     /* rightshift */
1162          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1163          16,                    /* bitsize */
1164          FALSE,                 /* pc_relative */
1165          0,                     /* bitpos */
1166          complain_overflow_bitfield, /* complain_on_overflow */
1167          ppc64_elf_sectoff_reloc, /* special_function */
1168          "R_PPC64_SECTOFF_DS",  /* name */
1169          FALSE,                 /* partial_inplace */
1170          0,                     /* src_mask */
1171          0xfffc,                /* dst_mask */
1172          FALSE),                /* pcrel_offset */
1173
1174   /* Like R_PPC64_SECTOFF_LO, but for instructions with a DS field.  */
1175   HOWTO (R_PPC64_SECTOFF_LO_DS, /* type */
1176          0,                     /* rightshift */
1177          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1178          16,                    /* bitsize */
1179          FALSE,                 /* pc_relative */
1180          0,                     /* bitpos */
1181          complain_overflow_dont, /* complain_on_overflow */
1182          ppc64_elf_sectoff_reloc, /* special_function */
1183          "R_PPC64_SECTOFF_LO_DS",/* name */
1184          FALSE,                 /* partial_inplace */
1185          0,                     /* src_mask */
1186          0xfffc,                /* dst_mask */
1187          FALSE),                /* pcrel_offset */
1188
1189   /* Like R_PPC64_TOC16, but for instructions with a DS field.  */
1190   HOWTO (R_PPC64_TOC16_DS,      /* type */
1191          0,                     /* rightshift */
1192          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1193          16,                    /* bitsize */
1194          FALSE,                 /* pc_relative */
1195          0,                     /* bitpos */
1196          complain_overflow_signed, /* complain_on_overflow */
1197          ppc64_elf_toc_reloc,   /* special_function */
1198          "R_PPC64_TOC16_DS",    /* name */
1199          FALSE,                 /* partial_inplace */
1200          0,                     /* src_mask */
1201          0xfffc,                /* dst_mask */
1202          FALSE),                /* pcrel_offset */
1203
1204   /* Like R_PPC64_TOC16_LO, but for instructions with a DS field.  */
1205   HOWTO (R_PPC64_TOC16_LO_DS,   /* type */
1206          0,                     /* rightshift */
1207          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1208          16,                    /* bitsize */
1209          FALSE,                 /* pc_relative */
1210          0,                     /* bitpos */
1211          complain_overflow_dont, /* complain_on_overflow */
1212          ppc64_elf_toc_reloc,   /* special_function */
1213          "R_PPC64_TOC16_LO_DS", /* name */
1214          FALSE,                 /* partial_inplace */
1215          0,                     /* src_mask */
1216          0xfffc,                /* dst_mask */
1217          FALSE),                /* pcrel_offset */
1218
1219   /* Like R_PPC64_PLTGOT16, but for instructions with a DS field.  */
1220   /* FIXME: R_PPC64_PLTGOT16_DS not implemented.  */
1221   HOWTO (R_PPC64_PLTGOT16_DS,   /* type */
1222          0,                     /* rightshift */
1223          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1224          16,                    /* bitsize */
1225          FALSE,                 /* pc_relative */
1226          0,                     /* bitpos */
1227          complain_overflow_signed, /* complain_on_overflow */
1228          ppc64_elf_unhandled_reloc, /* special_function */
1229          "R_PPC64_PLTGOT16_DS", /* name */
1230          FALSE,                 /* partial_inplace */
1231          0,                     /* src_mask */
1232          0xfffc,                /* dst_mask */
1233          FALSE),                /* pcrel_offset */
1234
1235   /* Like R_PPC64_PLTGOT16_LO, but for instructions with a DS field.  */
1236   /* FIXME: R_PPC64_PLTGOT16_LO not implemented.  */
1237   HOWTO (R_PPC64_PLTGOT16_LO_DS,/* type */
1238          0,                     /* rightshift */
1239          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1240          16,                    /* bitsize */
1241          FALSE,                 /* pc_relative */
1242          0,                     /* bitpos */
1243          complain_overflow_dont, /* complain_on_overflow */
1244          ppc64_elf_unhandled_reloc, /* special_function */
1245          "R_PPC64_PLTGOT16_LO_DS",/* name */
1246          FALSE,                 /* partial_inplace */
1247          0,                     /* src_mask */
1248          0xfffc,                /* dst_mask */
1249          FALSE),                /* pcrel_offset */
1250
1251   /* Marker relocs for TLS.  */
1252   HOWTO (R_PPC64_TLS,
1253          0,                     /* rightshift */
1254          2,                     /* size (0 = byte, 1 = short, 2 = long) */
1255          32,                    /* bitsize */
1256          FALSE,                 /* pc_relative */
1257          0,                     /* bitpos */
1258          complain_overflow_dont, /* complain_on_overflow */
1259          bfd_elf_generic_reloc, /* special_function */
1260          "R_PPC64_TLS",         /* name */
1261          FALSE,                 /* partial_inplace */
1262          0,                     /* src_mask */
1263          0,                     /* dst_mask */
1264          FALSE),                /* pcrel_offset */
1265
1266   HOWTO (R_PPC64_TLSGD,
1267          0,                     /* rightshift */
1268          2,                     /* size (0 = byte, 1 = short, 2 = long) */
1269          32,                    /* bitsize */
1270          FALSE,                 /* pc_relative */
1271          0,                     /* bitpos */
1272          complain_overflow_dont, /* complain_on_overflow */
1273          bfd_elf_generic_reloc, /* special_function */
1274          "R_PPC64_TLSGD",       /* name */
1275          FALSE,                 /* partial_inplace */
1276          0,                     /* src_mask */
1277          0,                     /* dst_mask */
1278          FALSE),                /* pcrel_offset */
1279
1280   HOWTO (R_PPC64_TLSLD,
1281          0,                     /* rightshift */
1282          2,                     /* size (0 = byte, 1 = short, 2 = long) */
1283          32,                    /* bitsize */
1284          FALSE,                 /* pc_relative */
1285          0,                     /* bitpos */
1286          complain_overflow_dont, /* complain_on_overflow */
1287          bfd_elf_generic_reloc, /* special_function */
1288          "R_PPC64_TLSLD",       /* name */
1289          FALSE,                 /* partial_inplace */
1290          0,                     /* src_mask */
1291          0,                     /* dst_mask */
1292          FALSE),                /* pcrel_offset */
1293
1294   HOWTO (R_PPC64_TOCSAVE,
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_TOCSAVE",     /* name */
1303          FALSE,                 /* partial_inplace */
1304          0,                     /* src_mask */
1305          0,                     /* dst_mask */
1306          FALSE),                /* pcrel_offset */
1307
1308   /* Computes the load module index of the load module that contains the
1309      definition of its TLS sym.  */
1310   HOWTO (R_PPC64_DTPMOD64,
1311          0,                     /* rightshift */
1312          4,                     /* size (0 = byte, 1 = short, 2 = long) */
1313          64,                    /* bitsize */
1314          FALSE,                 /* pc_relative */
1315          0,                     /* bitpos */
1316          complain_overflow_dont, /* complain_on_overflow */
1317          ppc64_elf_unhandled_reloc, /* special_function */
1318          "R_PPC64_DTPMOD64",    /* name */
1319          FALSE,                 /* partial_inplace */
1320          0,                     /* src_mask */
1321          ONES (64),             /* dst_mask */
1322          FALSE),                /* pcrel_offset */
1323
1324   /* Computes a dtv-relative displacement, the difference between the value
1325      of sym+add and the base address of the thread-local storage block that
1326      contains the definition of sym, minus 0x8000.  */
1327   HOWTO (R_PPC64_DTPREL64,
1328          0,                     /* rightshift */
1329          4,                     /* size (0 = byte, 1 = short, 2 = long) */
1330          64,                    /* bitsize */
1331          FALSE,                 /* pc_relative */
1332          0,                     /* bitpos */
1333          complain_overflow_dont, /* complain_on_overflow */
1334          ppc64_elf_unhandled_reloc, /* special_function */
1335          "R_PPC64_DTPREL64",    /* name */
1336          FALSE,                 /* partial_inplace */
1337          0,                     /* src_mask */
1338          ONES (64),             /* dst_mask */
1339          FALSE),                /* pcrel_offset */
1340
1341   /* A 16 bit dtprel reloc.  */
1342   HOWTO (R_PPC64_DTPREL16,
1343          0,                     /* rightshift */
1344          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1345          16,                    /* bitsize */
1346          FALSE,                 /* pc_relative */
1347          0,                     /* bitpos */
1348          complain_overflow_signed, /* complain_on_overflow */
1349          ppc64_elf_unhandled_reloc, /* special_function */
1350          "R_PPC64_DTPREL16",    /* name */
1351          FALSE,                 /* partial_inplace */
1352          0,                     /* src_mask */
1353          0xffff,                /* dst_mask */
1354          FALSE),                /* pcrel_offset */
1355
1356   /* Like DTPREL16, but no overflow.  */
1357   HOWTO (R_PPC64_DTPREL16_LO,
1358          0,                     /* rightshift */
1359          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1360          16,                    /* bitsize */
1361          FALSE,                 /* pc_relative */
1362          0,                     /* bitpos */
1363          complain_overflow_dont, /* complain_on_overflow */
1364          ppc64_elf_unhandled_reloc, /* special_function */
1365          "R_PPC64_DTPREL16_LO", /* name */
1366          FALSE,                 /* partial_inplace */
1367          0,                     /* src_mask */
1368          0xffff,                /* dst_mask */
1369          FALSE),                /* pcrel_offset */
1370
1371   /* Like DTPREL16_LO, but next higher group of 16 bits.  */
1372   HOWTO (R_PPC64_DTPREL16_HI,
1373          16,                    /* rightshift */
1374          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1375          16,                    /* bitsize */
1376          FALSE,                 /* pc_relative */
1377          0,                     /* bitpos */
1378          complain_overflow_signed, /* complain_on_overflow */
1379          ppc64_elf_unhandled_reloc, /* special_function */
1380          "R_PPC64_DTPREL16_HI", /* name */
1381          FALSE,                 /* partial_inplace */
1382          0,                     /* src_mask */
1383          0xffff,                /* dst_mask */
1384          FALSE),                /* pcrel_offset */
1385
1386   /* Like DTPREL16_HI, but adjust for low 16 bits.  */
1387   HOWTO (R_PPC64_DTPREL16_HA,
1388          16,                    /* rightshift */
1389          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1390          16,                    /* bitsize */
1391          FALSE,                 /* pc_relative */
1392          0,                     /* bitpos */
1393          complain_overflow_signed, /* complain_on_overflow */
1394          ppc64_elf_unhandled_reloc, /* special_function */
1395          "R_PPC64_DTPREL16_HA", /* name */
1396          FALSE,                 /* partial_inplace */
1397          0,                     /* src_mask */
1398          0xffff,                /* dst_mask */
1399          FALSE),                /* pcrel_offset */
1400
1401   /* Like DTPREL16_HI, but next higher group of 16 bits.  */
1402   HOWTO (R_PPC64_DTPREL16_HIGHER,
1403          32,                    /* rightshift */
1404          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1405          16,                    /* bitsize */
1406          FALSE,                 /* pc_relative */
1407          0,                     /* bitpos */
1408          complain_overflow_dont, /* complain_on_overflow */
1409          ppc64_elf_unhandled_reloc, /* special_function */
1410          "R_PPC64_DTPREL16_HIGHER", /* name */
1411          FALSE,                 /* partial_inplace */
1412          0,                     /* src_mask */
1413          0xffff,                /* dst_mask */
1414          FALSE),                /* pcrel_offset */
1415
1416   /* Like DTPREL16_HIGHER, but adjust for low 16 bits.  */
1417   HOWTO (R_PPC64_DTPREL16_HIGHERA,
1418          32,                    /* rightshift */
1419          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1420          16,                    /* bitsize */
1421          FALSE,                 /* pc_relative */
1422          0,                     /* bitpos */
1423          complain_overflow_dont, /* complain_on_overflow */
1424          ppc64_elf_unhandled_reloc, /* special_function */
1425          "R_PPC64_DTPREL16_HIGHERA", /* name */
1426          FALSE,                 /* partial_inplace */
1427          0,                     /* src_mask */
1428          0xffff,                /* dst_mask */
1429          FALSE),                /* pcrel_offset */
1430
1431   /* Like DTPREL16_HIGHER, but next higher group of 16 bits.  */
1432   HOWTO (R_PPC64_DTPREL16_HIGHEST,
1433          48,                    /* rightshift */
1434          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1435          16,                    /* bitsize */
1436          FALSE,                 /* pc_relative */
1437          0,                     /* bitpos */
1438          complain_overflow_dont, /* complain_on_overflow */
1439          ppc64_elf_unhandled_reloc, /* special_function */
1440          "R_PPC64_DTPREL16_HIGHEST", /* name */
1441          FALSE,                 /* partial_inplace */
1442          0,                     /* src_mask */
1443          0xffff,                /* dst_mask */
1444          FALSE),                /* pcrel_offset */
1445
1446   /* Like DTPREL16_HIGHEST, but adjust for low 16 bits.  */
1447   HOWTO (R_PPC64_DTPREL16_HIGHESTA,
1448          48,                    /* rightshift */
1449          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1450          16,                    /* bitsize */
1451          FALSE,                 /* pc_relative */
1452          0,                     /* bitpos */
1453          complain_overflow_dont, /* complain_on_overflow */
1454          ppc64_elf_unhandled_reloc, /* special_function */
1455          "R_PPC64_DTPREL16_HIGHESTA", /* name */
1456          FALSE,                 /* partial_inplace */
1457          0,                     /* src_mask */
1458          0xffff,                /* dst_mask */
1459          FALSE),                /* pcrel_offset */
1460
1461   /* Like DTPREL16, but for insns with a DS field.  */
1462   HOWTO (R_PPC64_DTPREL16_DS,
1463          0,                     /* rightshift */
1464          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1465          16,                    /* bitsize */
1466          FALSE,                 /* pc_relative */
1467          0,                     /* bitpos */
1468          complain_overflow_signed, /* complain_on_overflow */
1469          ppc64_elf_unhandled_reloc, /* special_function */
1470          "R_PPC64_DTPREL16_DS", /* name */
1471          FALSE,                 /* partial_inplace */
1472          0,                     /* src_mask */
1473          0xfffc,                /* dst_mask */
1474          FALSE),                /* pcrel_offset */
1475
1476   /* Like DTPREL16_DS, but no overflow.  */
1477   HOWTO (R_PPC64_DTPREL16_LO_DS,
1478          0,                     /* rightshift */
1479          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1480          16,                    /* bitsize */
1481          FALSE,                 /* pc_relative */
1482          0,                     /* bitpos */
1483          complain_overflow_dont, /* complain_on_overflow */
1484          ppc64_elf_unhandled_reloc, /* special_function */
1485          "R_PPC64_DTPREL16_LO_DS", /* name */
1486          FALSE,                 /* partial_inplace */
1487          0,                     /* src_mask */
1488          0xfffc,                /* dst_mask */
1489          FALSE),                /* pcrel_offset */
1490
1491   /* Computes a tp-relative displacement, the difference between the value of
1492      sym+add and the value of the thread pointer (r13).  */
1493   HOWTO (R_PPC64_TPREL64,
1494          0,                     /* rightshift */
1495          4,                     /* size (0 = byte, 1 = short, 2 = long) */
1496          64,                    /* bitsize */
1497          FALSE,                 /* pc_relative */
1498          0,                     /* bitpos */
1499          complain_overflow_dont, /* complain_on_overflow */
1500          ppc64_elf_unhandled_reloc, /* special_function */
1501          "R_PPC64_TPREL64",     /* name */
1502          FALSE,                 /* partial_inplace */
1503          0,                     /* src_mask */
1504          ONES (64),             /* dst_mask */
1505          FALSE),                /* pcrel_offset */
1506
1507   /* A 16 bit tprel reloc.  */
1508   HOWTO (R_PPC64_TPREL16,
1509          0,                     /* rightshift */
1510          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1511          16,                    /* bitsize */
1512          FALSE,                 /* pc_relative */
1513          0,                     /* bitpos */
1514          complain_overflow_signed, /* complain_on_overflow */
1515          ppc64_elf_unhandled_reloc, /* special_function */
1516          "R_PPC64_TPREL16",     /* name */
1517          FALSE,                 /* partial_inplace */
1518          0,                     /* src_mask */
1519          0xffff,                /* dst_mask */
1520          FALSE),                /* pcrel_offset */
1521
1522   /* Like TPREL16, but no overflow.  */
1523   HOWTO (R_PPC64_TPREL16_LO,
1524          0,                     /* rightshift */
1525          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1526          16,                    /* bitsize */
1527          FALSE,                 /* pc_relative */
1528          0,                     /* bitpos */
1529          complain_overflow_dont, /* complain_on_overflow */
1530          ppc64_elf_unhandled_reloc, /* special_function */
1531          "R_PPC64_TPREL16_LO",  /* name */
1532          FALSE,                 /* partial_inplace */
1533          0,                     /* src_mask */
1534          0xffff,                /* dst_mask */
1535          FALSE),                /* pcrel_offset */
1536
1537   /* Like TPREL16_LO, but next higher group of 16 bits.  */
1538   HOWTO (R_PPC64_TPREL16_HI,
1539          16,                    /* rightshift */
1540          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1541          16,                    /* bitsize */
1542          FALSE,                 /* pc_relative */
1543          0,                     /* bitpos */
1544          complain_overflow_signed, /* complain_on_overflow */
1545          ppc64_elf_unhandled_reloc, /* special_function */
1546          "R_PPC64_TPREL16_HI",  /* name */
1547          FALSE,                 /* partial_inplace */
1548          0,                     /* src_mask */
1549          0xffff,                /* dst_mask */
1550          FALSE),                /* pcrel_offset */
1551
1552   /* Like TPREL16_HI, but adjust for low 16 bits.  */
1553   HOWTO (R_PPC64_TPREL16_HA,
1554          16,                    /* rightshift */
1555          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1556          16,                    /* bitsize */
1557          FALSE,                 /* pc_relative */
1558          0,                     /* bitpos */
1559          complain_overflow_signed, /* complain_on_overflow */
1560          ppc64_elf_unhandled_reloc, /* special_function */
1561          "R_PPC64_TPREL16_HA",  /* name */
1562          FALSE,                 /* partial_inplace */
1563          0,                     /* src_mask */
1564          0xffff,                /* dst_mask */
1565          FALSE),                /* pcrel_offset */
1566
1567   /* Like TPREL16_HI, but next higher group of 16 bits.  */
1568   HOWTO (R_PPC64_TPREL16_HIGHER,
1569          32,                    /* rightshift */
1570          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1571          16,                    /* bitsize */
1572          FALSE,                 /* pc_relative */
1573          0,                     /* bitpos */
1574          complain_overflow_dont, /* complain_on_overflow */
1575          ppc64_elf_unhandled_reloc, /* special_function */
1576          "R_PPC64_TPREL16_HIGHER",      /* name */
1577          FALSE,                 /* partial_inplace */
1578          0,                     /* src_mask */
1579          0xffff,                /* dst_mask */
1580          FALSE),                /* pcrel_offset */
1581
1582   /* Like TPREL16_HIGHER, but adjust for low 16 bits.  */
1583   HOWTO (R_PPC64_TPREL16_HIGHERA,
1584          32,                    /* rightshift */
1585          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1586          16,                    /* bitsize */
1587          FALSE,                 /* pc_relative */
1588          0,                     /* bitpos */
1589          complain_overflow_dont, /* complain_on_overflow */
1590          ppc64_elf_unhandled_reloc, /* special_function */
1591          "R_PPC64_TPREL16_HIGHERA", /* name */
1592          FALSE,                 /* partial_inplace */
1593          0,                     /* src_mask */
1594          0xffff,                /* dst_mask */
1595          FALSE),                /* pcrel_offset */
1596
1597   /* Like TPREL16_HIGHER, but next higher group of 16 bits.  */
1598   HOWTO (R_PPC64_TPREL16_HIGHEST,
1599          48,                    /* rightshift */
1600          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1601          16,                    /* bitsize */
1602          FALSE,                 /* pc_relative */
1603          0,                     /* bitpos */
1604          complain_overflow_dont, /* complain_on_overflow */
1605          ppc64_elf_unhandled_reloc, /* special_function */
1606          "R_PPC64_TPREL16_HIGHEST", /* name */
1607          FALSE,                 /* partial_inplace */
1608          0,                     /* src_mask */
1609          0xffff,                /* dst_mask */
1610          FALSE),                /* pcrel_offset */
1611
1612   /* Like TPREL16_HIGHEST, but adjust for low 16 bits.  */
1613   HOWTO (R_PPC64_TPREL16_HIGHESTA,
1614          48,                    /* rightshift */
1615          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1616          16,                    /* bitsize */
1617          FALSE,                 /* pc_relative */
1618          0,                     /* bitpos */
1619          complain_overflow_dont, /* complain_on_overflow */
1620          ppc64_elf_unhandled_reloc, /* special_function */
1621          "R_PPC64_TPREL16_HIGHESTA", /* name */
1622          FALSE,                 /* partial_inplace */
1623          0,                     /* src_mask */
1624          0xffff,                /* dst_mask */
1625          FALSE),                /* pcrel_offset */
1626
1627   /* Like TPREL16, but for insns with a DS field.  */
1628   HOWTO (R_PPC64_TPREL16_DS,
1629          0,                     /* rightshift */
1630          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1631          16,                    /* bitsize */
1632          FALSE,                 /* pc_relative */
1633          0,                     /* bitpos */
1634          complain_overflow_signed, /* complain_on_overflow */
1635          ppc64_elf_unhandled_reloc, /* special_function */
1636          "R_PPC64_TPREL16_DS",  /* name */
1637          FALSE,                 /* partial_inplace */
1638          0,                     /* src_mask */
1639          0xfffc,                /* dst_mask */
1640          FALSE),                /* pcrel_offset */
1641
1642   /* Like TPREL16_DS, but no overflow.  */
1643   HOWTO (R_PPC64_TPREL16_LO_DS,
1644          0,                     /* rightshift */
1645          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1646          16,                    /* bitsize */
1647          FALSE,                 /* pc_relative */
1648          0,                     /* bitpos */
1649          complain_overflow_dont, /* complain_on_overflow */
1650          ppc64_elf_unhandled_reloc, /* special_function */
1651          "R_PPC64_TPREL16_LO_DS", /* name */
1652          FALSE,                 /* partial_inplace */
1653          0,                     /* src_mask */
1654          0xfffc,                /* dst_mask */
1655          FALSE),                /* pcrel_offset */
1656
1657   /* Allocates two contiguous entries in the GOT to hold a tls_index structure,
1658      with values (sym+add)@dtpmod and (sym+add)@dtprel, and computes the offset
1659      to the first entry relative to the TOC base (r2).  */
1660   HOWTO (R_PPC64_GOT_TLSGD16,
1661          0,                     /* rightshift */
1662          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1663          16,                    /* bitsize */
1664          FALSE,                 /* pc_relative */
1665          0,                     /* bitpos */
1666          complain_overflow_signed, /* complain_on_overflow */
1667          ppc64_elf_unhandled_reloc, /* special_function */
1668          "R_PPC64_GOT_TLSGD16", /* name */
1669          FALSE,                 /* partial_inplace */
1670          0,                     /* src_mask */
1671          0xffff,                /* dst_mask */
1672          FALSE),                /* pcrel_offset */
1673
1674   /* Like GOT_TLSGD16, but no overflow.  */
1675   HOWTO (R_PPC64_GOT_TLSGD16_LO,
1676          0,                     /* rightshift */
1677          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1678          16,                    /* bitsize */
1679          FALSE,                 /* pc_relative */
1680          0,                     /* bitpos */
1681          complain_overflow_dont, /* complain_on_overflow */
1682          ppc64_elf_unhandled_reloc, /* special_function */
1683          "R_PPC64_GOT_TLSGD16_LO", /* name */
1684          FALSE,                 /* partial_inplace */
1685          0,                     /* src_mask */
1686          0xffff,                /* dst_mask */
1687          FALSE),                /* pcrel_offset */
1688
1689   /* Like GOT_TLSGD16_LO, but next higher group of 16 bits.  */
1690   HOWTO (R_PPC64_GOT_TLSGD16_HI,
1691          16,                    /* rightshift */
1692          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1693          16,                    /* bitsize */
1694          FALSE,                 /* pc_relative */
1695          0,                     /* bitpos */
1696          complain_overflow_signed, /* complain_on_overflow */
1697          ppc64_elf_unhandled_reloc, /* special_function */
1698          "R_PPC64_GOT_TLSGD16_HI", /* name */
1699          FALSE,                 /* partial_inplace */
1700          0,                     /* src_mask */
1701          0xffff,                /* dst_mask */
1702          FALSE),                /* pcrel_offset */
1703
1704   /* Like GOT_TLSGD16_HI, but adjust for low 16 bits.  */
1705   HOWTO (R_PPC64_GOT_TLSGD16_HA,
1706          16,                    /* rightshift */
1707          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1708          16,                    /* bitsize */
1709          FALSE,                 /* pc_relative */
1710          0,                     /* bitpos */
1711          complain_overflow_signed, /* complain_on_overflow */
1712          ppc64_elf_unhandled_reloc, /* special_function */
1713          "R_PPC64_GOT_TLSGD16_HA", /* name */
1714          FALSE,                 /* partial_inplace */
1715          0,                     /* src_mask */
1716          0xffff,                /* dst_mask */
1717          FALSE),                /* pcrel_offset */
1718
1719   /* Allocates two contiguous entries in the GOT to hold a tls_index structure,
1720      with values (sym+add)@dtpmod and zero, and computes the offset to the
1721      first entry relative to the TOC base (r2).  */
1722   HOWTO (R_PPC64_GOT_TLSLD16,
1723          0,                     /* rightshift */
1724          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1725          16,                    /* bitsize */
1726          FALSE,                 /* pc_relative */
1727          0,                     /* bitpos */
1728          complain_overflow_signed, /* complain_on_overflow */
1729          ppc64_elf_unhandled_reloc, /* special_function */
1730          "R_PPC64_GOT_TLSLD16", /* name */
1731          FALSE,                 /* partial_inplace */
1732          0,                     /* src_mask */
1733          0xffff,                /* dst_mask */
1734          FALSE),                /* pcrel_offset */
1735
1736   /* Like GOT_TLSLD16, but no overflow.  */
1737   HOWTO (R_PPC64_GOT_TLSLD16_LO,
1738          0,                     /* rightshift */
1739          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1740          16,                    /* bitsize */
1741          FALSE,                 /* pc_relative */
1742          0,                     /* bitpos */
1743          complain_overflow_dont, /* complain_on_overflow */
1744          ppc64_elf_unhandled_reloc, /* special_function */
1745          "R_PPC64_GOT_TLSLD16_LO", /* name */
1746          FALSE,                 /* partial_inplace */
1747          0,                     /* src_mask */
1748          0xffff,                /* dst_mask */
1749          FALSE),                /* pcrel_offset */
1750
1751   /* Like GOT_TLSLD16_LO, but next higher group of 16 bits.  */
1752   HOWTO (R_PPC64_GOT_TLSLD16_HI,
1753          16,                    /* rightshift */
1754          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1755          16,                    /* bitsize */
1756          FALSE,                 /* pc_relative */
1757          0,                     /* bitpos */
1758          complain_overflow_signed, /* complain_on_overflow */
1759          ppc64_elf_unhandled_reloc, /* special_function */
1760          "R_PPC64_GOT_TLSLD16_HI", /* name */
1761          FALSE,                 /* partial_inplace */
1762          0,                     /* src_mask */
1763          0xffff,                /* dst_mask */
1764          FALSE),                /* pcrel_offset */
1765
1766   /* Like GOT_TLSLD16_HI, but adjust for low 16 bits.  */
1767   HOWTO (R_PPC64_GOT_TLSLD16_HA,
1768          16,                    /* rightshift */
1769          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1770          16,                    /* bitsize */
1771          FALSE,                 /* pc_relative */
1772          0,                     /* bitpos */
1773          complain_overflow_signed, /* complain_on_overflow */
1774          ppc64_elf_unhandled_reloc, /* special_function */
1775          "R_PPC64_GOT_TLSLD16_HA", /* name */
1776          FALSE,                 /* partial_inplace */
1777          0,                     /* src_mask */
1778          0xffff,                /* dst_mask */
1779          FALSE),                /* pcrel_offset */
1780
1781   /* Allocates an entry in the GOT with value (sym+add)@dtprel, and computes
1782      the offset to the entry relative to the TOC base (r2).  */
1783   HOWTO (R_PPC64_GOT_DTPREL16_DS,
1784          0,                     /* rightshift */
1785          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1786          16,                    /* bitsize */
1787          FALSE,                 /* pc_relative */
1788          0,                     /* bitpos */
1789          complain_overflow_signed, /* complain_on_overflow */
1790          ppc64_elf_unhandled_reloc, /* special_function */
1791          "R_PPC64_GOT_DTPREL16_DS", /* name */
1792          FALSE,                 /* partial_inplace */
1793          0,                     /* src_mask */
1794          0xfffc,                /* dst_mask */
1795          FALSE),                /* pcrel_offset */
1796
1797   /* Like GOT_DTPREL16_DS, but no overflow.  */
1798   HOWTO (R_PPC64_GOT_DTPREL16_LO_DS,
1799          0,                     /* rightshift */
1800          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1801          16,                    /* bitsize */
1802          FALSE,                 /* pc_relative */
1803          0,                     /* bitpos */
1804          complain_overflow_dont, /* complain_on_overflow */
1805          ppc64_elf_unhandled_reloc, /* special_function */
1806          "R_PPC64_GOT_DTPREL16_LO_DS", /* name */
1807          FALSE,                 /* partial_inplace */
1808          0,                     /* src_mask */
1809          0xfffc,                /* dst_mask */
1810          FALSE),                /* pcrel_offset */
1811
1812   /* Like GOT_DTPREL16_LO_DS, but next higher group of 16 bits.  */
1813   HOWTO (R_PPC64_GOT_DTPREL16_HI,
1814          16,                    /* rightshift */
1815          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1816          16,                    /* bitsize */
1817          FALSE,                 /* pc_relative */
1818          0,                     /* bitpos */
1819          complain_overflow_signed, /* complain_on_overflow */
1820          ppc64_elf_unhandled_reloc, /* special_function */
1821          "R_PPC64_GOT_DTPREL16_HI", /* name */
1822          FALSE,                 /* partial_inplace */
1823          0,                     /* src_mask */
1824          0xffff,                /* dst_mask */
1825          FALSE),                /* pcrel_offset */
1826
1827   /* Like GOT_DTPREL16_HI, but adjust for low 16 bits.  */
1828   HOWTO (R_PPC64_GOT_DTPREL16_HA,
1829          16,                    /* rightshift */
1830          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1831          16,                    /* bitsize */
1832          FALSE,                 /* pc_relative */
1833          0,                     /* bitpos */
1834          complain_overflow_signed, /* complain_on_overflow */
1835          ppc64_elf_unhandled_reloc, /* special_function */
1836          "R_PPC64_GOT_DTPREL16_HA", /* name */
1837          FALSE,                 /* partial_inplace */
1838          0,                     /* src_mask */
1839          0xffff,                /* dst_mask */
1840          FALSE),                /* pcrel_offset */
1841
1842   /* Allocates an entry in the GOT with value (sym+add)@tprel, and computes the
1843      offset to the entry relative to the TOC base (r2).  */
1844   HOWTO (R_PPC64_GOT_TPREL16_DS,
1845          0,                     /* rightshift */
1846          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1847          16,                    /* bitsize */
1848          FALSE,                 /* pc_relative */
1849          0,                     /* bitpos */
1850          complain_overflow_signed, /* complain_on_overflow */
1851          ppc64_elf_unhandled_reloc, /* special_function */
1852          "R_PPC64_GOT_TPREL16_DS", /* name */
1853          FALSE,                 /* partial_inplace */
1854          0,                     /* src_mask */
1855          0xfffc,                /* dst_mask */
1856          FALSE),                /* pcrel_offset */
1857
1858   /* Like GOT_TPREL16_DS, but no overflow.  */
1859   HOWTO (R_PPC64_GOT_TPREL16_LO_DS,
1860          0,                     /* rightshift */
1861          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1862          16,                    /* bitsize */
1863          FALSE,                 /* pc_relative */
1864          0,                     /* bitpos */
1865          complain_overflow_dont, /* complain_on_overflow */
1866          ppc64_elf_unhandled_reloc, /* special_function */
1867          "R_PPC64_GOT_TPREL16_LO_DS", /* name */
1868          FALSE,                 /* partial_inplace */
1869          0,                     /* src_mask */
1870          0xfffc,                /* dst_mask */
1871          FALSE),                /* pcrel_offset */
1872
1873   /* Like GOT_TPREL16_LO_DS, but next higher group of 16 bits.  */
1874   HOWTO (R_PPC64_GOT_TPREL16_HI,
1875          16,                    /* rightshift */
1876          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1877          16,                    /* bitsize */
1878          FALSE,                 /* pc_relative */
1879          0,                     /* bitpos */
1880          complain_overflow_signed, /* complain_on_overflow */
1881          ppc64_elf_unhandled_reloc, /* special_function */
1882          "R_PPC64_GOT_TPREL16_HI", /* name */
1883          FALSE,                 /* partial_inplace */
1884          0,                     /* src_mask */
1885          0xffff,                /* dst_mask */
1886          FALSE),                /* pcrel_offset */
1887
1888   /* Like GOT_TPREL16_HI, but adjust for low 16 bits.  */
1889   HOWTO (R_PPC64_GOT_TPREL16_HA,
1890          16,                    /* rightshift */
1891          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1892          16,                    /* bitsize */
1893          FALSE,                 /* pc_relative */
1894          0,                     /* bitpos */
1895          complain_overflow_signed, /* complain_on_overflow */
1896          ppc64_elf_unhandled_reloc, /* special_function */
1897          "R_PPC64_GOT_TPREL16_HA", /* name */
1898          FALSE,                 /* partial_inplace */
1899          0,                     /* src_mask */
1900          0xffff,                /* dst_mask */
1901          FALSE),                /* pcrel_offset */
1902
1903   HOWTO (R_PPC64_JMP_IREL,      /* type */
1904          0,                     /* rightshift */
1905          0,                     /* size (0=byte, 1=short, 2=long, 4=64 bits) */
1906          0,                     /* bitsize */
1907          FALSE,                 /* pc_relative */
1908          0,                     /* bitpos */
1909          complain_overflow_dont, /* complain_on_overflow */
1910          ppc64_elf_unhandled_reloc, /* special_function */
1911          "R_PPC64_JMP_IREL",    /* name */
1912          FALSE,                 /* partial_inplace */
1913          0,                     /* src_mask */
1914          0,                     /* dst_mask */
1915          FALSE),                /* pcrel_offset */
1916
1917   HOWTO (R_PPC64_IRELATIVE,     /* type */
1918          0,                     /* rightshift */
1919          4,                     /* size (0=byte, 1=short, 2=long, 4=64 bits) */
1920          64,                    /* bitsize */
1921          FALSE,                 /* pc_relative */
1922          0,                     /* bitpos */
1923          complain_overflow_dont, /* complain_on_overflow */
1924          bfd_elf_generic_reloc, /* special_function */
1925          "R_PPC64_IRELATIVE",   /* name */
1926          FALSE,                 /* partial_inplace */
1927          0,                     /* src_mask */
1928          ONES (64),             /* dst_mask */
1929          FALSE),                /* pcrel_offset */
1930
1931   /* A 16 bit relative relocation.  */
1932   HOWTO (R_PPC64_REL16,         /* type */
1933          0,                     /* rightshift */
1934          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1935          16,                    /* bitsize */
1936          TRUE,                  /* pc_relative */
1937          0,                     /* bitpos */
1938          complain_overflow_bitfield, /* complain_on_overflow */
1939          bfd_elf_generic_reloc, /* special_function */
1940          "R_PPC64_REL16",       /* name */
1941          FALSE,                 /* partial_inplace */
1942          0,                     /* src_mask */
1943          0xffff,                /* dst_mask */
1944          TRUE),                 /* pcrel_offset */
1945
1946   /* A 16 bit relative relocation without overflow.  */
1947   HOWTO (R_PPC64_REL16_LO,      /* type */
1948          0,                     /* rightshift */
1949          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1950          16,                    /* bitsize */
1951          TRUE,                  /* pc_relative */
1952          0,                     /* bitpos */
1953          complain_overflow_dont,/* complain_on_overflow */
1954          bfd_elf_generic_reloc, /* special_function */
1955          "R_PPC64_REL16_LO",    /* name */
1956          FALSE,                 /* partial_inplace */
1957          0,                     /* src_mask */
1958          0xffff,                /* dst_mask */
1959          TRUE),                 /* pcrel_offset */
1960
1961   /* The high order 16 bits of a relative address.  */
1962   HOWTO (R_PPC64_REL16_HI,      /* type */
1963          16,                    /* rightshift */
1964          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1965          16,                    /* bitsize */
1966          TRUE,                  /* pc_relative */
1967          0,                     /* bitpos */
1968          complain_overflow_signed, /* complain_on_overflow */
1969          bfd_elf_generic_reloc, /* special_function */
1970          "R_PPC64_REL16_HI",    /* name */
1971          FALSE,                 /* partial_inplace */
1972          0,                     /* src_mask */
1973          0xffff,                /* dst_mask */
1974          TRUE),                 /* pcrel_offset */
1975
1976   /* The high order 16 bits of a relative address, plus 1 if the contents of
1977      the low 16 bits, treated as a signed number, is negative.  */
1978   HOWTO (R_PPC64_REL16_HA,      /* type */
1979          16,                    /* rightshift */
1980          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1981          16,                    /* bitsize */
1982          TRUE,                  /* pc_relative */
1983          0,                     /* bitpos */
1984          complain_overflow_signed, /* complain_on_overflow */
1985          ppc64_elf_ha_reloc,    /* special_function */
1986          "R_PPC64_REL16_HA",    /* name */
1987          FALSE,                 /* partial_inplace */
1988          0,                     /* src_mask */
1989          0xffff,                /* dst_mask */
1990          TRUE),                 /* pcrel_offset */
1991
1992   /* Like R_PPC64_ADDR16_HI, but no overflow.  */
1993   HOWTO (R_PPC64_ADDR16_HIGH,   /* type */
1994          16,                    /* rightshift */
1995          1,                     /* size (0 = byte, 1 = short, 2 = long) */
1996          16,                    /* bitsize */
1997          FALSE,                 /* pc_relative */
1998          0,                     /* bitpos */
1999          complain_overflow_dont, /* complain_on_overflow */
2000          bfd_elf_generic_reloc, /* special_function */
2001          "R_PPC64_ADDR16_HIGH", /* name */
2002          FALSE,                 /* partial_inplace */
2003          0,                     /* src_mask */
2004          0xffff,                /* dst_mask */
2005          FALSE),                /* pcrel_offset */
2006
2007   /* Like R_PPC64_ADDR16_HA, but no overflow.  */
2008   HOWTO (R_PPC64_ADDR16_HIGHA,  /* type */
2009          16,                    /* rightshift */
2010          1,                     /* size (0 = byte, 1 = short, 2 = long) */
2011          16,                    /* bitsize */
2012          FALSE,                 /* pc_relative */
2013          0,                     /* bitpos */
2014          complain_overflow_dont, /* complain_on_overflow */
2015          ppc64_elf_ha_reloc,    /* special_function */
2016          "R_PPC64_ADDR16_HIGHA",        /* name */
2017          FALSE,                 /* partial_inplace */
2018          0,                     /* src_mask */
2019          0xffff,                /* dst_mask */
2020          FALSE),                /* pcrel_offset */
2021
2022   /* Like R_PPC64_DTPREL16_HI, but no overflow.  */
2023   HOWTO (R_PPC64_DTPREL16_HIGH,
2024          16,                    /* rightshift */
2025          1,                     /* size (0 = byte, 1 = short, 2 = long) */
2026          16,                    /* bitsize */
2027          FALSE,                 /* pc_relative */
2028          0,                     /* bitpos */
2029          complain_overflow_dont, /* complain_on_overflow */
2030          ppc64_elf_unhandled_reloc, /* special_function */
2031          "R_PPC64_DTPREL16_HIGH", /* name */
2032          FALSE,                 /* partial_inplace */
2033          0,                     /* src_mask */
2034          0xffff,                /* dst_mask */
2035          FALSE),                /* pcrel_offset */
2036
2037   /* Like R_PPC64_DTPREL16_HA, but no overflow.  */
2038   HOWTO (R_PPC64_DTPREL16_HIGHA,
2039          16,                    /* rightshift */
2040          1,                     /* size (0 = byte, 1 = short, 2 = long) */
2041          16,                    /* bitsize */
2042          FALSE,                 /* pc_relative */
2043          0,                     /* bitpos */
2044          complain_overflow_dont, /* complain_on_overflow */
2045          ppc64_elf_unhandled_reloc, /* special_function */
2046          "R_PPC64_DTPREL16_HIGHA", /* name */
2047          FALSE,                 /* partial_inplace */
2048          0,                     /* src_mask */
2049          0xffff,                /* dst_mask */
2050          FALSE),                /* pcrel_offset */
2051
2052   /* Like R_PPC64_TPREL16_HI, but no overflow.  */
2053   HOWTO (R_PPC64_TPREL16_HIGH,
2054          16,                    /* rightshift */
2055          1,                     /* size (0 = byte, 1 = short, 2 = long) */
2056          16,                    /* bitsize */
2057          FALSE,                 /* pc_relative */
2058          0,                     /* bitpos */
2059          complain_overflow_dont, /* complain_on_overflow */
2060          ppc64_elf_unhandled_reloc, /* special_function */
2061          "R_PPC64_TPREL16_HIGH",        /* name */
2062          FALSE,                 /* partial_inplace */
2063          0,                     /* src_mask */
2064          0xffff,                /* dst_mask */
2065          FALSE),                /* pcrel_offset */
2066
2067   /* Like R_PPC64_TPREL16_HA, but no overflow.  */
2068   HOWTO (R_PPC64_TPREL16_HIGHA,
2069          16,                    /* rightshift */
2070          1,                     /* size (0 = byte, 1 = short, 2 = long) */
2071          16,                    /* bitsize */
2072          FALSE,                 /* pc_relative */
2073          0,                     /* bitpos */
2074          complain_overflow_dont, /* complain_on_overflow */
2075          ppc64_elf_unhandled_reloc, /* special_function */
2076          "R_PPC64_TPREL16_HIGHA",       /* name */
2077          FALSE,                 /* partial_inplace */
2078          0,                     /* src_mask */
2079          0xffff,                /* dst_mask */
2080          FALSE),                /* pcrel_offset */
2081
2082   /* GNU extension to record C++ vtable hierarchy.  */
2083   HOWTO (R_PPC64_GNU_VTINHERIT, /* type */
2084          0,                     /* rightshift */
2085          0,                     /* size (0 = byte, 1 = short, 2 = long) */
2086          0,                     /* bitsize */
2087          FALSE,                 /* pc_relative */
2088          0,                     /* bitpos */
2089          complain_overflow_dont, /* complain_on_overflow */
2090          NULL,                  /* special_function */
2091          "R_PPC64_GNU_VTINHERIT", /* name */
2092          FALSE,                 /* partial_inplace */
2093          0,                     /* src_mask */
2094          0,                     /* dst_mask */
2095          FALSE),                /* pcrel_offset */
2096
2097   /* GNU extension to record C++ vtable member usage.  */
2098   HOWTO (R_PPC64_GNU_VTENTRY,   /* type */
2099          0,                     /* rightshift */
2100          0,                     /* size (0 = byte, 1 = short, 2 = long) */
2101          0,                     /* bitsize */
2102          FALSE,                 /* pc_relative */
2103          0,                     /* bitpos */
2104          complain_overflow_dont, /* complain_on_overflow */
2105          NULL,                  /* special_function */
2106          "R_PPC64_GNU_VTENTRY", /* name */
2107          FALSE,                 /* partial_inplace */
2108          0,                     /* src_mask */
2109          0,                     /* dst_mask */
2110          FALSE),                /* pcrel_offset */
2111 };
2112
2113 \f
2114 /* Initialize the ppc64_elf_howto_table, so that linear accesses can
2115    be done.  */
2116
2117 static void
2118 ppc_howto_init (void)
2119 {
2120   unsigned int i, type;
2121
2122   for (i = 0;
2123        i < sizeof (ppc64_elf_howto_raw) / sizeof (ppc64_elf_howto_raw[0]);
2124        i++)
2125     {
2126       type = ppc64_elf_howto_raw[i].type;
2127       BFD_ASSERT (type < (sizeof (ppc64_elf_howto_table)
2128                           / sizeof (ppc64_elf_howto_table[0])));
2129       ppc64_elf_howto_table[type] = &ppc64_elf_howto_raw[i];
2130     }
2131 }
2132
2133 static reloc_howto_type *
2134 ppc64_elf_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
2135                              bfd_reloc_code_real_type code)
2136 {
2137   enum elf_ppc64_reloc_type r = R_PPC64_NONE;
2138
2139   if (!ppc64_elf_howto_table[R_PPC64_ADDR32])
2140     /* Initialize howto table if needed.  */
2141     ppc_howto_init ();
2142
2143   switch (code)
2144     {
2145     default:
2146       return NULL;
2147
2148     case BFD_RELOC_NONE:                        r = R_PPC64_NONE;
2149       break;
2150     case BFD_RELOC_32:                          r = R_PPC64_ADDR32;
2151       break;
2152     case BFD_RELOC_PPC_BA26:                    r = R_PPC64_ADDR24;
2153       break;
2154     case BFD_RELOC_16:                          r = R_PPC64_ADDR16;
2155       break;
2156     case BFD_RELOC_LO16:                        r = R_PPC64_ADDR16_LO;
2157       break;
2158     case BFD_RELOC_HI16:                        r = R_PPC64_ADDR16_HI;
2159       break;
2160     case BFD_RELOC_PPC64_ADDR16_HIGH:           r = R_PPC64_ADDR16_HIGH;
2161       break;
2162     case BFD_RELOC_HI16_S:                      r = R_PPC64_ADDR16_HA;
2163       break;
2164     case BFD_RELOC_PPC64_ADDR16_HIGHA:          r = R_PPC64_ADDR16_HIGHA;
2165       break;
2166     case BFD_RELOC_PPC_BA16:                    r = R_PPC64_ADDR14;
2167       break;
2168     case BFD_RELOC_PPC_BA16_BRTAKEN:            r = R_PPC64_ADDR14_BRTAKEN;
2169       break;
2170     case BFD_RELOC_PPC_BA16_BRNTAKEN:           r = R_PPC64_ADDR14_BRNTAKEN;
2171       break;
2172     case BFD_RELOC_PPC_B26:                     r = R_PPC64_REL24;
2173       break;
2174     case BFD_RELOC_PPC_B16:                     r = R_PPC64_REL14;
2175       break;
2176     case BFD_RELOC_PPC_B16_BRTAKEN:             r = R_PPC64_REL14_BRTAKEN;
2177       break;
2178     case BFD_RELOC_PPC_B16_BRNTAKEN:            r = R_PPC64_REL14_BRNTAKEN;
2179       break;
2180     case BFD_RELOC_16_GOTOFF:                   r = R_PPC64_GOT16;
2181       break;
2182     case BFD_RELOC_LO16_GOTOFF:                 r = R_PPC64_GOT16_LO;
2183       break;
2184     case BFD_RELOC_HI16_GOTOFF:                 r = R_PPC64_GOT16_HI;
2185       break;
2186     case BFD_RELOC_HI16_S_GOTOFF:               r = R_PPC64_GOT16_HA;
2187       break;
2188     case BFD_RELOC_PPC_COPY:                    r = R_PPC64_COPY;
2189       break;
2190     case BFD_RELOC_PPC_GLOB_DAT:                r = R_PPC64_GLOB_DAT;
2191       break;
2192     case BFD_RELOC_32_PCREL:                    r = R_PPC64_REL32;
2193       break;
2194     case BFD_RELOC_32_PLTOFF:                   r = R_PPC64_PLT32;
2195       break;
2196     case BFD_RELOC_32_PLT_PCREL:                r = R_PPC64_PLTREL32;
2197       break;
2198     case BFD_RELOC_LO16_PLTOFF:                 r = R_PPC64_PLT16_LO;
2199       break;
2200     case BFD_RELOC_HI16_PLTOFF:                 r = R_PPC64_PLT16_HI;
2201       break;
2202     case BFD_RELOC_HI16_S_PLTOFF:               r = R_PPC64_PLT16_HA;
2203       break;
2204     case BFD_RELOC_16_BASEREL:                  r = R_PPC64_SECTOFF;
2205       break;
2206     case BFD_RELOC_LO16_BASEREL:                r = R_PPC64_SECTOFF_LO;
2207       break;
2208     case BFD_RELOC_HI16_BASEREL:                r = R_PPC64_SECTOFF_HI;
2209       break;
2210     case BFD_RELOC_HI16_S_BASEREL:              r = R_PPC64_SECTOFF_HA;
2211       break;
2212     case BFD_RELOC_CTOR:                        r = R_PPC64_ADDR64;
2213       break;
2214     case BFD_RELOC_64:                          r = R_PPC64_ADDR64;
2215       break;
2216     case BFD_RELOC_PPC64_HIGHER:                r = R_PPC64_ADDR16_HIGHER;
2217       break;
2218     case BFD_RELOC_PPC64_HIGHER_S:              r = R_PPC64_ADDR16_HIGHERA;
2219       break;
2220     case BFD_RELOC_PPC64_HIGHEST:               r = R_PPC64_ADDR16_HIGHEST;
2221       break;
2222     case BFD_RELOC_PPC64_HIGHEST_S:             r = R_PPC64_ADDR16_HIGHESTA;
2223       break;
2224     case BFD_RELOC_64_PCREL:                    r = R_PPC64_REL64;
2225       break;
2226     case BFD_RELOC_64_PLTOFF:                   r = R_PPC64_PLT64;
2227       break;
2228     case BFD_RELOC_64_PLT_PCREL:                r = R_PPC64_PLTREL64;
2229       break;
2230     case BFD_RELOC_PPC_TOC16:                   r = R_PPC64_TOC16;
2231       break;
2232     case BFD_RELOC_PPC64_TOC16_LO:              r = R_PPC64_TOC16_LO;
2233       break;
2234     case BFD_RELOC_PPC64_TOC16_HI:              r = R_PPC64_TOC16_HI;
2235       break;
2236     case BFD_RELOC_PPC64_TOC16_HA:              r = R_PPC64_TOC16_HA;
2237       break;
2238     case BFD_RELOC_PPC64_TOC:                   r = R_PPC64_TOC;
2239       break;
2240     case BFD_RELOC_PPC64_PLTGOT16:              r = R_PPC64_PLTGOT16;
2241       break;
2242     case BFD_RELOC_PPC64_PLTGOT16_LO:           r = R_PPC64_PLTGOT16_LO;
2243       break;
2244     case BFD_RELOC_PPC64_PLTGOT16_HI:           r = R_PPC64_PLTGOT16_HI;
2245       break;
2246     case BFD_RELOC_PPC64_PLTGOT16_HA:           r = R_PPC64_PLTGOT16_HA;
2247       break;
2248     case BFD_RELOC_PPC64_ADDR16_DS:             r = R_PPC64_ADDR16_DS;
2249       break;
2250     case BFD_RELOC_PPC64_ADDR16_LO_DS:          r = R_PPC64_ADDR16_LO_DS;
2251       break;
2252     case BFD_RELOC_PPC64_GOT16_DS:              r = R_PPC64_GOT16_DS;
2253       break;
2254     case BFD_RELOC_PPC64_GOT16_LO_DS:           r = R_PPC64_GOT16_LO_DS;
2255       break;
2256     case BFD_RELOC_PPC64_PLT16_LO_DS:           r = R_PPC64_PLT16_LO_DS;
2257       break;
2258     case BFD_RELOC_PPC64_SECTOFF_DS:            r = R_PPC64_SECTOFF_DS;
2259       break;
2260     case BFD_RELOC_PPC64_SECTOFF_LO_DS:         r = R_PPC64_SECTOFF_LO_DS;
2261       break;
2262     case BFD_RELOC_PPC64_TOC16_DS:              r = R_PPC64_TOC16_DS;
2263       break;
2264     case BFD_RELOC_PPC64_TOC16_LO_DS:           r = R_PPC64_TOC16_LO_DS;
2265       break;
2266     case BFD_RELOC_PPC64_PLTGOT16_DS:           r = R_PPC64_PLTGOT16_DS;
2267       break;
2268     case BFD_RELOC_PPC64_PLTGOT16_LO_DS:        r = R_PPC64_PLTGOT16_LO_DS;
2269       break;
2270     case BFD_RELOC_PPC_TLS:                     r = R_PPC64_TLS;
2271       break;
2272     case BFD_RELOC_PPC_TLSGD:                   r = R_PPC64_TLSGD;
2273       break;
2274     case BFD_RELOC_PPC_TLSLD:                   r = R_PPC64_TLSLD;
2275       break;
2276     case BFD_RELOC_PPC_DTPMOD:                  r = R_PPC64_DTPMOD64;
2277       break;
2278     case BFD_RELOC_PPC_TPREL16:                 r = R_PPC64_TPREL16;
2279       break;
2280     case BFD_RELOC_PPC_TPREL16_LO:              r = R_PPC64_TPREL16_LO;
2281       break;
2282     case BFD_RELOC_PPC_TPREL16_HI:              r = R_PPC64_TPREL16_HI;
2283       break;
2284     case BFD_RELOC_PPC64_TPREL16_HIGH:          r = R_PPC64_TPREL16_HIGH;
2285       break;
2286     case BFD_RELOC_PPC_TPREL16_HA:              r = R_PPC64_TPREL16_HA;
2287       break;
2288     case BFD_RELOC_PPC64_TPREL16_HIGHA:         r = R_PPC64_TPREL16_HIGHA;
2289       break;
2290     case BFD_RELOC_PPC_TPREL:                   r = R_PPC64_TPREL64;
2291       break;
2292     case BFD_RELOC_PPC_DTPREL16:                r = R_PPC64_DTPREL16;
2293       break;
2294     case BFD_RELOC_PPC_DTPREL16_LO:             r = R_PPC64_DTPREL16_LO;
2295       break;
2296     case BFD_RELOC_PPC_DTPREL16_HI:             r = R_PPC64_DTPREL16_HI;
2297       break;
2298     case BFD_RELOC_PPC64_DTPREL16_HIGH:         r = R_PPC64_DTPREL16_HIGH;
2299       break;
2300     case BFD_RELOC_PPC_DTPREL16_HA:             r = R_PPC64_DTPREL16_HA;
2301       break;
2302     case BFD_RELOC_PPC64_DTPREL16_HIGHA:        r = R_PPC64_DTPREL16_HIGHA;
2303       break;
2304     case BFD_RELOC_PPC_DTPREL:                  r = R_PPC64_DTPREL64;
2305       break;
2306     case BFD_RELOC_PPC_GOT_TLSGD16:             r = R_PPC64_GOT_TLSGD16;
2307       break;
2308     case BFD_RELOC_PPC_GOT_TLSGD16_LO:          r = R_PPC64_GOT_TLSGD16_LO;
2309       break;
2310     case BFD_RELOC_PPC_GOT_TLSGD16_HI:          r = R_PPC64_GOT_TLSGD16_HI;
2311       break;
2312     case BFD_RELOC_PPC_GOT_TLSGD16_HA:          r = R_PPC64_GOT_TLSGD16_HA;
2313       break;
2314     case BFD_RELOC_PPC_GOT_TLSLD16:             r = R_PPC64_GOT_TLSLD16;
2315       break;
2316     case BFD_RELOC_PPC_GOT_TLSLD16_LO:          r = R_PPC64_GOT_TLSLD16_LO;
2317       break;
2318     case BFD_RELOC_PPC_GOT_TLSLD16_HI:          r = R_PPC64_GOT_TLSLD16_HI;
2319       break;
2320     case BFD_RELOC_PPC_GOT_TLSLD16_HA:          r = R_PPC64_GOT_TLSLD16_HA;
2321       break;
2322     case BFD_RELOC_PPC_GOT_TPREL16:             r = R_PPC64_GOT_TPREL16_DS;
2323       break;
2324     case BFD_RELOC_PPC_GOT_TPREL16_LO:          r = R_PPC64_GOT_TPREL16_LO_DS;
2325       break;
2326     case BFD_RELOC_PPC_GOT_TPREL16_HI:          r = R_PPC64_GOT_TPREL16_HI;
2327       break;
2328     case BFD_RELOC_PPC_GOT_TPREL16_HA:          r = R_PPC64_GOT_TPREL16_HA;
2329       break;
2330     case BFD_RELOC_PPC_GOT_DTPREL16:            r = R_PPC64_GOT_DTPREL16_DS;
2331       break;
2332     case BFD_RELOC_PPC_GOT_DTPREL16_LO:         r = R_PPC64_GOT_DTPREL16_LO_DS;
2333       break;
2334     case BFD_RELOC_PPC_GOT_DTPREL16_HI:         r = R_PPC64_GOT_DTPREL16_HI;
2335       break;
2336     case BFD_RELOC_PPC_GOT_DTPREL16_HA:         r = R_PPC64_GOT_DTPREL16_HA;
2337       break;
2338     case BFD_RELOC_PPC64_TPREL16_DS:            r = R_PPC64_TPREL16_DS;
2339       break;
2340     case BFD_RELOC_PPC64_TPREL16_LO_DS:         r = R_PPC64_TPREL16_LO_DS;
2341       break;
2342     case BFD_RELOC_PPC64_TPREL16_HIGHER:        r = R_PPC64_TPREL16_HIGHER;
2343       break;
2344     case BFD_RELOC_PPC64_TPREL16_HIGHERA:       r = R_PPC64_TPREL16_HIGHERA;
2345       break;
2346     case BFD_RELOC_PPC64_TPREL16_HIGHEST:       r = R_PPC64_TPREL16_HIGHEST;
2347       break;
2348     case BFD_RELOC_PPC64_TPREL16_HIGHESTA:      r = R_PPC64_TPREL16_HIGHESTA;
2349       break;
2350     case BFD_RELOC_PPC64_DTPREL16_DS:           r = R_PPC64_DTPREL16_DS;
2351       break;
2352     case BFD_RELOC_PPC64_DTPREL16_LO_DS:        r = R_PPC64_DTPREL16_LO_DS;
2353       break;
2354     case BFD_RELOC_PPC64_DTPREL16_HIGHER:       r = R_PPC64_DTPREL16_HIGHER;
2355       break;
2356     case BFD_RELOC_PPC64_DTPREL16_HIGHERA:      r = R_PPC64_DTPREL16_HIGHERA;
2357       break;
2358     case BFD_RELOC_PPC64_DTPREL16_HIGHEST:      r = R_PPC64_DTPREL16_HIGHEST;
2359       break;
2360     case BFD_RELOC_PPC64_DTPREL16_HIGHESTA:     r = R_PPC64_DTPREL16_HIGHESTA;
2361       break;
2362     case BFD_RELOC_16_PCREL:                    r = R_PPC64_REL16;
2363       break;
2364     case BFD_RELOC_LO16_PCREL:                  r = R_PPC64_REL16_LO;
2365       break;
2366     case BFD_RELOC_HI16_PCREL:                  r = R_PPC64_REL16_HI;
2367       break;
2368     case BFD_RELOC_HI16_S_PCREL:                r = R_PPC64_REL16_HA;
2369       break;
2370     case BFD_RELOC_VTABLE_INHERIT:              r = R_PPC64_GNU_VTINHERIT;
2371       break;
2372     case BFD_RELOC_VTABLE_ENTRY:                r = R_PPC64_GNU_VTENTRY;
2373       break;
2374     }
2375
2376   return ppc64_elf_howto_table[r];
2377 };
2378
2379 static reloc_howto_type *
2380 ppc64_elf_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
2381                              const char *r_name)
2382 {
2383   unsigned int i;
2384
2385   for (i = 0;
2386        i < sizeof (ppc64_elf_howto_raw) / sizeof (ppc64_elf_howto_raw[0]);
2387        i++)
2388     if (ppc64_elf_howto_raw[i].name != NULL
2389         && strcasecmp (ppc64_elf_howto_raw[i].name, r_name) == 0)
2390       return &ppc64_elf_howto_raw[i];
2391
2392   return NULL;
2393 }
2394
2395 /* Set the howto pointer for a PowerPC ELF reloc.  */
2396
2397 static void
2398 ppc64_elf_info_to_howto (bfd *abfd ATTRIBUTE_UNUSED, arelent *cache_ptr,
2399                          Elf_Internal_Rela *dst)
2400 {
2401   unsigned int type;
2402
2403   /* Initialize howto table if needed.  */
2404   if (!ppc64_elf_howto_table[R_PPC64_ADDR32])
2405     ppc_howto_init ();
2406
2407   type = ELF64_R_TYPE (dst->r_info);
2408   if (type >= (sizeof (ppc64_elf_howto_table)
2409                / sizeof (ppc64_elf_howto_table[0])))
2410     {
2411       (*_bfd_error_handler) (_("%B: invalid relocation type %d"),
2412                              abfd, (int) type);
2413       type = R_PPC64_NONE;
2414     }
2415   cache_ptr->howto = ppc64_elf_howto_table[type];
2416 }
2417
2418 /* Handle the R_PPC64_ADDR16_HA and similar relocs.  */
2419
2420 static bfd_reloc_status_type
2421 ppc64_elf_ha_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
2422                     void *data, asection *input_section,
2423                     bfd *output_bfd, char **error_message)
2424 {
2425   /* If this is a relocatable link (output_bfd test tells us), just
2426      call the generic function.  Any adjustment will be done at final
2427      link time.  */
2428   if (output_bfd != NULL)
2429     return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
2430                                   input_section, output_bfd, error_message);
2431
2432   /* Adjust the addend for sign extension of the low 16 bits.
2433      We won't actually be using the low 16 bits, so trashing them
2434      doesn't matter.  */
2435   reloc_entry->addend += 0x8000;
2436   return bfd_reloc_continue;
2437 }
2438
2439 static bfd_reloc_status_type
2440 ppc64_elf_branch_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
2441                         void *data, asection *input_section,
2442                         bfd *output_bfd, char **error_message)
2443 {
2444   if (output_bfd != NULL)
2445     return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
2446                                   input_section, output_bfd, error_message);
2447
2448   if (strcmp (symbol->section->name, ".opd") == 0
2449       && (symbol->section->owner->flags & DYNAMIC) == 0)
2450     {
2451       bfd_vma dest = opd_entry_value (symbol->section,
2452                                       symbol->value + reloc_entry->addend,
2453                                       NULL, NULL, FALSE);
2454       if (dest != (bfd_vma) -1)
2455         reloc_entry->addend = dest - (symbol->value
2456                                       + symbol->section->output_section->vma
2457                                       + symbol->section->output_offset);
2458     }
2459   return bfd_reloc_continue;
2460 }
2461
2462 static bfd_reloc_status_type
2463 ppc64_elf_brtaken_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
2464                          void *data, asection *input_section,
2465                          bfd *output_bfd, char **error_message)
2466 {
2467   long insn;
2468   enum elf_ppc64_reloc_type r_type;
2469   bfd_size_type octets;
2470   /* Assume 'at' branch hints.  */
2471   bfd_boolean is_isa_v2 = TRUE;
2472
2473   /* If this is a relocatable link (output_bfd test tells us), just
2474      call the generic function.  Any adjustment will be done at final
2475      link time.  */
2476   if (output_bfd != NULL)
2477     return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
2478                                   input_section, output_bfd, error_message);
2479
2480   octets = reloc_entry->address * bfd_octets_per_byte (abfd);
2481   insn = bfd_get_32 (abfd, (bfd_byte *) data + octets);
2482   insn &= ~(0x01 << 21);
2483   r_type = reloc_entry->howto->type;
2484   if (r_type == R_PPC64_ADDR14_BRTAKEN
2485       || r_type == R_PPC64_REL14_BRTAKEN)
2486     insn |= 0x01 << 21; /* 'y' or 't' bit, lowest bit of BO field.  */
2487
2488   if (is_isa_v2)
2489     {
2490       /* Set 'a' bit.  This is 0b00010 in BO field for branch
2491          on CR(BI) insns (BO == 001at or 011at), and 0b01000
2492          for branch on CTR insns (BO == 1a00t or 1a01t).  */
2493       if ((insn & (0x14 << 21)) == (0x04 << 21))
2494         insn |= 0x02 << 21;
2495       else if ((insn & (0x14 << 21)) == (0x10 << 21))
2496         insn |= 0x08 << 21;
2497       else
2498         goto out;
2499     }
2500   else
2501     {
2502       bfd_vma target = 0;
2503       bfd_vma from;
2504
2505       if (!bfd_is_com_section (symbol->section))
2506         target = symbol->value;
2507       target += symbol->section->output_section->vma;
2508       target += symbol->section->output_offset;
2509       target += reloc_entry->addend;
2510
2511       from = (reloc_entry->address
2512               + input_section->output_offset
2513               + input_section->output_section->vma);
2514
2515       /* Invert 'y' bit if not the default.  */
2516       if ((bfd_signed_vma) (target - from) < 0)
2517         insn ^= 0x01 << 21;
2518     }
2519   bfd_put_32 (abfd, insn, (bfd_byte *) data + octets);
2520  out:
2521   return ppc64_elf_branch_reloc (abfd, reloc_entry, symbol, data,
2522                                  input_section, output_bfd, error_message);
2523 }
2524
2525 static bfd_reloc_status_type
2526 ppc64_elf_sectoff_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
2527                          void *data, asection *input_section,
2528                          bfd *output_bfd, char **error_message)
2529 {
2530   /* If this is a relocatable link (output_bfd test tells us), just
2531      call the generic function.  Any adjustment will be done at final
2532      link time.  */
2533   if (output_bfd != NULL)
2534     return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
2535                                   input_section, output_bfd, error_message);
2536
2537   /* Subtract the symbol section base address.  */
2538   reloc_entry->addend -= symbol->section->output_section->vma;
2539   return bfd_reloc_continue;
2540 }
2541
2542 static bfd_reloc_status_type
2543 ppc64_elf_sectoff_ha_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
2544                             void *data, asection *input_section,
2545                             bfd *output_bfd, char **error_message)
2546 {
2547   /* If this is a relocatable link (output_bfd test tells us), just
2548      call the generic function.  Any adjustment will be done at final
2549      link time.  */
2550   if (output_bfd != NULL)
2551     return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
2552                                   input_section, output_bfd, error_message);
2553
2554   /* Subtract the symbol section base address.  */
2555   reloc_entry->addend -= symbol->section->output_section->vma;
2556
2557   /* Adjust the addend for sign extension of the low 16 bits.  */
2558   reloc_entry->addend += 0x8000;
2559   return bfd_reloc_continue;
2560 }
2561
2562 static bfd_reloc_status_type
2563 ppc64_elf_toc_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
2564                      void *data, asection *input_section,
2565                      bfd *output_bfd, char **error_message)
2566 {
2567   bfd_vma TOCstart;
2568
2569   /* If this is a relocatable link (output_bfd test tells us), just
2570      call the generic function.  Any adjustment will be done at final
2571      link time.  */
2572   if (output_bfd != NULL)
2573     return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
2574                                   input_section, output_bfd, error_message);
2575
2576   TOCstart = _bfd_get_gp_value (input_section->output_section->owner);
2577   if (TOCstart == 0)
2578     TOCstart = ppc64_elf_set_toc (NULL, input_section->output_section->owner);
2579
2580   /* Subtract the TOC base address.  */
2581   reloc_entry->addend -= TOCstart + TOC_BASE_OFF;
2582   return bfd_reloc_continue;
2583 }
2584
2585 static bfd_reloc_status_type
2586 ppc64_elf_toc_ha_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
2587                         void *data, asection *input_section,
2588                         bfd *output_bfd, char **error_message)
2589 {
2590   bfd_vma TOCstart;
2591
2592   /* If this is a relocatable link (output_bfd test tells us), just
2593      call the generic function.  Any adjustment will be done at final
2594      link time.  */
2595   if (output_bfd != NULL)
2596     return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
2597                                   input_section, output_bfd, error_message);
2598
2599   TOCstart = _bfd_get_gp_value (input_section->output_section->owner);
2600   if (TOCstart == 0)
2601     TOCstart = ppc64_elf_set_toc (NULL, input_section->output_section->owner);
2602
2603   /* Subtract the TOC base address.  */
2604   reloc_entry->addend -= TOCstart + TOC_BASE_OFF;
2605
2606   /* Adjust the addend for sign extension of the low 16 bits.  */
2607   reloc_entry->addend += 0x8000;
2608   return bfd_reloc_continue;
2609 }
2610
2611 static bfd_reloc_status_type
2612 ppc64_elf_toc64_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
2613                        void *data, asection *input_section,
2614                        bfd *output_bfd, char **error_message)
2615 {
2616   bfd_vma TOCstart;
2617   bfd_size_type octets;
2618
2619   /* If this is a relocatable link (output_bfd test tells us), just
2620      call the generic function.  Any adjustment will be done at final
2621      link time.  */
2622   if (output_bfd != NULL)
2623     return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
2624                                   input_section, output_bfd, error_message);
2625
2626   TOCstart = _bfd_get_gp_value (input_section->output_section->owner);
2627   if (TOCstart == 0)
2628     TOCstart = ppc64_elf_set_toc (NULL, input_section->output_section->owner);
2629
2630   octets = reloc_entry->address * bfd_octets_per_byte (abfd);
2631   bfd_put_64 (abfd, TOCstart + TOC_BASE_OFF, (bfd_byte *) data + octets);
2632   return bfd_reloc_ok;
2633 }
2634
2635 static bfd_reloc_status_type
2636 ppc64_elf_unhandled_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
2637                            void *data, asection *input_section,
2638                            bfd *output_bfd, char **error_message)
2639 {
2640   /* If this is a relocatable link (output_bfd test tells us), just
2641      call the generic function.  Any adjustment will be done at final
2642      link time.  */
2643   if (output_bfd != NULL)
2644     return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
2645                                   input_section, output_bfd, error_message);
2646
2647   if (error_message != NULL)
2648     {
2649       static char buf[60];
2650       sprintf (buf, "generic linker can't handle %s",
2651                reloc_entry->howto->name);
2652       *error_message = buf;
2653     }
2654   return bfd_reloc_dangerous;
2655 }
2656
2657 /* Track GOT entries needed for a given symbol.  We might need more
2658    than one got entry per symbol.  */
2659 struct got_entry
2660 {
2661   struct got_entry *next;
2662
2663   /* The symbol addend that we'll be placing in the GOT.  */
2664   bfd_vma addend;
2665
2666   /* Unlike other ELF targets, we use separate GOT entries for the same
2667      symbol referenced from different input files.  This is to support
2668      automatic multiple TOC/GOT sections, where the TOC base can vary
2669      from one input file to another.  After partitioning into TOC groups
2670      we merge entries within the group.
2671
2672      Point to the BFD owning this GOT entry.  */
2673   bfd *owner;
2674
2675   /* Zero for non-tls entries, or TLS_TLS and one of TLS_GD, TLS_LD,
2676      TLS_TPREL or TLS_DTPREL for tls entries.  */
2677   unsigned char tls_type;
2678
2679   /* Non-zero if got.ent points to real entry.  */
2680   unsigned char is_indirect;
2681
2682   /* Reference count until size_dynamic_sections, GOT offset thereafter.  */
2683   union
2684     {
2685       bfd_signed_vma refcount;
2686       bfd_vma offset;
2687       struct got_entry *ent;
2688     } got;
2689 };
2690
2691 /* The same for PLT.  */
2692 struct plt_entry
2693 {
2694   struct plt_entry *next;
2695
2696   bfd_vma addend;
2697
2698   union
2699     {
2700       bfd_signed_vma refcount;
2701       bfd_vma offset;
2702     } plt;
2703 };
2704
2705 struct ppc64_elf_obj_tdata
2706 {
2707   struct elf_obj_tdata elf;
2708
2709   /* Shortcuts to dynamic linker sections.  */
2710   asection *got;
2711   asection *relgot;
2712
2713   /* Used during garbage collection.  We attach global symbols defined
2714      on removed .opd entries to this section so that the sym is removed.  */
2715   asection *deleted_section;
2716
2717   /* TLS local dynamic got entry handling.  Support for multiple GOT
2718      sections means we potentially need one of these for each input bfd.  */
2719   struct got_entry tlsld_got;
2720
2721   union {
2722     /* A copy of relocs before they are modified for --emit-relocs.  */
2723     Elf_Internal_Rela *relocs;
2724
2725     /* Section contents.  */
2726     bfd_byte *contents;
2727   } opd;
2728
2729   /* Nonzero if this bfd has small toc/got relocs, ie. that expect
2730      the reloc to be in the range -32768 to 32767.  */
2731   unsigned int has_small_toc_reloc : 1;
2732
2733   /* Set if toc/got ha relocs detected not using r2, or lo reloc
2734      instruction not one we handle.  */
2735   unsigned int unexpected_toc_insn : 1;
2736 };
2737
2738 #define ppc64_elf_tdata(bfd) \
2739   ((struct ppc64_elf_obj_tdata *) (bfd)->tdata.any)
2740
2741 #define ppc64_tlsld_got(bfd) \
2742   (&ppc64_elf_tdata (bfd)->tlsld_got)
2743
2744 #define is_ppc64_elf(bfd) \
2745   (bfd_get_flavour (bfd) == bfd_target_elf_flavour \
2746    && elf_object_id (bfd) == PPC64_ELF_DATA)
2747
2748 /* Override the generic function because we store some extras.  */
2749
2750 static bfd_boolean
2751 ppc64_elf_mkobject (bfd *abfd)
2752 {
2753   return bfd_elf_allocate_object (abfd, sizeof (struct ppc64_elf_obj_tdata),
2754                                   PPC64_ELF_DATA);
2755 }
2756
2757 /* Fix bad default arch selected for a 64 bit input bfd when the
2758    default is 32 bit.  */
2759
2760 static bfd_boolean
2761 ppc64_elf_object_p (bfd *abfd)
2762 {
2763   if (abfd->arch_info->the_default && abfd->arch_info->bits_per_word == 32)
2764     {
2765       Elf_Internal_Ehdr *i_ehdr = elf_elfheader (abfd);
2766
2767       if (i_ehdr->e_ident[EI_CLASS] == ELFCLASS64)
2768         {
2769           /* Relies on arch after 32 bit default being 64 bit default.  */
2770           abfd->arch_info = abfd->arch_info->next;
2771           BFD_ASSERT (abfd->arch_info->bits_per_word == 64);
2772         }
2773     }
2774   return TRUE;
2775 }
2776
2777 /* Support for core dump NOTE sections.  */
2778
2779 static bfd_boolean
2780 ppc64_elf_grok_prstatus (bfd *abfd, Elf_Internal_Note *note)
2781 {
2782   size_t offset, size;
2783
2784   if (note->descsz != 504)
2785     return FALSE;
2786
2787   /* pr_cursig */
2788   elf_tdata (abfd)->core->signal = bfd_get_16 (abfd, note->descdata + 12);
2789
2790   /* pr_pid */
2791   elf_tdata (abfd)->core->lwpid = bfd_get_32 (abfd, note->descdata + 32);
2792
2793   /* pr_reg */
2794   offset = 112;
2795   size = 384;
2796
2797   /* Make a ".reg/999" section.  */
2798   return _bfd_elfcore_make_pseudosection (abfd, ".reg",
2799                                           size, note->descpos + offset);
2800 }
2801
2802 static bfd_boolean
2803 ppc64_elf_grok_psinfo (bfd *abfd, Elf_Internal_Note *note)
2804 {
2805   if (note->descsz != 136)
2806     return FALSE;
2807
2808   elf_tdata (abfd)->core->pid
2809     = bfd_get_32 (abfd, note->descdata + 24);
2810   elf_tdata (abfd)->core->program
2811     = _bfd_elfcore_strndup (abfd, note->descdata + 40, 16);
2812   elf_tdata (abfd)->core->command
2813     = _bfd_elfcore_strndup (abfd, note->descdata + 56, 80);
2814
2815   return TRUE;
2816 }
2817
2818 static char *
2819 ppc64_elf_write_core_note (bfd *abfd, char *buf, int *bufsiz, int note_type,
2820                            ...)
2821 {
2822   switch (note_type)
2823     {
2824     default:
2825       return NULL;
2826
2827     case NT_PRPSINFO:
2828       {
2829         char data[136];
2830         va_list ap;
2831
2832         va_start (ap, note_type);
2833         memset (data, 0, sizeof (data));
2834         strncpy (data + 40, va_arg (ap, const char *), 16);
2835         strncpy (data + 56, va_arg (ap, const char *), 80);
2836         va_end (ap);
2837         return elfcore_write_note (abfd, buf, bufsiz,
2838                                    "CORE", note_type, data, sizeof (data));
2839       }
2840
2841     case NT_PRSTATUS:
2842       {
2843         char data[504];
2844         va_list ap;
2845         long pid;
2846         int cursig;
2847         const void *greg;
2848
2849         va_start (ap, note_type);
2850         memset (data, 0, 112);
2851         pid = va_arg (ap, long);
2852         bfd_put_32 (abfd, pid, data + 32);
2853         cursig = va_arg (ap, int);
2854         bfd_put_16 (abfd, cursig, data + 12);
2855         greg = va_arg (ap, const void *);
2856         memcpy (data + 112, greg, 384);
2857         memset (data + 496, 0, 8);
2858         va_end (ap);
2859         return elfcore_write_note (abfd, buf, bufsiz,
2860                                    "CORE", note_type, data, sizeof (data));
2861       }
2862     }
2863 }
2864
2865 /* Add extra PPC sections.  */
2866
2867 static const struct bfd_elf_special_section ppc64_elf_special_sections[]=
2868 {
2869   { STRING_COMMA_LEN (".plt"),    0, SHT_NOBITS,   0 },
2870   { STRING_COMMA_LEN (".sbss"),  -2, SHT_NOBITS,   SHF_ALLOC + SHF_WRITE },
2871   { STRING_COMMA_LEN (".sdata"), -2, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
2872   { STRING_COMMA_LEN (".toc"),    0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
2873   { STRING_COMMA_LEN (".toc1"),   0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
2874   { STRING_COMMA_LEN (".tocbss"), 0, SHT_NOBITS,   SHF_ALLOC + SHF_WRITE },
2875   { NULL,                     0,  0, 0,            0 }
2876 };
2877
2878 enum _ppc64_sec_type {
2879   sec_normal = 0,
2880   sec_opd = 1,
2881   sec_toc = 2
2882 };
2883
2884 struct _ppc64_elf_section_data
2885 {
2886   struct bfd_elf_section_data elf;
2887
2888   union
2889   {
2890     /* An array with one entry for each opd function descriptor.  */
2891     struct _opd_sec_data
2892     {
2893       /* Points to the function code section for local opd entries.  */
2894       asection **func_sec;
2895
2896       /* After editing .opd, adjust references to opd local syms.  */
2897       long *adjust;
2898     } opd;
2899
2900     /* An array for toc sections, indexed by offset/8.  */
2901     struct _toc_sec_data
2902     {
2903       /* Specifies the relocation symbol index used at a given toc offset.  */
2904       unsigned *symndx;
2905
2906       /* And the relocation addend.  */
2907       bfd_vma *add;
2908     } toc;
2909   } u;
2910
2911   enum _ppc64_sec_type sec_type:2;
2912
2913   /* Flag set when small branches are detected.  Used to
2914      select suitable defaults for the stub group size.  */
2915   unsigned int has_14bit_branch:1;
2916 };
2917
2918 #define ppc64_elf_section_data(sec) \
2919   ((struct _ppc64_elf_section_data *) elf_section_data (sec))
2920
2921 static bfd_boolean
2922 ppc64_elf_new_section_hook (bfd *abfd, asection *sec)
2923 {
2924   if (!sec->used_by_bfd)
2925     {
2926       struct _ppc64_elf_section_data *sdata;
2927       bfd_size_type amt = sizeof (*sdata);
2928
2929       sdata = bfd_zalloc (abfd, amt);
2930       if (sdata == NULL)
2931         return FALSE;
2932       sec->used_by_bfd = sdata;
2933     }
2934
2935   return _bfd_elf_new_section_hook (abfd, sec);
2936 }
2937
2938 static struct _opd_sec_data *
2939 get_opd_info (asection * sec)
2940 {
2941   if (sec != NULL
2942       && ppc64_elf_section_data (sec) != NULL
2943       && ppc64_elf_section_data (sec)->sec_type == sec_opd)
2944     return &ppc64_elf_section_data (sec)->u.opd;
2945   return NULL;
2946 }
2947
2948 static inline int
2949 abiversion (bfd *abfd)
2950 {
2951   return elf_elfheader (abfd)->e_flags & EF_PPC64_ABI;
2952 }
2953
2954 static inline void
2955 set_abiversion (bfd *abfd, int ver)
2956 {
2957   elf_elfheader (abfd)->e_flags &= ~EF_PPC64_ABI;
2958   elf_elfheader (abfd)->e_flags |= ver & EF_PPC64_ABI;
2959 }
2960 \f
2961 /* Parameters for the qsort hook.  */
2962 static bfd_boolean synthetic_relocatable;
2963
2964 /* qsort comparison function for ppc64_elf_get_synthetic_symtab.  */
2965
2966 static int
2967 compare_symbols (const void *ap, const void *bp)
2968 {
2969   const asymbol *a = * (const asymbol **) ap;
2970   const asymbol *b = * (const asymbol **) bp;
2971
2972   /* Section symbols first.  */
2973   if ((a->flags & BSF_SECTION_SYM) && !(b->flags & BSF_SECTION_SYM))
2974     return -1;
2975   if (!(a->flags & BSF_SECTION_SYM) && (b->flags & BSF_SECTION_SYM))
2976     return 1;
2977
2978   /* then .opd symbols.  */
2979   if (strcmp (a->section->name, ".opd") == 0
2980       && strcmp (b->section->name, ".opd") != 0)
2981     return -1;
2982   if (strcmp (a->section->name, ".opd") != 0
2983       && strcmp (b->section->name, ".opd") == 0)
2984     return 1;
2985
2986   /* then other code symbols.  */
2987   if ((a->section->flags & (SEC_CODE | SEC_ALLOC | SEC_THREAD_LOCAL))
2988       == (SEC_CODE | SEC_ALLOC)
2989       && (b->section->flags & (SEC_CODE | SEC_ALLOC | SEC_THREAD_LOCAL))
2990          != (SEC_CODE | SEC_ALLOC))
2991     return -1;
2992
2993   if ((a->section->flags & (SEC_CODE | SEC_ALLOC | SEC_THREAD_LOCAL))
2994       != (SEC_CODE | SEC_ALLOC)
2995       && (b->section->flags & (SEC_CODE | SEC_ALLOC | SEC_THREAD_LOCAL))
2996          == (SEC_CODE | SEC_ALLOC))
2997     return 1;
2998
2999   if (synthetic_relocatable)
3000     {
3001       if (a->section->id < b->section->id)
3002         return -1;
3003
3004       if (a->section->id > b->section->id)
3005         return 1;
3006     }
3007
3008   if (a->value + a->section->vma < b->value + b->section->vma)
3009     return -1;
3010
3011   if (a->value + a->section->vma > b->value + b->section->vma)
3012     return 1;
3013
3014   /* For syms with the same value, prefer strong dynamic global function
3015      syms over other syms.  */
3016   if ((a->flags & BSF_GLOBAL) != 0 && (b->flags & BSF_GLOBAL) == 0)
3017     return -1;
3018
3019   if ((a->flags & BSF_GLOBAL) == 0 && (b->flags & BSF_GLOBAL) != 0)
3020     return 1;
3021
3022   if ((a->flags & BSF_FUNCTION) != 0 && (b->flags & BSF_FUNCTION) == 0)
3023     return -1;
3024
3025   if ((a->flags & BSF_FUNCTION) == 0 && (b->flags & BSF_FUNCTION) != 0)
3026     return 1;
3027
3028   if ((a->flags & BSF_WEAK) == 0 && (b->flags & BSF_WEAK) != 0)
3029     return -1;
3030
3031   if ((a->flags & BSF_WEAK) != 0 && (b->flags & BSF_WEAK) == 0)
3032     return 1;
3033
3034   if ((a->flags & BSF_DYNAMIC) != 0 && (b->flags & BSF_DYNAMIC) == 0)
3035     return -1;
3036
3037   if ((a->flags & BSF_DYNAMIC) == 0 && (b->flags & BSF_DYNAMIC) != 0)
3038     return 1;
3039
3040   return 0;
3041 }
3042
3043 /* Search SYMS for a symbol of the given VALUE.  */
3044
3045 static asymbol *
3046 sym_exists_at (asymbol **syms, long lo, long hi, int id, bfd_vma value)
3047 {
3048   long mid;
3049
3050   if (id == -1)
3051     {
3052       while (lo < hi)
3053         {
3054           mid = (lo + hi) >> 1;
3055           if (syms[mid]->value + syms[mid]->section->vma < value)
3056             lo = mid + 1;
3057           else if (syms[mid]->value + syms[mid]->section->vma > value)
3058             hi = mid;
3059           else
3060             return syms[mid];
3061         }
3062     }
3063   else
3064     {
3065       while (lo < hi)
3066         {
3067           mid = (lo + hi) >> 1;
3068           if (syms[mid]->section->id < id)
3069             lo = mid + 1;
3070           else if (syms[mid]->section->id > id)
3071             hi = mid;
3072           else if (syms[mid]->value < value)
3073             lo = mid + 1;
3074           else if (syms[mid]->value > value)
3075             hi = mid;
3076           else
3077             return syms[mid];
3078         }
3079     }
3080   return NULL;
3081 }
3082
3083 static bfd_boolean
3084 section_covers_vma (bfd *abfd ATTRIBUTE_UNUSED, asection *section, void *ptr)
3085 {
3086   bfd_vma vma = *(bfd_vma *) ptr;
3087   return ((section->flags & SEC_ALLOC) != 0
3088           && section->vma <= vma
3089           && vma < section->vma + section->size);
3090 }
3091
3092 /* Create synthetic symbols, effectively restoring "dot-symbol" function
3093    entry syms.  Also generate @plt symbols for the glink branch table.  */
3094
3095 static long
3096 ppc64_elf_get_synthetic_symtab (bfd *abfd,
3097                                 long static_count, asymbol **static_syms,
3098                                 long dyn_count, asymbol **dyn_syms,
3099                                 asymbol **ret)
3100 {
3101   asymbol *s;
3102   long i;
3103   long count;
3104   char *names;
3105   long symcount, codesecsym, codesecsymend, secsymend, opdsymend;
3106   asection *opd = NULL;
3107   bfd_boolean relocatable = (abfd->flags & (EXEC_P | DYNAMIC)) == 0;
3108   asymbol **syms;
3109   int abi = abiversion (abfd);
3110
3111   *ret = NULL;
3112
3113   if (abi < 2)
3114     {
3115       opd = bfd_get_section_by_name (abfd, ".opd");
3116       if (opd == NULL && abi == 1)
3117         return 0;
3118     }
3119
3120   symcount = static_count;
3121   if (!relocatable)
3122     symcount += dyn_count;
3123   if (symcount == 0)
3124     return 0;
3125
3126   syms = bfd_malloc ((symcount + 1) * sizeof (*syms));
3127   if (syms == NULL)
3128     return -1;
3129
3130   if (!relocatable && static_count != 0 && dyn_count != 0)
3131     {
3132       /* Use both symbol tables.  */
3133       memcpy (syms, static_syms, static_count * sizeof (*syms));
3134       memcpy (syms + static_count, dyn_syms, (dyn_count + 1) * sizeof (*syms));
3135     }
3136   else if (!relocatable && static_count == 0)
3137     memcpy (syms, dyn_syms, (symcount + 1) * sizeof (*syms));
3138   else
3139     memcpy (syms, static_syms, (symcount + 1) * sizeof (*syms));
3140
3141   synthetic_relocatable = relocatable;
3142   qsort (syms, symcount, sizeof (*syms), compare_symbols);
3143
3144   if (!relocatable && symcount > 1)
3145     {
3146       long j;
3147       /* Trim duplicate syms, since we may have merged the normal and
3148          dynamic symbols.  Actually, we only care about syms that have
3149          different values, so trim any with the same value.  */
3150       for (i = 1, j = 1; i < symcount; ++i)
3151         if (syms[i - 1]->value + syms[i - 1]->section->vma
3152             != syms[i]->value + syms[i]->section->vma)
3153           syms[j++] = syms[i];
3154       symcount = j;
3155     }
3156
3157   i = 0;
3158   if (strcmp (syms[i]->section->name, ".opd") == 0)
3159     ++i;
3160   codesecsym = i;
3161
3162   for (; i < symcount; ++i)
3163     if (((syms[i]->section->flags & (SEC_CODE | SEC_ALLOC | SEC_THREAD_LOCAL))
3164          != (SEC_CODE | SEC_ALLOC))
3165         || (syms[i]->flags & BSF_SECTION_SYM) == 0)
3166       break;
3167   codesecsymend = i;
3168
3169   for (; i < symcount; ++i)
3170     if ((syms[i]->flags & BSF_SECTION_SYM) == 0)
3171       break;
3172   secsymend = i;
3173
3174   for (; i < symcount; ++i)
3175     if (strcmp (syms[i]->section->name, ".opd") != 0)
3176       break;
3177   opdsymend = i;
3178
3179   for (; i < symcount; ++i)
3180     if ((syms[i]->section->flags & (SEC_CODE | SEC_ALLOC | SEC_THREAD_LOCAL))
3181         != (SEC_CODE | SEC_ALLOC))
3182       break;
3183   symcount = i;
3184
3185   count = 0;
3186
3187   if (relocatable)
3188     {
3189       bfd_boolean (*slurp_relocs) (bfd *, asection *, asymbol **, bfd_boolean);
3190       arelent *r;
3191       size_t size;
3192       long relcount;
3193
3194       if (opdsymend == secsymend)
3195         goto done;
3196
3197       slurp_relocs = get_elf_backend_data (abfd)->s->slurp_reloc_table;
3198       relcount = (opd->flags & SEC_RELOC) ? opd->reloc_count : 0;
3199       if (relcount == 0)
3200         goto done;
3201
3202       if (!(*slurp_relocs) (abfd, opd, static_syms, FALSE))
3203         {
3204           count = -1;
3205           goto done;
3206         }
3207
3208       size = 0;
3209       for (i = secsymend, r = opd->relocation; i < opdsymend; ++i)
3210         {
3211           asymbol *sym;
3212
3213           while (r < opd->relocation + relcount
3214                  && r->address < syms[i]->value + opd->vma)
3215             ++r;
3216
3217           if (r == opd->relocation + relcount)
3218             break;
3219
3220           if (r->address != syms[i]->value + opd->vma)
3221             continue;
3222
3223           if (r->howto->type != R_PPC64_ADDR64)
3224             continue;
3225
3226           sym = *r->sym_ptr_ptr;
3227           if (!sym_exists_at (syms, opdsymend, symcount,
3228                               sym->section->id, sym->value + r->addend))
3229             {
3230               ++count;
3231               size += sizeof (asymbol);
3232               size += strlen (syms[i]->name) + 2;
3233             }
3234         }
3235
3236       s = *ret = bfd_malloc (size);
3237       if (s == NULL)
3238         {
3239           count = -1;
3240           goto done;
3241         }
3242
3243       names = (char *) (s + count);
3244
3245       for (i = secsymend, r = opd->relocation; i < opdsymend; ++i)
3246         {
3247           asymbol *sym;
3248
3249           while (r < opd->relocation + relcount
3250                  && r->address < syms[i]->value + opd->vma)
3251             ++r;
3252
3253           if (r == opd->relocation + relcount)
3254             break;
3255
3256           if (r->address != syms[i]->value + opd->vma)
3257             continue;
3258
3259           if (r->howto->type != R_PPC64_ADDR64)
3260             continue;
3261
3262           sym = *r->sym_ptr_ptr;
3263           if (!sym_exists_at (syms, opdsymend, symcount,
3264                               sym->section->id, sym->value + r->addend))
3265             {
3266               size_t len;
3267
3268               *s = *syms[i];
3269               s->flags |= BSF_SYNTHETIC;
3270               s->section = sym->section;
3271               s->value = sym->value + r->addend;
3272               s->name = names;
3273               *names++ = '.';
3274               len = strlen (syms[i]->name);
3275               memcpy (names, syms[i]->name, len + 1);
3276               names += len + 1;
3277               /* Have udata.p point back to the original symbol this
3278                  synthetic symbol was derived from.  */
3279               s->udata.p = syms[i];
3280               s++;
3281             }
3282         }
3283     }
3284   else
3285     {
3286       bfd_boolean (*slurp_relocs) (bfd *, asection *, asymbol **, bfd_boolean);
3287       bfd_byte *contents = NULL;
3288       size_t size;
3289       long plt_count = 0;
3290       bfd_vma glink_vma = 0, resolv_vma = 0;
3291       asection *dynamic, *glink = NULL, *relplt = NULL;
3292       arelent *p;
3293
3294       if (opd != NULL && !bfd_malloc_and_get_section (abfd, opd, &contents))
3295         {
3296         free_contents_and_exit:
3297           if (contents)
3298             free (contents);
3299           count = -1;
3300           goto done;
3301         }
3302
3303       size = 0;
3304       for (i = secsymend; i < opdsymend; ++i)
3305         {
3306           bfd_vma ent;
3307
3308           /* Ignore bogus symbols.  */
3309           if (syms[i]->value > opd->size - 8)
3310             continue;
3311
3312           ent = bfd_get_64 (abfd, contents + syms[i]->value);
3313           if (!sym_exists_at (syms, opdsymend, symcount, -1, ent))
3314             {
3315               ++count;
3316               size += sizeof (asymbol);
3317               size += strlen (syms[i]->name) + 2;
3318             }
3319         }
3320
3321       /* Get start of .glink stubs from DT_PPC64_GLINK.  */
3322       if (dyn_count != 0
3323           && (dynamic = bfd_get_section_by_name (abfd, ".dynamic")) != NULL)
3324         {
3325           bfd_byte *dynbuf, *extdyn, *extdynend;
3326           size_t extdynsize;
3327           void (*swap_dyn_in) (bfd *, const void *, Elf_Internal_Dyn *);
3328
3329           if (!bfd_malloc_and_get_section (abfd, dynamic, &dynbuf))
3330             goto free_contents_and_exit;
3331
3332           extdynsize = get_elf_backend_data (abfd)->s->sizeof_dyn;
3333           swap_dyn_in = get_elf_backend_data (abfd)->s->swap_dyn_in;
3334
3335           extdyn = dynbuf;
3336           extdynend = extdyn + dynamic->size;
3337           for (; extdyn < extdynend; extdyn += extdynsize)
3338             {
3339               Elf_Internal_Dyn dyn;
3340               (*swap_dyn_in) (abfd, extdyn, &dyn);
3341
3342               if (dyn.d_tag == DT_NULL)
3343                 break;
3344
3345               if (dyn.d_tag == DT_PPC64_GLINK)
3346                 {
3347                   /* The first glink stub starts at offset 32; see comment in
3348                      ppc64_elf_finish_dynamic_sections. */
3349                   glink_vma = dyn.d_un.d_val + 32;
3350                   /* The .glink section usually does not survive the final
3351                      link; search for the section (usually .text) where the
3352                      glink stubs now reside.  */
3353                   glink = bfd_sections_find_if (abfd, section_covers_vma,
3354                                                 &glink_vma);
3355                   break;
3356                 }
3357             }
3358
3359           free (dynbuf);
3360         }
3361
3362       if (glink != NULL)
3363         {
3364           /* Determine __glink trampoline by reading the relative branch
3365              from the first glink stub.  */
3366           bfd_byte buf[4];
3367           if (bfd_get_section_contents (abfd, glink, buf,
3368                                         glink_vma + 4 - glink->vma, 4))
3369             {
3370               unsigned int insn = bfd_get_32 (abfd, buf);
3371               insn ^= B_DOT;
3372               if ((insn & ~0x3fffffc) == 0)
3373                 resolv_vma = glink_vma + 4 + (insn ^ 0x2000000) - 0x2000000;
3374             }
3375
3376           if (resolv_vma)
3377             size += sizeof (asymbol) + sizeof ("__glink_PLTresolve");
3378
3379           relplt = bfd_get_section_by_name (abfd, ".rela.plt");
3380           if (relplt != NULL)
3381             {
3382               slurp_relocs = get_elf_backend_data (abfd)->s->slurp_reloc_table;
3383               if (! (*slurp_relocs) (abfd, relplt, dyn_syms, TRUE))
3384                 goto free_contents_and_exit;
3385
3386               plt_count = relplt->size / sizeof (Elf64_External_Rela);
3387               size += plt_count * sizeof (asymbol);
3388
3389               p = relplt->relocation;
3390               for (i = 0; i < plt_count; i++, p++)
3391                 {
3392                   size += strlen ((*p->sym_ptr_ptr)->name) + sizeof ("@plt");
3393                   if (p->addend != 0)
3394                     size += sizeof ("+0x") - 1 + 16;
3395                 }
3396             }
3397         }
3398
3399       s = *ret = bfd_malloc (size);
3400       if (s == NULL)
3401         goto free_contents_and_exit;
3402
3403       names = (char *) (s + count + plt_count + (resolv_vma != 0));
3404
3405       for (i = secsymend; i < opdsymend; ++i)
3406         {
3407           bfd_vma ent;
3408
3409           if (syms[i]->value > opd->size - 8)
3410             continue;
3411
3412           ent = bfd_get_64 (abfd, contents + syms[i]->value);
3413           if (!sym_exists_at (syms, opdsymend, symcount, -1, ent))
3414             {
3415               long lo, hi;
3416               size_t len;
3417               asection *sec = abfd->sections;
3418
3419               *s = *syms[i];
3420               lo = codesecsym;
3421               hi = codesecsymend;
3422               while (lo < hi)
3423                 {
3424                   long mid = (lo + hi) >> 1;
3425                   if (syms[mid]->section->vma < ent)
3426                     lo = mid + 1;
3427                   else if (syms[mid]->section->vma > ent)
3428                     hi = mid;
3429                   else
3430                     {
3431                       sec = syms[mid]->section;
3432                       break;
3433                     }
3434                 }
3435
3436               if (lo >= hi && lo > codesecsym)
3437                 sec = syms[lo - 1]->section;
3438
3439               for (; sec != NULL; sec = sec->next)
3440                 {
3441                   if (sec->vma > ent)
3442                     break;
3443                   /* SEC_LOAD may not be set if SEC is from a separate debug
3444                      info file.  */
3445                   if ((sec->flags & SEC_ALLOC) == 0)
3446                     break;
3447                   if ((sec->flags & SEC_CODE) != 0)
3448                     s->section = sec;
3449                 }
3450               s->flags |= BSF_SYNTHETIC;
3451               s->value = ent - s->section->vma;
3452               s->name = names;
3453               *names++ = '.';
3454               len = strlen (syms[i]->name);
3455               memcpy (names, syms[i]->name, len + 1);
3456               names += len + 1;
3457               /* Have udata.p point back to the original symbol this
3458                  synthetic symbol was derived from.  */
3459               s->udata.p = syms[i];
3460               s++;
3461             }
3462         }
3463       free (contents);
3464
3465       if (glink != NULL && relplt != NULL)
3466         {
3467           if (resolv_vma)
3468             {
3469               /* Add a symbol for the main glink trampoline.  */
3470               memset (s, 0, sizeof *s);
3471               s->the_bfd = abfd;
3472               s->flags = BSF_GLOBAL | BSF_SYNTHETIC;
3473               s->section = glink;
3474               s->value = resolv_vma - glink->vma;
3475               s->name = names;
3476               memcpy (names, "__glink_PLTresolve", sizeof ("__glink_PLTresolve"));
3477               names += sizeof ("__glink_PLTresolve");
3478               s++;
3479               count++;
3480             }
3481
3482           /* FIXME: It would be very much nicer to put sym@plt on the
3483              stub rather than on the glink branch table entry.  The
3484              objdump disassembler would then use a sensible symbol
3485              name on plt calls.  The difficulty in doing so is
3486              a) finding the stubs, and,
3487              b) matching stubs against plt entries, and,
3488              c) there can be multiple stubs for a given plt entry.
3489
3490              Solving (a) could be done by code scanning, but older
3491              ppc64 binaries used different stubs to current code.
3492              (b) is the tricky one since you need to known the toc
3493              pointer for at least one function that uses a pic stub to
3494              be able to calculate the plt address referenced.
3495              (c) means gdb would need to set multiple breakpoints (or
3496              find the glink branch itself) when setting breakpoints
3497              for pending shared library loads.  */
3498           p = relplt->relocation;
3499           for (i = 0; i < plt_count; i++, p++)
3500             {
3501               size_t len;
3502
3503               *s = **p->sym_ptr_ptr;
3504               /* Undefined syms won't have BSF_LOCAL or BSF_GLOBAL set.  Since
3505                  we are defining a symbol, ensure one of them is set.  */
3506               if ((s->flags & BSF_LOCAL) == 0)
3507                 s->flags |= BSF_GLOBAL;
3508               s->flags |= BSF_SYNTHETIC;
3509               s->section = glink;
3510               s->value = glink_vma - glink->vma;
3511               s->name = names;
3512               s->udata.p = NULL;
3513               len = strlen ((*p->sym_ptr_ptr)->name);
3514               memcpy (names, (*p->sym_ptr_ptr)->name, len);
3515               names += len;
3516               if (p->addend != 0)
3517                 {
3518                   memcpy (names, "+0x", sizeof ("+0x") - 1);
3519                   names += sizeof ("+0x") - 1;
3520                   bfd_sprintf_vma (abfd, names, p->addend);
3521                   names += strlen (names);
3522                 }
3523               memcpy (names, "@plt", sizeof ("@plt"));
3524               names += sizeof ("@plt");
3525               s++;
3526               glink_vma += 8;
3527               if (i >= 0x8000)
3528                 glink_vma += 4;
3529             }
3530           count += plt_count;
3531         }
3532     }
3533
3534  done:
3535   free (syms);
3536   return count;
3537 }
3538 \f
3539 /* The following functions are specific to the ELF linker, while
3540    functions above are used generally.  Those named ppc64_elf_* are
3541    called by the main ELF linker code.  They appear in this file more
3542    or less in the order in which they are called.  eg.
3543    ppc64_elf_check_relocs is called early in the link process,
3544    ppc64_elf_finish_dynamic_sections is one of the last functions
3545    called.
3546
3547    PowerPC64-ELF uses a similar scheme to PowerPC64-XCOFF in that
3548    functions have both a function code symbol and a function descriptor
3549    symbol.  A call to foo in a relocatable object file looks like:
3550
3551    .            .text
3552    .    x:
3553    .            bl      .foo
3554    .            nop
3555
3556    The function definition in another object file might be:
3557
3558    .            .section .opd
3559    .    foo:    .quad   .foo
3560    .            .quad   .TOC.@tocbase
3561    .            .quad   0
3562    .
3563    .            .text
3564    .    .foo:   blr
3565
3566    When the linker resolves the call during a static link, the branch
3567    unsurprisingly just goes to .foo and the .opd information is unused.
3568    If the function definition is in a shared library, things are a little
3569    different:  The call goes via a plt call stub, the opd information gets
3570    copied to the plt, and the linker patches the nop.
3571
3572    .    x:
3573    .            bl      .foo_stub
3574    .            ld      2,40(1)
3575    .
3576    .
3577    .    .foo_stub:
3578    .            std     2,40(1)                 # in practice, the call stub
3579    .            addis   11,2,Lfoo@toc@ha        # is slightly optimized, but
3580    .            addi    11,11,Lfoo@toc@l        # this is the general idea
3581    .            ld      12,0(11)
3582    .            ld      2,8(11)
3583    .            mtctr   12
3584    .            ld      11,16(11)
3585    .            bctr
3586    .
3587    .            .section .plt
3588    .    Lfoo:   reloc (R_PPC64_JMP_SLOT, foo)
3589
3590    The "reloc ()" notation is supposed to indicate that the linker emits
3591    an R_PPC64_JMP_SLOT reloc against foo.  The dynamic linker does the opd
3592    copying.
3593
3594    What are the difficulties here?  Well, firstly, the relocations
3595    examined by the linker in check_relocs are against the function code
3596    sym .foo, while the dynamic relocation in the plt is emitted against
3597    the function descriptor symbol, foo.  Somewhere along the line, we need
3598    to carefully copy dynamic link information from one symbol to the other.
3599    Secondly, the generic part of the elf linker will make .foo a dynamic
3600    symbol as is normal for most other backends.  We need foo dynamic
3601    instead, at least for an application final link.  However, when
3602    creating a shared library containing foo, we need to have both symbols
3603    dynamic so that references to .foo are satisfied during the early
3604    stages of linking.  Otherwise the linker might decide to pull in a
3605    definition from some other object, eg. a static library.
3606
3607    Update: As of August 2004, we support a new convention.  Function
3608    calls may use the function descriptor symbol, ie. "bl foo".  This
3609    behaves exactly as "bl .foo".  */
3610
3611 /* Of those relocs that might be copied as dynamic relocs, this function
3612    selects those that must be copied when linking a shared library,
3613    even when the symbol is local.  */
3614
3615 static int
3616 must_be_dyn_reloc (struct bfd_link_info *info,
3617                    enum elf_ppc64_reloc_type r_type)
3618 {
3619   switch (r_type)
3620     {
3621     default:
3622       return 1;
3623
3624     case R_PPC64_REL32:
3625     case R_PPC64_REL64:
3626     case R_PPC64_REL30:
3627       return 0;
3628
3629     case R_PPC64_TPREL16:
3630     case R_PPC64_TPREL16_LO:
3631     case R_PPC64_TPREL16_HI:
3632     case R_PPC64_TPREL16_HA:
3633     case R_PPC64_TPREL16_DS:
3634     case R_PPC64_TPREL16_LO_DS:
3635     case R_PPC64_TPREL16_HIGH:
3636     case R_PPC64_TPREL16_HIGHA:
3637     case R_PPC64_TPREL16_HIGHER:
3638     case R_PPC64_TPREL16_HIGHERA:
3639     case R_PPC64_TPREL16_HIGHEST:
3640     case R_PPC64_TPREL16_HIGHESTA:
3641     case R_PPC64_TPREL64:
3642       return !info->executable;
3643     }
3644 }
3645
3646 /* If ELIMINATE_COPY_RELOCS is non-zero, the linker will try to avoid
3647    copying dynamic variables from a shared lib into an app's dynbss
3648    section, and instead use a dynamic relocation to point into the
3649    shared lib.  With code that gcc generates, it's vital that this be
3650    enabled;  In the PowerPC64 ABI, the address of a function is actually
3651    the address of a function descriptor, which resides in the .opd
3652    section.  gcc uses the descriptor directly rather than going via the
3653    GOT as some other ABI's do, which means that initialized function
3654    pointers must reference the descriptor.  Thus, a function pointer
3655    initialized to the address of a function in a shared library will
3656    either require a copy reloc, or a dynamic reloc.  Using a copy reloc
3657    redefines the function descriptor symbol to point to the copy.  This
3658    presents a problem as a plt entry for that function is also
3659    initialized from the function descriptor symbol and the copy reloc
3660    may not be initialized first.  */
3661 #define ELIMINATE_COPY_RELOCS 1
3662
3663 /* Section name for stubs is the associated section name plus this
3664    string.  */
3665 #define STUB_SUFFIX ".stub"
3666
3667 /* Linker stubs.
3668    ppc_stub_long_branch:
3669    Used when a 14 bit branch (or even a 24 bit branch) can't reach its
3670    destination, but a 24 bit branch in a stub section will reach.
3671    .    b       dest
3672
3673    ppc_stub_plt_branch:
3674    Similar to the above, but a 24 bit branch in the stub section won't
3675    reach its destination.
3676    .    addis   %r11,%r2,xxx@toc@ha
3677    .    ld      %r12,xxx@toc@l(%r11)
3678    .    mtctr   %r12
3679    .    bctr
3680
3681    ppc_stub_plt_call:
3682    Used to call a function in a shared library.  If it so happens that
3683    the plt entry referenced crosses a 64k boundary, then an extra
3684    "addi %r11,%r11,xxx@toc@l" will be inserted before the "mtctr".
3685    .    std     %r2,40(%r1)
3686    .    addis   %r11,%r2,xxx@toc@ha
3687    .    ld      %r12,xxx+0@toc@l(%r11)
3688    .    mtctr   %r12
3689    .    ld      %r2,xxx+8@toc@l(%r11)
3690    .    ld      %r11,xxx+16@toc@l(%r11)
3691    .    bctr
3692
3693    ppc_stub_long_branch and ppc_stub_plt_branch may also have additional
3694    code to adjust the value and save r2 to support multiple toc sections.
3695    A ppc_stub_long_branch with an r2 offset looks like:
3696    .    std     %r2,40(%r1)
3697    .    addis   %r2,%r2,off@ha
3698    .    addi    %r2,%r2,off@l
3699    .    b       dest
3700
3701    A ppc_stub_plt_branch with an r2 offset looks like:
3702    .    std     %r2,40(%r1)
3703    .    addis   %r11,%r2,xxx@toc@ha
3704    .    ld      %r12,xxx@toc@l(%r11)
3705    .    addis   %r2,%r2,off@ha
3706    .    addi    %r2,%r2,off@l
3707    .    mtctr   %r12
3708    .    bctr
3709
3710    In cases where the "addis" instruction would add zero, the "addis" is
3711    omitted and following instructions modified slightly in some cases.
3712 */
3713
3714 enum ppc_stub_type {
3715   ppc_stub_none,
3716   ppc_stub_long_branch,
3717   ppc_stub_long_branch_r2off,
3718   ppc_stub_plt_branch,
3719   ppc_stub_plt_branch_r2off,
3720   ppc_stub_plt_call,
3721   ppc_stub_plt_call_r2save
3722 };
3723
3724 struct ppc_stub_hash_entry {
3725
3726   /* Base hash table entry structure.  */
3727   struct bfd_hash_entry root;
3728
3729   enum ppc_stub_type stub_type;
3730
3731   /* The stub section.  */
3732   asection *stub_sec;
3733
3734   /* Offset within stub_sec of the beginning of this stub.  */
3735   bfd_vma stub_offset;
3736
3737   /* Given the symbol's value and its section we can determine its final
3738      value when building the stubs (so the stub knows where to jump.  */
3739   bfd_vma target_value;
3740   asection *target_section;
3741
3742   /* The symbol table entry, if any, that this was derived from.  */
3743   struct ppc_link_hash_entry *h;
3744   struct plt_entry *plt_ent;
3745
3746   /* Where this stub is being called from, or, in the case of combined
3747      stub sections, the first input section in the group.  */
3748   asection *id_sec;
3749 };
3750
3751 struct ppc_branch_hash_entry {
3752
3753   /* Base hash table entry structure.  */
3754   struct bfd_hash_entry root;
3755
3756   /* Offset within branch lookup table.  */
3757   unsigned int offset;
3758
3759   /* Generation marker.  */
3760   unsigned int iter;
3761 };
3762
3763 /* Used to track dynamic relocations for local symbols.  */
3764 struct ppc_dyn_relocs
3765 {
3766   struct ppc_dyn_relocs *next;
3767
3768   /* The input section of the reloc.  */
3769   asection *sec;
3770
3771   /* Total number of relocs copied for the input section.  */
3772   unsigned int count : 31;
3773
3774   /* Whether this entry is for STT_GNU_IFUNC symbols.  */
3775   unsigned int ifunc : 1;
3776 };
3777
3778 struct ppc_link_hash_entry
3779 {
3780   struct elf_link_hash_entry elf;
3781
3782   union {
3783     /* A pointer to the most recently used stub hash entry against this
3784        symbol.  */
3785     struct ppc_stub_hash_entry *stub_cache;
3786
3787     /* A pointer to the next symbol starting with a '.'  */
3788     struct ppc_link_hash_entry *next_dot_sym;
3789   } u;
3790
3791   /* Track dynamic relocs copied for this symbol.  */
3792   struct elf_dyn_relocs *dyn_relocs;
3793
3794   /* Link between function code and descriptor symbols.  */
3795   struct ppc_link_hash_entry *oh;
3796
3797   /* Flag function code and descriptor symbols.  */
3798   unsigned int is_func:1;
3799   unsigned int is_func_descriptor:1;
3800   unsigned int fake:1;
3801
3802   /* Whether global opd/toc sym has been adjusted or not.
3803      After ppc64_elf_edit_opd/ppc64_elf_edit_toc has run, this flag
3804      should be set for all globals defined in any opd/toc section.  */
3805   unsigned int adjust_done:1;
3806
3807   /* Set if we twiddled this symbol to weak at some stage.  */
3808   unsigned int was_undefined:1;
3809
3810   /* Contexts in which symbol is used in the GOT (or TOC).
3811      TLS_GD .. TLS_EXPLICIT bits are or'd into the mask as the
3812      corresponding relocs are encountered during check_relocs.
3813      tls_optimize clears TLS_GD .. TLS_TPREL when optimizing to
3814      indicate the corresponding GOT entry type is not needed.
3815      tls_optimize may also set TLS_TPRELGD when a GD reloc turns into
3816      a TPREL one.  We use a separate flag rather than setting TPREL
3817      just for convenience in distinguishing the two cases.  */
3818 #define TLS_GD           1      /* GD reloc. */
3819 #define TLS_LD           2      /* LD reloc. */
3820 #define TLS_TPREL        4      /* TPREL reloc, => IE. */
3821 #define TLS_DTPREL       8      /* DTPREL reloc, => LD. */
3822 #define TLS_TLS         16      /* Any TLS reloc.  */
3823 #define TLS_EXPLICIT    32      /* Marks TOC section TLS relocs. */
3824 #define TLS_TPRELGD     64      /* TPREL reloc resulting from GD->IE. */
3825 #define PLT_IFUNC      128      /* STT_GNU_IFUNC.  */
3826   unsigned char tls_mask;
3827 };
3828
3829 /* ppc64 ELF linker hash table.  */
3830
3831 struct ppc_link_hash_table
3832 {
3833   struct elf_link_hash_table elf;
3834
3835   /* The stub hash table.  */
3836   struct bfd_hash_table stub_hash_table;
3837
3838   /* Another hash table for plt_branch stubs.  */
3839   struct bfd_hash_table branch_hash_table;
3840
3841   /* Hash table for function prologue tocsave.  */
3842   htab_t tocsave_htab;
3843
3844   /* Linker stub bfd.  */
3845   bfd *stub_bfd;
3846
3847   /* Linker call-backs.  */
3848   asection * (*add_stub_section) (const char *, asection *);
3849   void (*layout_sections_again) (void);
3850
3851   /* Array to keep track of which stub sections have been created, and
3852      information on stub grouping.  */
3853   struct map_stub {
3854     /* This is the section to which stubs in the group will be attached.  */
3855     asection *link_sec;
3856     /* The stub section.  */
3857     asection *stub_sec;
3858     /* Along with elf_gp, specifies the TOC pointer used in this group.  */
3859     bfd_vma toc_off;
3860   } *stub_group;
3861
3862   /* Temp used when calculating TOC pointers.  */
3863   bfd_vma toc_curr;
3864   bfd *toc_bfd;
3865   asection *toc_first_sec;
3866
3867   /* Highest input section id.  */
3868   int top_id;
3869
3870   /* Highest output section index.  */
3871   int top_index;
3872
3873   /* Used when adding symbols.  */
3874   struct ppc_link_hash_entry *dot_syms;
3875
3876   /* List of input sections for each output section.  */
3877   asection **input_list;
3878
3879   /* Short-cuts to get to dynamic linker sections.  */
3880   asection *got;
3881   asection *plt;
3882   asection *relplt;
3883   asection *iplt;
3884   asection *reliplt;
3885   asection *dynbss;
3886   asection *relbss;
3887   asection *glink;
3888   asection *sfpr;
3889   asection *brlt;
3890   asection *relbrlt;
3891   asection *glink_eh_frame;
3892
3893   /* Shortcut to .__tls_get_addr and __tls_get_addr.  */
3894   struct ppc_link_hash_entry *tls_get_addr;
3895   struct ppc_link_hash_entry *tls_get_addr_fd;
3896
3897   /* The size of reliplt used by got entry relocs.  */
3898   bfd_size_type got_reli_size;
3899
3900   /* Statistics.  */
3901   unsigned long stub_count[ppc_stub_plt_call_r2save];
3902
3903   /* Number of stubs against global syms.  */
3904   unsigned long stub_globals;
3905
3906   /* Alignment of PLT call stubs.  */
3907   unsigned int plt_stub_align:4;
3908
3909   /* Set if we're linking code with function descriptors.  */
3910   unsigned int opd_abi:1;
3911
3912   /* Set if PLT call stubs should load r11.  */
3913   unsigned int plt_static_chain:1;
3914
3915   /* Set if PLT call stubs need a read-read barrier.  */
3916   unsigned int plt_thread_safe:1;
3917
3918   /* Set if we should emit symbols for stubs.  */
3919   unsigned int emit_stub_syms:1;
3920
3921   /* Set if __tls_get_addr optimization should not be done.  */
3922   unsigned int no_tls_get_addr_opt:1;
3923
3924   /* Support for multiple toc sections.  */
3925   unsigned int do_multi_toc:1;
3926   unsigned int multi_toc_needed:1;
3927   unsigned int second_toc_pass:1;
3928   unsigned int do_toc_opt:1;
3929
3930   /* Set on error.  */
3931   unsigned int stub_error:1;
3932
3933   /* Temp used by ppc64_elf_process_dot_syms.  */
3934   unsigned int twiddled_syms:1;
3935
3936   /* Incremented every time we size stubs.  */
3937   unsigned int stub_iteration;
3938
3939   /* Small local sym cache.  */
3940   struct sym_cache sym_cache;
3941 };
3942
3943 /* Rename some of the generic section flags to better document how they
3944    are used here.  */
3945
3946 /* Nonzero if this section has TLS related relocations.  */
3947 #define has_tls_reloc sec_flg0
3948
3949 /* Nonzero if this section has a call to __tls_get_addr.  */
3950 #define has_tls_get_addr_call sec_flg1
3951
3952 /* Nonzero if this section has any toc or got relocs.  */
3953 #define has_toc_reloc sec_flg2
3954
3955 /* Nonzero if this section has a call to another section that uses
3956    the toc or got.  */
3957 #define makes_toc_func_call sec_flg3
3958
3959 /* Recursion protection when determining above flag.  */
3960 #define call_check_in_progress sec_flg4
3961 #define call_check_done sec_flg5
3962
3963 /* Get the ppc64 ELF linker hash table from a link_info structure.  */
3964
3965 #define ppc_hash_table(p) \
3966   (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \
3967   == PPC64_ELF_DATA ? ((struct ppc_link_hash_table *) ((p)->hash)) : NULL)
3968
3969 #define ppc_stub_hash_lookup(table, string, create, copy) \
3970   ((struct ppc_stub_hash_entry *) \
3971    bfd_hash_lookup ((table), (string), (create), (copy)))
3972
3973 #define ppc_branch_hash_lookup(table, string, create, copy) \
3974   ((struct ppc_branch_hash_entry *) \
3975    bfd_hash_lookup ((table), (string), (create), (copy)))
3976
3977 /* Create an entry in the stub hash table.  */
3978
3979 static struct bfd_hash_entry *
3980 stub_hash_newfunc (struct bfd_hash_entry *entry,
3981                    struct bfd_hash_table *table,
3982                    const char *string)
3983 {
3984   /* Allocate the structure if it has not already been allocated by a
3985      subclass.  */
3986   if (entry == NULL)
3987     {
3988       entry = bfd_hash_allocate (table, sizeof (struct ppc_stub_hash_entry));
3989       if (entry == NULL)
3990         return entry;
3991     }
3992
3993   /* Call the allocation method of the superclass.  */
3994   entry = bfd_hash_newfunc (entry, table, string);
3995   if (entry != NULL)
3996     {
3997       struct ppc_stub_hash_entry *eh;
3998
3999       /* Initialize the local fields.  */
4000       eh = (struct ppc_stub_hash_entry *) entry;
4001       eh->stub_type = ppc_stub_none;
4002       eh->stub_sec = NULL;
4003       eh->stub_offset = 0;
4004       eh->target_value = 0;
4005       eh->target_section = NULL;
4006       eh->h = NULL;
4007       eh->id_sec = NULL;
4008     }
4009
4010   return entry;
4011 }
4012
4013 /* Create an entry in the branch hash table.  */
4014
4015 static struct bfd_hash_entry *
4016 branch_hash_newfunc (struct bfd_hash_entry *entry,
4017                      struct bfd_hash_table *table,
4018                      const char *string)
4019 {
4020   /* Allocate the structure if it has not already been allocated by a
4021      subclass.  */
4022   if (entry == NULL)
4023     {
4024       entry = bfd_hash_allocate (table, sizeof (struct ppc_branch_hash_entry));
4025       if (entry == NULL)
4026         return entry;
4027     }
4028
4029   /* Call the allocation method of the superclass.  */
4030   entry = bfd_hash_newfunc (entry, table, string);
4031   if (entry != NULL)
4032     {
4033       struct ppc_branch_hash_entry *eh;
4034
4035       /* Initialize the local fields.  */
4036       eh = (struct ppc_branch_hash_entry *) entry;
4037       eh->offset = 0;
4038       eh->iter = 0;
4039     }
4040
4041   return entry;
4042 }
4043
4044 /* Create an entry in a ppc64 ELF linker hash table.  */
4045
4046 static struct bfd_hash_entry *
4047 link_hash_newfunc (struct bfd_hash_entry *entry,
4048                    struct bfd_hash_table *table,
4049                    const char *string)
4050 {
4051   /* Allocate the structure if it has not already been allocated by a
4052      subclass.  */
4053   if (entry == NULL)
4054     {
4055       entry = bfd_hash_allocate (table, sizeof (struct ppc_link_hash_entry));
4056       if (entry == NULL)
4057         return entry;
4058     }
4059
4060   /* Call the allocation method of the superclass.  */
4061   entry = _bfd_elf_link_hash_newfunc (entry, table, string);
4062   if (entry != NULL)
4063     {
4064       struct ppc_link_hash_entry *eh = (struct ppc_link_hash_entry *) entry;
4065
4066       memset (&eh->u.stub_cache, 0,
4067               (sizeof (struct ppc_link_hash_entry)
4068                - offsetof (struct ppc_link_hash_entry, u.stub_cache)));
4069
4070       /* When making function calls, old ABI code references function entry
4071          points (dot symbols), while new ABI code references the function
4072          descriptor symbol.  We need to make any combination of reference and
4073          definition work together, without breaking archive linking.
4074
4075          For a defined function "foo" and an undefined call to "bar":
4076          An old object defines "foo" and ".foo", references ".bar" (possibly
4077          "bar" too).
4078          A new object defines "foo" and references "bar".
4079
4080          A new object thus has no problem with its undefined symbols being
4081          satisfied by definitions in an old object.  On the other hand, the
4082          old object won't have ".bar" satisfied by a new object.
4083
4084          Keep a list of newly added dot-symbols.  */
4085
4086       if (string[0] == '.')
4087         {
4088           struct ppc_link_hash_table *htab;
4089
4090           htab = (struct ppc_link_hash_table *) table;
4091           eh->u.next_dot_sym = htab->dot_syms;
4092           htab->dot_syms = eh;
4093         }
4094     }
4095
4096   return entry;
4097 }
4098
4099 struct tocsave_entry {
4100   asection *sec;
4101   bfd_vma offset;
4102 };
4103
4104 static hashval_t
4105 tocsave_htab_hash (const void *p)
4106 {
4107   const struct tocsave_entry *e = (const struct tocsave_entry *) p;
4108   return ((bfd_vma)(intptr_t) e->sec ^ e->offset) >> 3;
4109 }
4110
4111 static int
4112 tocsave_htab_eq (const void *p1, const void *p2)
4113 {
4114   const struct tocsave_entry *e1 = (const struct tocsave_entry *) p1;
4115   const struct tocsave_entry *e2 = (const struct tocsave_entry *) p2;
4116   return e1->sec == e2->sec && e1->offset == e2->offset;
4117 }
4118
4119 /* Create a ppc64 ELF linker hash table.  */
4120
4121 static struct bfd_link_hash_table *
4122 ppc64_elf_link_hash_table_create (bfd *abfd)
4123 {
4124   struct ppc_link_hash_table *htab;
4125   bfd_size_type amt = sizeof (struct ppc_link_hash_table);
4126
4127   htab = bfd_zmalloc (amt);
4128   if (htab == NULL)
4129     return NULL;
4130
4131   if (!_bfd_elf_link_hash_table_init (&htab->elf, abfd, link_hash_newfunc,
4132                                       sizeof (struct ppc_link_hash_entry),
4133                                       PPC64_ELF_DATA))
4134     {
4135       free (htab);
4136       return NULL;
4137     }
4138
4139   /* Init the stub hash table too.  */
4140   if (!bfd_hash_table_init (&htab->stub_hash_table, stub_hash_newfunc,
4141                             sizeof (struct ppc_stub_hash_entry)))
4142     return NULL;
4143
4144   /* And the branch hash table.  */
4145   if (!bfd_hash_table_init (&htab->branch_hash_table, branch_hash_newfunc,
4146                             sizeof (struct ppc_branch_hash_entry)))
4147     return NULL;
4148
4149   htab->tocsave_htab = htab_try_create (1024,
4150                                         tocsave_htab_hash,
4151                                         tocsave_htab_eq,
4152                                         NULL);
4153   if (htab->tocsave_htab == NULL)
4154     return NULL;
4155
4156   /* Initializing two fields of the union is just cosmetic.  We really
4157      only care about glist, but when compiled on a 32-bit host the
4158      bfd_vma fields are larger.  Setting the bfd_vma to zero makes
4159      debugger inspection of these fields look nicer.  */
4160   htab->elf.init_got_refcount.refcount = 0;
4161   htab->elf.init_got_refcount.glist = NULL;
4162   htab->elf.init_plt_refcount.refcount = 0;
4163   htab->elf.init_plt_refcount.glist = NULL;
4164   htab->elf.init_got_offset.offset = 0;
4165   htab->elf.init_got_offset.glist = NULL;
4166   htab->elf.init_plt_offset.offset = 0;
4167   htab->elf.init_plt_offset.glist = NULL;
4168
4169   return &htab->elf.root;
4170 }
4171
4172 /* Free the derived linker hash table.  */
4173
4174 static void
4175 ppc64_elf_link_hash_table_free (struct bfd_link_hash_table *hash)
4176 {
4177   struct ppc_link_hash_table *htab = (struct ppc_link_hash_table *) hash;
4178
4179   bfd_hash_table_free (&htab->stub_hash_table);
4180   bfd_hash_table_free (&htab->branch_hash_table);
4181   if (htab->tocsave_htab)
4182     htab_delete (htab->tocsave_htab);
4183   _bfd_elf_link_hash_table_free (hash);
4184 }
4185
4186 /* Create sections for linker generated code.  */
4187
4188 static bfd_boolean
4189 create_linkage_sections (bfd *dynobj, struct bfd_link_info *info)
4190 {
4191   struct ppc_link_hash_table *htab;
4192   flagword flags;
4193
4194   htab = ppc_hash_table (info);
4195
4196   /* Create .sfpr for code to save and restore fp regs.  */
4197   flags = (SEC_ALLOC | SEC_LOAD | SEC_CODE | SEC_READONLY
4198            | SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED);
4199   htab->sfpr = bfd_make_section_anyway_with_flags (dynobj, ".sfpr",
4200                                                    flags);
4201   if (htab->sfpr == NULL
4202       || ! bfd_set_section_alignment (dynobj, htab->sfpr, 2))
4203     return FALSE;
4204
4205   /* Create .glink for lazy dynamic linking support.  */
4206   htab->glink = bfd_make_section_anyway_with_flags (dynobj, ".glink",
4207                                                     flags);
4208   if (htab->glink == NULL
4209       || ! bfd_set_section_alignment (dynobj, htab->glink, 3))
4210     return FALSE;
4211
4212   if (!info->no_ld_generated_unwind_info)
4213     {
4214       flags = (SEC_ALLOC | SEC_LOAD | SEC_READONLY | SEC_HAS_CONTENTS
4215                | SEC_IN_MEMORY | SEC_LINKER_CREATED);
4216       htab->glink_eh_frame = bfd_make_section_anyway_with_flags (dynobj,
4217                                                                  ".eh_frame",
4218                                                                  flags);
4219       if (htab->glink_eh_frame == NULL
4220           || !bfd_set_section_alignment (dynobj, htab->glink_eh_frame, 2))
4221         return FALSE;
4222     }
4223
4224   flags = SEC_ALLOC | SEC_LINKER_CREATED;
4225   htab->iplt = bfd_make_section_anyway_with_flags (dynobj, ".iplt", flags);
4226   if (htab->iplt == NULL
4227       || ! bfd_set_section_alignment (dynobj, htab->iplt, 3))
4228     return FALSE;
4229
4230   flags = (SEC_ALLOC | SEC_LOAD | SEC_READONLY
4231            | SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED);
4232   htab->reliplt = bfd_make_section_anyway_with_flags (dynobj,
4233                                                       ".rela.iplt",
4234                                                       flags);
4235   if (htab->reliplt == NULL
4236       || ! bfd_set_section_alignment (dynobj, htab->reliplt, 3))
4237     return FALSE;
4238
4239   /* Create branch lookup table for plt_branch stubs.  */
4240   flags = (SEC_ALLOC | SEC_LOAD
4241            | SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED);
4242   htab->brlt = bfd_make_section_anyway_with_flags (dynobj, ".branch_lt",
4243                                                    flags);
4244   if (htab->brlt == NULL
4245       || ! bfd_set_section_alignment (dynobj, htab->brlt, 3))
4246     return FALSE;
4247
4248   if (!info->shared)
4249     return TRUE;
4250
4251   flags = (SEC_ALLOC | SEC_LOAD | SEC_READONLY
4252            | SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED);
4253   htab->relbrlt = bfd_make_section_anyway_with_flags (dynobj,
4254                                                       ".rela.branch_lt",
4255                                                       flags);
4256   if (htab->relbrlt == NULL
4257       || ! bfd_set_section_alignment (dynobj, htab->relbrlt, 3))
4258     return FALSE;
4259
4260   return TRUE;
4261 }
4262
4263 /* Satisfy the ELF linker by filling in some fields in our fake bfd.  */
4264
4265 bfd_boolean
4266 ppc64_elf_init_stub_bfd (bfd *abfd, struct bfd_link_info *info)
4267 {
4268   struct ppc_link_hash_table *htab;
4269
4270   elf_elfheader (abfd)->e_ident[EI_CLASS] = ELFCLASS64;
4271
4272 /* Always hook our dynamic sections into the first bfd, which is the
4273    linker created stub bfd.  This ensures that the GOT header is at
4274    the start of the output TOC section.  */
4275   htab = ppc_hash_table (info);
4276   if (htab == NULL)
4277     return FALSE;
4278   htab->stub_bfd = abfd;
4279   htab->elf.dynobj = abfd;
4280
4281   if (info->relocatable)
4282     return TRUE;
4283
4284   return create_linkage_sections (htab->elf.dynobj, info);
4285 }
4286
4287 /* Build a name for an entry in the stub hash table.  */
4288
4289 static char *
4290 ppc_stub_name (const asection *input_section,
4291                const asection *sym_sec,
4292                const struct ppc_link_hash_entry *h,
4293                const Elf_Internal_Rela *rel)
4294 {
4295   char *stub_name;
4296   ssize_t len;
4297
4298   /* rel->r_addend is actually 64 bit, but who uses more than +/- 2^31
4299      offsets from a sym as a branch target?  In fact, we could
4300      probably assume the addend is always zero.  */
4301   BFD_ASSERT (((int) rel->r_addend & 0xffffffff) == rel->r_addend);
4302
4303   if (h)
4304     {
4305       len = 8 + 1 + strlen (h->elf.root.root.string) + 1 + 8 + 1;
4306       stub_name = bfd_malloc (len);
4307       if (stub_name == NULL)
4308         return stub_name;
4309
4310       len = sprintf (stub_name, "%08x.%s+%x",
4311                      input_section->id & 0xffffffff,
4312                      h->elf.root.root.string,
4313                      (int) rel->r_addend & 0xffffffff);
4314     }
4315   else
4316     {
4317       len = 8 + 1 + 8 + 1 + 8 + 1 + 8 + 1;
4318       stub_name = bfd_malloc (len);
4319       if (stub_name == NULL)
4320         return stub_name;
4321
4322       len = sprintf (stub_name, "%08x.%x:%x+%x",
4323                      input_section->id & 0xffffffff,
4324                      sym_sec->id & 0xffffffff,
4325                      (int) ELF64_R_SYM (rel->r_info) & 0xffffffff,
4326                      (int) rel->r_addend & 0xffffffff);
4327     }
4328   if (len > 2 && stub_name[len - 2] == '+' && stub_name[len - 1] == '0')
4329     stub_name[len - 2] = 0;
4330   return stub_name;
4331 }
4332
4333 /* Look up an entry in the stub hash.  Stub entries are cached because
4334    creating the stub name takes a bit of time.  */
4335
4336 static struct ppc_stub_hash_entry *
4337 ppc_get_stub_entry (const asection *input_section,
4338                     const asection *sym_sec,
4339                     struct ppc_link_hash_entry *h,
4340                     const Elf_Internal_Rela *rel,
4341                     struct ppc_link_hash_table *htab)
4342 {
4343   struct ppc_stub_hash_entry *stub_entry;
4344   const asection *id_sec;
4345
4346   /* If this input section is part of a group of sections sharing one
4347      stub section, then use the id of the first section in the group.
4348      Stub names need to include a section id, as there may well be
4349      more than one stub used to reach say, printf, and we need to
4350      distinguish between them.  */
4351   id_sec = htab->stub_group[input_section->id].link_sec;
4352
4353   if (h != NULL && h->u.stub_cache != NULL
4354       && h->u.stub_cache->h == h
4355       && h->u.stub_cache->id_sec == id_sec)
4356     {
4357       stub_entry = h->u.stub_cache;
4358     }
4359   else
4360     {
4361       char *stub_name;
4362
4363       stub_name = ppc_stub_name (id_sec, sym_sec, h, rel);
4364       if (stub_name == NULL)
4365         return NULL;
4366
4367       stub_entry = ppc_stub_hash_lookup (&htab->stub_hash_table,
4368                                          stub_name, FALSE, FALSE);
4369       if (h != NULL)
4370         h->u.stub_cache = stub_entry;
4371
4372       free (stub_name);
4373     }
4374
4375   return stub_entry;
4376 }
4377
4378 /* Add a new stub entry to the stub hash.  Not all fields of the new
4379    stub entry are initialised.  */
4380
4381 static struct ppc_stub_hash_entry *
4382 ppc_add_stub (const char *stub_name,
4383               asection *section,
4384               struct bfd_link_info *info)
4385 {
4386   struct ppc_link_hash_table *htab = ppc_hash_table (info);
4387   asection *link_sec;
4388   asection *stub_sec;
4389   struct ppc_stub_hash_entry *stub_entry;
4390
4391   link_sec = htab->stub_group[section->id].link_sec;
4392   stub_sec = htab->stub_group[section->id].stub_sec;
4393   if (stub_sec == NULL)
4394     {
4395       stub_sec = htab->stub_group[link_sec->id].stub_sec;
4396       if (stub_sec == NULL)
4397         {
4398           size_t namelen;
4399           bfd_size_type len;
4400           char *s_name;
4401
4402           namelen = strlen (link_sec->name);
4403           len = namelen + sizeof (STUB_SUFFIX);
4404           s_name = bfd_alloc (htab->stub_bfd, len);
4405           if (s_name == NULL)
4406             return NULL;
4407
4408           memcpy (s_name, link_sec->name, namelen);
4409           memcpy (s_name + namelen, STUB_SUFFIX, sizeof (STUB_SUFFIX));
4410           stub_sec = (*htab->add_stub_section) (s_name, link_sec);
4411           if (stub_sec == NULL)
4412             return NULL;
4413           htab->stub_group[link_sec->id].stub_sec = stub_sec;
4414         }
4415       htab->stub_group[section->id].stub_sec = stub_sec;
4416     }
4417
4418   /* Enter this entry into the linker stub hash table.  */
4419   stub_entry = ppc_stub_hash_lookup (&htab->stub_hash_table, stub_name,
4420                                      TRUE, FALSE);
4421   if (stub_entry == NULL)
4422     {
4423       info->callbacks->einfo (_("%P: %B: cannot create stub entry %s\n"),
4424                               section->owner, stub_name);
4425       return NULL;
4426     }
4427
4428   stub_entry->stub_sec = stub_sec;
4429   stub_entry->stub_offset = 0;
4430   stub_entry->id_sec = link_sec;
4431   return stub_entry;
4432 }
4433
4434 /* Create .got and .rela.got sections in ABFD, and .got in dynobj if
4435    not already done.  */
4436
4437 static bfd_boolean
4438 create_got_section (bfd *abfd, struct bfd_link_info *info)
4439 {
4440   asection *got, *relgot;
4441   flagword flags;
4442   struct ppc_link_hash_table *htab = ppc_hash_table (info);
4443
4444   if (!is_ppc64_elf (abfd))
4445     return FALSE;
4446   if (htab == NULL)
4447     return FALSE;
4448
4449   if (!htab->got)
4450     {
4451       if (! _bfd_elf_create_got_section (htab->elf.dynobj, info))
4452         return FALSE;
4453
4454       htab->got = bfd_get_linker_section (htab->elf.dynobj, ".got");
4455       if (!htab->got)
4456         abort ();
4457     }
4458
4459   flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
4460            | SEC_LINKER_CREATED);
4461
4462   got = bfd_make_section_anyway_with_flags (abfd, ".got", flags);
4463   if (!got
4464       || !bfd_set_section_alignment (abfd, got, 3))
4465     return FALSE;
4466
4467   relgot = bfd_make_section_anyway_with_flags (abfd, ".rela.got",
4468                                                flags | SEC_READONLY);
4469   if (!relgot
4470       || ! bfd_set_section_alignment (abfd, relgot, 3))
4471     return FALSE;
4472
4473   ppc64_elf_tdata (abfd)->got = got;
4474   ppc64_elf_tdata (abfd)->relgot = relgot;
4475   return TRUE;
4476 }
4477
4478 /* Create the dynamic sections, and set up shortcuts.  */
4479
4480 static bfd_boolean
4481 ppc64_elf_create_dynamic_sections (bfd *dynobj, struct bfd_link_info *info)
4482 {
4483   struct ppc_link_hash_table *htab;
4484
4485   if (!_bfd_elf_create_dynamic_sections (dynobj, info))
4486     return FALSE;
4487
4488   htab = ppc_hash_table (info);
4489   if (htab == NULL)
4490     return FALSE;
4491
4492   if (!htab->got)
4493     htab->got = bfd_get_linker_section (dynobj, ".got");
4494   htab->plt = bfd_get_linker_section (dynobj, ".plt");
4495   htab->relplt = bfd_get_linker_section (dynobj, ".rela.plt");
4496   htab->dynbss = bfd_get_linker_section (dynobj, ".dynbss");
4497   if (!info->shared)
4498     htab->relbss = bfd_get_linker_section (dynobj, ".rela.bss");
4499
4500   if (!htab->got || !htab->plt || !htab->relplt || !htab->dynbss
4501       || (!info->shared && !htab->relbss))
4502     abort ();
4503
4504   return TRUE;
4505 }
4506
4507 /* Follow indirect and warning symbol links.  */
4508
4509 static inline struct bfd_link_hash_entry *
4510 follow_link (struct bfd_link_hash_entry *h)
4511 {
4512   while (h->type == bfd_link_hash_indirect
4513          || h->type == bfd_link_hash_warning)
4514     h = h->u.i.link;
4515   return h;
4516 }
4517
4518 static inline struct elf_link_hash_entry *
4519 elf_follow_link (struct elf_link_hash_entry *h)
4520 {
4521   return (struct elf_link_hash_entry *) follow_link (&h->root);
4522 }
4523
4524 static inline struct ppc_link_hash_entry *
4525 ppc_follow_link (struct ppc_link_hash_entry *h)
4526 {
4527   return (struct ppc_link_hash_entry *) follow_link (&h->elf.root);
4528 }
4529
4530 /* Merge PLT info on FROM with that on TO.  */
4531
4532 static void
4533 move_plt_plist (struct ppc_link_hash_entry *from,
4534                 struct ppc_link_hash_entry *to)
4535 {
4536   if (from->elf.plt.plist != NULL)
4537     {
4538       if (to->elf.plt.plist != NULL)
4539         {
4540           struct plt_entry **entp;
4541           struct plt_entry *ent;
4542
4543           for (entp = &from->elf.plt.plist; (ent = *entp) != NULL; )
4544             {
4545               struct plt_entry *dent;
4546
4547               for (dent = to->elf.plt.plist; dent != NULL; dent = dent->next)
4548                 if (dent->addend == ent->addend)
4549                   {
4550                     dent->plt.refcount += ent->plt.refcount;
4551                     *entp = ent->next;
4552                     break;
4553                   }
4554               if (dent == NULL)
4555                 entp = &ent->next;
4556             }
4557           *entp = to->elf.plt.plist;
4558         }
4559
4560       to->elf.plt.plist = from->elf.plt.plist;
4561       from->elf.plt.plist = NULL;
4562     }
4563 }
4564
4565 /* Copy the extra info we tack onto an elf_link_hash_entry.  */
4566
4567 static void
4568 ppc64_elf_copy_indirect_symbol (struct bfd_link_info *info,
4569                                 struct elf_link_hash_entry *dir,
4570                                 struct elf_link_hash_entry *ind)
4571 {
4572   struct ppc_link_hash_entry *edir, *eind;
4573
4574   edir = (struct ppc_link_hash_entry *) dir;
4575   eind = (struct ppc_link_hash_entry *) ind;
4576
4577   edir->is_func |= eind->is_func;
4578   edir->is_func_descriptor |= eind->is_func_descriptor;
4579   edir->tls_mask |= eind->tls_mask;
4580   if (eind->oh != NULL)
4581     edir->oh = ppc_follow_link (eind->oh);
4582
4583   /* If called to transfer flags for a weakdef during processing
4584      of elf_adjust_dynamic_symbol, don't copy NON_GOT_REF.
4585      We clear it ourselves for ELIMINATE_COPY_RELOCS.  */
4586   if (!(ELIMINATE_COPY_RELOCS
4587         && eind->elf.root.type != bfd_link_hash_indirect
4588         && edir->elf.dynamic_adjusted))
4589     edir->elf.non_got_ref |= eind->elf.non_got_ref;
4590
4591   edir->elf.ref_dynamic |= eind->elf.ref_dynamic;
4592   edir->elf.ref_regular |= eind->elf.ref_regular;
4593   edir->elf.ref_regular_nonweak |= eind->elf.ref_regular_nonweak;
4594   edir->elf.needs_plt |= eind->elf.needs_plt;
4595
4596   /* Copy over any dynamic relocs we may have on the indirect sym.  */
4597   if (eind->dyn_relocs != NULL)
4598     {
4599       if (edir->dyn_relocs != NULL)
4600         {
4601           struct elf_dyn_relocs **pp;
4602           struct elf_dyn_relocs *p;
4603
4604           /* Add reloc counts against the indirect sym to the direct sym
4605              list.  Merge any entries against the same section.  */
4606           for (pp = &eind->dyn_relocs; (p = *pp) != NULL; )
4607             {
4608               struct elf_dyn_relocs *q;
4609
4610               for (q = edir->dyn_relocs; q != NULL; q = q->next)
4611                 if (q->sec == p->sec)
4612                   {
4613                     q->pc_count += p->pc_count;
4614                     q->count += p->count;
4615                     *pp = p->next;
4616                     break;
4617                   }
4618               if (q == NULL)
4619                 pp = &p->next;
4620             }
4621           *pp = edir->dyn_relocs;
4622         }
4623
4624       edir->dyn_relocs = eind->dyn_relocs;
4625       eind->dyn_relocs = NULL;
4626     }
4627
4628   /* If we were called to copy over info for a weak sym, that's all.
4629      You might think dyn_relocs need not be copied over;  After all,
4630      both syms will be dynamic or both non-dynamic so we're just
4631      moving reloc accounting around.  However, ELIMINATE_COPY_RELOCS
4632      code in ppc64_elf_adjust_dynamic_symbol needs to check for
4633      dyn_relocs in read-only sections, and it does so on what is the
4634      DIR sym here.  */
4635   if (eind->elf.root.type != bfd_link_hash_indirect)
4636     return;
4637
4638   /* Copy over got entries that we may have already seen to the
4639      symbol which just became indirect.  */
4640   if (eind->elf.got.glist != NULL)
4641     {
4642       if (edir->elf.got.glist != NULL)
4643         {
4644           struct got_entry **entp;
4645           struct got_entry *ent;
4646
4647           for (entp = &eind->elf.got.glist; (ent = *entp) != NULL; )
4648             {
4649               struct got_entry *dent;
4650
4651               for (dent = edir->elf.got.glist; dent != NULL; dent = dent->next)
4652                 if (dent->addend == ent->addend
4653                     && dent->owner == ent->owner
4654                     && dent->tls_type == ent->tls_type)
4655                   {
4656                     dent->got.refcount += ent->got.refcount;
4657                     *entp = ent->next;
4658                     break;
4659                   }
4660               if (dent == NULL)
4661                 entp = &ent->next;
4662             }
4663           *entp = edir->elf.got.glist;
4664         }
4665
4666       edir->elf.got.glist = eind->elf.got.glist;
4667       eind->elf.got.glist = NULL;
4668     }
4669
4670   /* And plt entries.  */
4671   move_plt_plist (eind, edir);
4672
4673   if (eind->elf.dynindx != -1)
4674     {
4675       if (edir->elf.dynindx != -1)
4676         _bfd_elf_strtab_delref (elf_hash_table (info)->dynstr,
4677                                 edir->elf.dynstr_index);
4678       edir->elf.dynindx = eind->elf.dynindx;
4679       edir->elf.dynstr_index = eind->elf.dynstr_index;
4680       eind->elf.dynindx = -1;
4681       eind->elf.dynstr_index = 0;
4682     }
4683 }
4684
4685 /* Find the function descriptor hash entry from the given function code
4686    hash entry FH.  Link the entries via their OH fields.  */
4687
4688 static struct ppc_link_hash_entry *
4689 lookup_fdh (struct ppc_link_hash_entry *fh, struct ppc_link_hash_table *htab)
4690 {
4691   struct ppc_link_hash_entry *fdh = fh->oh;
4692
4693   if (fdh == NULL)
4694     {
4695       const char *fd_name = fh->elf.root.root.string + 1;
4696
4697       fdh = (struct ppc_link_hash_entry *)
4698         elf_link_hash_lookup (&htab->elf, fd_name, FALSE, FALSE, FALSE);
4699       if (fdh == NULL)
4700         return fdh;
4701
4702       fdh->is_func_descriptor = 1;
4703       fdh->oh = fh;
4704       fh->is_func = 1;
4705       fh->oh = fdh;
4706     }
4707
4708   return ppc_follow_link (fdh);
4709 }
4710
4711 /* Make a fake function descriptor sym for the code sym FH.  */
4712
4713 static struct ppc_link_hash_entry *
4714 make_fdh (struct bfd_link_info *info,
4715           struct ppc_link_hash_entry *fh)
4716 {
4717   bfd *abfd;
4718   asymbol *newsym;
4719   struct bfd_link_hash_entry *bh;
4720   struct ppc_link_hash_entry *fdh;
4721
4722   abfd = fh->elf.root.u.undef.abfd;
4723   newsym = bfd_make_empty_symbol (abfd);
4724   newsym->name = fh->elf.root.root.string + 1;
4725   newsym->section = bfd_und_section_ptr;
4726   newsym->value = 0;
4727   newsym->flags = BSF_WEAK;
4728
4729   bh = NULL;
4730   if (!_bfd_generic_link_add_one_symbol (info, abfd, newsym->name,
4731                                          newsym->flags, newsym->section,
4732                                          newsym->value, NULL, FALSE, FALSE,
4733                                          &bh))
4734     return NULL;
4735
4736   fdh = (struct ppc_link_hash_entry *) bh;
4737   fdh->elf.non_elf = 0;
4738   fdh->fake = 1;
4739   fdh->is_func_descriptor = 1;
4740   fdh->oh = fh;
4741   fh->is_func = 1;
4742   fh->oh = fdh;
4743   return fdh;
4744 }
4745
4746 /* Fix function descriptor symbols defined in .opd sections to be
4747    function type.  */
4748
4749 static bfd_boolean
4750 ppc64_elf_add_symbol_hook (bfd *ibfd,
4751                            struct bfd_link_info *info,
4752                            Elf_Internal_Sym *isym,
4753                            const char **name ATTRIBUTE_UNUSED,
4754                            flagword *flags ATTRIBUTE_UNUSED,
4755                            asection **sec,
4756                            bfd_vma *value ATTRIBUTE_UNUSED)
4757 {
4758   if ((ibfd->flags & DYNAMIC) == 0
4759       && ELF_ST_BIND (isym->st_info) == STB_GNU_UNIQUE)
4760     elf_tdata (info->output_bfd)->has_gnu_symbols = TRUE;
4761
4762   if (ELF_ST_TYPE (isym->st_info) == STT_GNU_IFUNC)
4763     {
4764       if ((ibfd->flags & DYNAMIC) == 0)
4765         elf_tdata (info->output_bfd)->has_gnu_symbols = TRUE;
4766     }
4767   else if (ELF_ST_TYPE (isym->st_info) == STT_FUNC)
4768     ;
4769   else if (*sec != NULL
4770            && strcmp ((*sec)->name, ".opd") == 0)
4771     isym->st_info = ELF_ST_INFO (ELF_ST_BIND (isym->st_info), STT_FUNC);
4772
4773   return TRUE;
4774 }
4775
4776 /* This function makes an old ABI object reference to ".bar" cause the
4777    inclusion of a new ABI object archive that defines "bar".
4778    NAME is a symbol defined in an archive.  Return a symbol in the hash
4779    table that might be satisfied by the archive symbols.  */
4780
4781 static struct elf_link_hash_entry *
4782 ppc64_elf_archive_symbol_lookup (bfd *abfd,
4783                                  struct bfd_link_info *info,
4784                                  const char *name)
4785 {
4786   struct elf_link_hash_entry *h;
4787   char *dot_name;
4788   size_t len;
4789
4790   h = _bfd_elf_archive_symbol_lookup (abfd, info, name);
4791   if (h != NULL
4792       /* Don't return this sym if it is a fake function descriptor
4793          created by add_symbol_adjust.  */
4794       && !(h->root.type == bfd_link_hash_undefweak
4795            && ((struct ppc_link_hash_entry *) h)->fake))
4796     return h;
4797
4798   if (name[0] == '.')
4799     return h;
4800
4801   len = strlen (name);
4802   dot_name = bfd_alloc (abfd, len + 2);
4803   if (dot_name == NULL)
4804     return (struct elf_link_hash_entry *) 0 - 1;
4805   dot_name[0] = '.';
4806   memcpy (dot_name + 1, name, len + 1);
4807   h = _bfd_elf_archive_symbol_lookup (abfd, info, dot_name);
4808   bfd_release (abfd, dot_name);
4809   return h;
4810 }
4811
4812 /* This function satisfies all old ABI object references to ".bar" if a
4813    new ABI object defines "bar".  Well, at least, undefined dot symbols
4814    are made weak.  This stops later archive searches from including an
4815    object if we already have a function descriptor definition.  It also
4816    prevents the linker complaining about undefined symbols.
4817    We also check and correct mismatched symbol visibility here.  The
4818    most restrictive visibility of the function descriptor and the
4819    function entry symbol is used.  */
4820
4821 static bfd_boolean
4822 add_symbol_adjust (struct ppc_link_hash_entry *eh, struct bfd_link_info *info)
4823 {
4824   struct ppc_link_hash_table *htab;
4825   struct ppc_link_hash_entry *fdh;
4826
4827   if (eh->elf.root.type == bfd_link_hash_indirect)
4828     return TRUE;
4829
4830   if (eh->elf.root.type == bfd_link_hash_warning)
4831     eh = (struct ppc_link_hash_entry *) eh->elf.root.u.i.link;
4832
4833   if (eh->elf.root.root.string[0] != '.')
4834     abort ();
4835
4836   htab = ppc_hash_table (info);
4837   if (htab == NULL)
4838     return FALSE;
4839
4840   fdh = lookup_fdh (eh, htab);
4841   if (fdh == NULL)
4842     {
4843       if (!info->relocatable
4844           && (eh->elf.root.type == bfd_link_hash_undefined
4845               || eh->elf.root.type == bfd_link_hash_undefweak)
4846           && eh->elf.ref_regular)
4847         {
4848           /* Make an undefweak function descriptor sym, which is enough to
4849              pull in an --as-needed shared lib, but won't cause link
4850              errors.  Archives are handled elsewhere.  */
4851           fdh = make_fdh (info, eh);
4852           if (fdh == NULL)
4853             return FALSE;
4854           fdh->elf.ref_regular = 1;
4855         }
4856     }
4857   else
4858     {
4859       unsigned entry_vis = ELF_ST_VISIBILITY (eh->elf.other) - 1;
4860       unsigned descr_vis = ELF_ST_VISIBILITY (fdh->elf.other) - 1;
4861       if (entry_vis < descr_vis)
4862         fdh->elf.other += entry_vis - descr_vis;
4863       else if (entry_vis > descr_vis)
4864         eh->elf.other += descr_vis - entry_vis;
4865
4866       if ((fdh->elf.root.type == bfd_link_hash_defined
4867            || fdh->elf.root.type == bfd_link_hash_defweak)
4868           && eh->elf.root.type == bfd_link_hash_undefined)
4869         {
4870           eh->elf.root.type = bfd_link_hash_undefweak;
4871           eh->was_undefined = 1;
4872           htab->twiddled_syms = 1;
4873         }
4874     }
4875
4876   return TRUE;
4877 }
4878
4879 /* Process list of dot-symbols we made in link_hash_newfunc.  */
4880
4881 static bfd_boolean
4882 ppc64_elf_process_dot_syms (bfd *ibfd, struct bfd_link_info *info)
4883 {
4884   struct ppc_link_hash_table *htab;
4885   struct ppc_link_hash_entry **p, *eh;
4886
4887   if (!is_ppc64_elf (info->output_bfd))
4888     return TRUE;
4889   htab = ppc_hash_table (info);
4890   if (htab == NULL)
4891     return FALSE;
4892
4893   if (is_ppc64_elf (ibfd))
4894     {
4895       p = &htab->dot_syms;
4896       while ((eh = *p) != NULL)
4897         {
4898           *p = NULL;
4899           if (&eh->elf == htab->elf.hgot)
4900             ;
4901           else if (htab->elf.hgot == NULL
4902                    && strcmp (eh->elf.root.root.string, ".TOC.") == 0)
4903             htab->elf.hgot = &eh->elf;
4904           else if (!add_symbol_adjust (eh, info))
4905             return FALSE;
4906           p = &eh->u.next_dot_sym;
4907         }
4908     }
4909
4910   /* Clear the list for non-ppc64 input files.  */
4911   p = &htab->dot_syms;
4912   while ((eh = *p) != NULL)
4913     {
4914       *p = NULL;
4915       p = &eh->u.next_dot_sym;
4916     }
4917
4918   /* We need to fix the undefs list for any syms we have twiddled to
4919      undef_weak.  */
4920   if (htab->twiddled_syms)
4921     {
4922       bfd_link_repair_undef_list (&htab->elf.root);
4923       htab->twiddled_syms = 0;
4924     }
4925   return TRUE;
4926 }
4927
4928 /* Undo hash table changes when an --as-needed input file is determined
4929    not to be needed.  */
4930
4931 static bfd_boolean
4932 ppc64_elf_notice_as_needed (bfd *ibfd,
4933                             struct bfd_link_info *info,
4934                             enum notice_asneeded_action act)
4935 {
4936   if (act == notice_not_needed)
4937     {
4938       struct ppc_link_hash_table *htab = ppc_hash_table (info);
4939
4940       if (htab == NULL)
4941         return FALSE;
4942
4943       htab->dot_syms = NULL;
4944     }
4945   return _bfd_elf_notice_as_needed (ibfd, info, act);
4946 }
4947
4948 /* If --just-symbols against a final linked binary, then assume we need
4949    toc adjusting stubs when calling functions defined there.  */
4950
4951 static void
4952 ppc64_elf_link_just_syms (asection *sec, struct bfd_link_info *info)
4953 {
4954   if ((sec->flags & SEC_CODE) != 0
4955       && (sec->owner->flags & (EXEC_P | DYNAMIC)) != 0
4956       && is_ppc64_elf (sec->owner))
4957     {
4958       asection *got = bfd_get_section_by_name (sec->owner, ".got");
4959       if (got != NULL
4960           && got->size >= elf_backend_got_header_size
4961           && bfd_get_section_by_name (sec->owner, ".opd") != NULL)
4962         sec->has_toc_reloc = 1;
4963     }
4964   _bfd_elf_link_just_syms (sec, info);
4965 }
4966
4967 static struct plt_entry **
4968 update_local_sym_info (bfd *abfd, Elf_Internal_Shdr *symtab_hdr,
4969                        unsigned long r_symndx, bfd_vma r_addend, int tls_type)
4970 {
4971   struct got_entry **local_got_ents = elf_local_got_ents (abfd);
4972   struct plt_entry **local_plt;
4973   unsigned char *local_got_tls_masks;
4974
4975   if (local_got_ents == NULL)
4976     {
4977       bfd_size_type size = symtab_hdr->sh_info;
4978
4979       size *= (sizeof (*local_got_ents)
4980                + sizeof (*local_plt)
4981                + sizeof (*local_got_tls_masks));
4982       local_got_ents = bfd_zalloc (abfd, size);
4983       if (local_got_ents == NULL)
4984         return NULL;
4985       elf_local_got_ents (abfd) = local_got_ents;
4986     }
4987
4988   if ((tls_type & (PLT_IFUNC | TLS_EXPLICIT)) == 0)
4989     {
4990       struct got_entry *ent;
4991
4992       for (ent = local_got_ents[r_symndx]; ent != NULL; ent = ent->next)
4993         if (ent->addend == r_addend
4994             && ent->owner == abfd
4995             && ent->tls_type == tls_type)
4996           break;
4997       if (ent == NULL)
4998         {
4999           bfd_size_type amt = sizeof (*ent);
5000           ent = bfd_alloc (abfd, amt);
5001           if (ent == NULL)
5002             return FALSE;
5003           ent->next = local_got_ents[r_symndx];
5004           ent->addend = r_addend;
5005           ent->owner = abfd;
5006           ent->tls_type = tls_type;
5007           ent->is_indirect = FALSE;
5008           ent->got.refcount = 0;
5009           local_got_ents[r_symndx] = ent;
5010         }
5011       ent->got.refcount += 1;
5012     }
5013
5014   local_plt = (struct plt_entry **) (local_got_ents + symtab_hdr->sh_info);
5015   local_got_tls_masks = (unsigned char *) (local_plt + symtab_hdr->sh_info);
5016   local_got_tls_masks[r_symndx] |= tls_type;
5017
5018   return local_plt + r_symndx;
5019 }
5020
5021 static bfd_boolean
5022 update_plt_info (bfd *abfd, struct plt_entry **plist, bfd_vma addend)
5023 {
5024   struct plt_entry *ent;
5025
5026   for (ent = *plist; ent != NULL; ent = ent->next)
5027     if (ent->addend == addend)
5028       break;
5029   if (ent == NULL)
5030     {
5031       bfd_size_type amt = sizeof (*ent);
5032       ent = bfd_alloc (abfd, amt);
5033       if (ent == NULL)
5034         return FALSE;
5035       ent->next = *plist;
5036       ent->addend = addend;
5037       ent->plt.refcount = 0;
5038       *plist = ent;
5039     }
5040   ent->plt.refcount += 1;
5041   return TRUE;
5042 }
5043
5044 static bfd_boolean
5045 is_branch_reloc (enum elf_ppc64_reloc_type r_type)
5046 {
5047   return (r_type == R_PPC64_REL24
5048           || r_type == R_PPC64_REL14
5049           || r_type == R_PPC64_REL14_BRTAKEN
5050           || r_type == R_PPC64_REL14_BRNTAKEN
5051           || r_type == R_PPC64_ADDR24
5052           || r_type == R_PPC64_ADDR14
5053           || r_type == R_PPC64_ADDR14_BRTAKEN
5054           || r_type == R_PPC64_ADDR14_BRNTAKEN);
5055 }
5056
5057 /* Look through the relocs for a section during the first phase, and
5058    calculate needed space in the global offset table, procedure
5059    linkage table, and dynamic reloc sections.  */
5060
5061 static bfd_boolean
5062 ppc64_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
5063                         asection *sec, const Elf_Internal_Rela *relocs)
5064 {
5065   struct ppc_link_hash_table *htab;
5066   Elf_Internal_Shdr *symtab_hdr;
5067   struct elf_link_hash_entry **sym_hashes;
5068   const Elf_Internal_Rela *rel;
5069   const Elf_Internal_Rela *rel_end;
5070   asection *sreloc;
5071   asection **opd_sym_map;
5072   struct elf_link_hash_entry *tga, *dottga;
5073
5074   if (info->relocatable)
5075     return TRUE;
5076
5077   /* Don't do anything special with non-loaded, non-alloced sections.
5078      In particular, any relocs in such sections should not affect GOT
5079      and PLT reference counting (ie. we don't allow them to create GOT
5080      or PLT entries), there's no possibility or desire to optimize TLS
5081      relocs, and there's not much point in propagating relocs to shared
5082      libs that the dynamic linker won't relocate.  */
5083   if ((sec->flags & SEC_ALLOC) == 0)
5084     return TRUE;
5085
5086   BFD_ASSERT (is_ppc64_elf (abfd));
5087
5088   htab = ppc_hash_table (info);
5089   if (htab == NULL)
5090     return FALSE;
5091
5092   tga = elf_link_hash_lookup (&htab->elf, "__tls_get_addr",
5093                               FALSE, FALSE, TRUE);
5094   dottga = elf_link_hash_lookup (&htab->elf, ".__tls_get_addr",
5095                                  FALSE, FALSE, TRUE);
5096   symtab_hdr = &elf_symtab_hdr (abfd);
5097   sym_hashes = elf_sym_hashes (abfd);
5098   sreloc = NULL;
5099   opd_sym_map = NULL;
5100   if (strcmp (sec->name, ".opd") == 0)
5101     {
5102       /* Garbage collection needs some extra help with .opd sections.
5103          We don't want to necessarily keep everything referenced by
5104          relocs in .opd, as that would keep all functions.  Instead,
5105          if we reference an .opd symbol (a function descriptor), we
5106          want to keep the function code symbol's section.  This is
5107          easy for global symbols, but for local syms we need to keep
5108          information about the associated function section.  */
5109       bfd_size_type amt;
5110
5111       if (abiversion (abfd) == 0)
5112         set_abiversion (abfd, 1);
5113       else if (abiversion (abfd) == 2)
5114         {
5115           info->callbacks->einfo (_("%P: .opd not allowed in ABI version %d\n"),
5116                                   abiversion (abfd));
5117           bfd_set_error (bfd_error_bad_value);
5118           return FALSE;
5119         }
5120       amt = sec->size * sizeof (*opd_sym_map) / 8;
5121       opd_sym_map = bfd_zalloc (abfd, amt);
5122       if (opd_sym_map == NULL)
5123         return FALSE;
5124       ppc64_elf_section_data (sec)->u.opd.func_sec = opd_sym_map;
5125       BFD_ASSERT (ppc64_elf_section_data (sec)->sec_type == sec_normal);
5126       ppc64_elf_section_data (sec)->sec_type = sec_opd;
5127     }
5128
5129   rel_end = relocs + sec->reloc_count;
5130   for (rel = relocs; rel < rel_end; rel++)
5131     {
5132       unsigned long r_symndx;
5133       struct elf_link_hash_entry *h;
5134       enum elf_ppc64_reloc_type r_type;
5135       int tls_type;
5136       struct _ppc64_elf_section_data *ppc64_sec;
5137       struct plt_entry **ifunc;
5138
5139       r_symndx = ELF64_R_SYM (rel->r_info);
5140       if (r_symndx < symtab_hdr->sh_info)
5141         h = NULL;
5142       else
5143         {
5144           h = sym_hashes[r_symndx - symtab_hdr->sh_info];
5145           h = elf_follow_link (h);
5146
5147           /* PR15323, ref flags aren't set for references in the same
5148              object.  */
5149           h->root.non_ir_ref = 1;
5150
5151           if (h == htab->elf.hgot)
5152             sec->has_toc_reloc = 1;
5153         }
5154
5155       tls_type = 0;
5156       ifunc = NULL;
5157       if (h != NULL)
5158         {
5159           if (h->type == STT_GNU_IFUNC)
5160             {
5161               h->needs_plt = 1;
5162               ifunc = &h->plt.plist;
5163             }
5164         }
5165       else
5166         {
5167           Elf_Internal_Sym *isym = bfd_sym_from_r_symndx (&htab->sym_cache,
5168                                                           abfd, r_symndx);
5169           if (isym == NULL)
5170             return FALSE;
5171
5172           if (ELF_ST_TYPE (isym->st_info) == STT_GNU_IFUNC)
5173             {
5174               ifunc = update_local_sym_info (abfd, symtab_hdr, r_symndx,
5175                                              rel->r_addend, PLT_IFUNC);
5176               if (ifunc == NULL)
5177                 return FALSE;
5178             }
5179         }
5180       r_type = ELF64_R_TYPE (rel->r_info);
5181       if (is_branch_reloc (r_type))
5182         {
5183           if (h != NULL && (h == tga || h == dottga))
5184             {
5185               if (rel != relocs
5186                   && (ELF64_R_TYPE (rel[-1].r_info) == R_PPC64_TLSGD
5187                       || ELF64_R_TYPE (rel[-1].r_info) == R_PPC64_TLSLD))
5188                 /* We have a new-style __tls_get_addr call with a marker
5189                    reloc.  */
5190                 ;
5191               else
5192                 /* Mark this section as having an old-style call.  */
5193                 sec->has_tls_get_addr_call = 1;
5194             }
5195
5196           /* STT_GNU_IFUNC symbols must have a PLT entry.  */
5197           if (ifunc != NULL
5198               && !update_plt_info (abfd, ifunc, rel->r_addend))
5199             return FALSE;
5200         }
5201
5202       switch (r_type)
5203         {
5204         case R_PPC64_TLSGD:
5205         case R_PPC64_TLSLD:
5206           /* These special tls relocs tie a call to __tls_get_addr with
5207              its parameter symbol.  */
5208           break;
5209
5210         case R_PPC64_GOT_TLSLD16:
5211         case R_PPC64_GOT_TLSLD16_LO:
5212         case R_PPC64_GOT_TLSLD16_HI:
5213         case R_PPC64_GOT_TLSLD16_HA:
5214           tls_type = TLS_TLS | TLS_LD;
5215           goto dogottls;
5216
5217         case R_PPC64_GOT_TLSGD16:
5218         case R_PPC64_GOT_TLSGD16_LO:
5219         case R_PPC64_GOT_TLSGD16_HI:
5220         case R_PPC64_GOT_TLSGD16_HA:
5221           tls_type = TLS_TLS | TLS_GD;
5222           goto dogottls;
5223
5224         case R_PPC64_GOT_TPREL16_DS:
5225         case R_PPC64_GOT_TPREL16_LO_DS:
5226         case R_PPC64_GOT_TPREL16_HI:
5227         case R_PPC64_GOT_TPREL16_HA:
5228           if (!info->executable)
5229             info->flags |= DF_STATIC_TLS;
5230           tls_type = TLS_TLS | TLS_TPREL;
5231           goto dogottls;
5232
5233         case R_PPC64_GOT_DTPREL16_DS:
5234         case R_PPC64_GOT_DTPREL16_LO_DS:
5235         case R_PPC64_GOT_DTPREL16_HI:
5236         case R_PPC64_GOT_DTPREL16_HA:
5237           tls_type = TLS_TLS | TLS_DTPREL;
5238         dogottls:
5239           sec->has_tls_reloc = 1;
5240           /* Fall thru */
5241
5242         case R_PPC64_GOT16:
5243         case R_PPC64_GOT16_DS:
5244         case R_PPC64_GOT16_HA:
5245         case R_PPC64_GOT16_HI:
5246         case R_PPC64_GOT16_LO:
5247         case R_PPC64_GOT16_LO_DS:
5248           /* This symbol requires a global offset table entry.  */
5249           sec->has_toc_reloc = 1;
5250           if (r_type == R_PPC64_GOT_TLSLD16
5251               || r_type == R_PPC64_GOT_TLSGD16
5252               || r_type == R_PPC64_GOT_TPREL16_DS
5253               || r_type == R_PPC64_GOT_DTPREL16_DS
5254               || r_type == R_PPC64_GOT16
5255               || r_type == R_PPC64_GOT16_DS)
5256             {
5257               htab->do_multi_toc = 1;
5258               ppc64_elf_tdata (abfd)->has_small_toc_reloc = 1;
5259             }
5260
5261           if (ppc64_elf_tdata (abfd)->got == NULL
5262               && !create_got_section (abfd, info))
5263             return FALSE;
5264
5265           if (h != NULL)
5266             {
5267               struct ppc_link_hash_entry *eh;
5268               struct got_entry *ent;
5269
5270               eh = (struct ppc_link_hash_entry *) h;
5271               for (ent = eh->elf.got.glist; ent != NULL; ent = ent->next)
5272                 if (ent->addend == rel->r_addend
5273                     && ent->owner == abfd
5274                     && ent->tls_type == tls_type)
5275                   break;
5276               if (ent == NULL)
5277                 {
5278                   bfd_size_type amt = sizeof (*ent);
5279                   ent = bfd_alloc (abfd, amt);
5280                   if (ent == NULL)
5281                     return FALSE;
5282                   ent->next = eh->elf.got.glist;
5283                   ent->addend = rel->r_addend;
5284                   ent->owner = abfd;
5285                   ent->tls_type = tls_type;
5286                   ent->is_indirect = FALSE;
5287                   ent->got.refcount = 0;
5288                   eh->elf.got.glist = ent;
5289                 }
5290               ent->got.refcount += 1;
5291               eh->tls_mask |= tls_type;
5292             }
5293           else
5294             /* This is a global offset table entry for a local symbol.  */
5295             if (!update_local_sym_info (abfd, symtab_hdr, r_symndx,
5296                                         rel->r_addend, tls_type))
5297               return FALSE;
5298           break;
5299
5300         case R_PPC64_PLT16_HA:
5301         case R_PPC64_PLT16_HI:
5302         case R_PPC64_PLT16_LO:
5303         case R_PPC64_PLT32:
5304         case R_PPC64_PLT64:
5305           /* This symbol requires a procedure linkage table entry.  We
5306              actually build the entry in adjust_dynamic_symbol,
5307              because this might be a case of linking PIC code without
5308              linking in any dynamic objects, in which case we don't
5309              need to generate a procedure linkage table after all.  */
5310           if (h == NULL)
5311             {
5312               /* It does not make sense to have a procedure linkage
5313                  table entry for a local symbol.  */
5314               bfd_set_error (bfd_error_bad_value);
5315               return FALSE;
5316             }
5317           else
5318             {
5319               if (!update_plt_info (abfd, &h->plt.plist, rel->r_addend))
5320                 return FALSE;
5321               h->needs_plt = 1;
5322               if (h->root.root.string[0] == '.'
5323                   && h->root.root.string[1] != '\0')
5324                 ((struct ppc_link_hash_entry *) h)->is_func = 1;
5325             }
5326           break;
5327
5328           /* The following relocations don't need to propagate the
5329              relocation if linking a shared object since they are
5330              section relative.  */
5331         case R_PPC64_SECTOFF:
5332         case R_PPC64_SECTOFF_LO:
5333         case R_PPC64_SECTOFF_HI:
5334         case R_PPC64_SECTOFF_HA:
5335         case R_PPC64_SECTOFF_DS:
5336         case R_PPC64_SECTOFF_LO_DS:
5337         case R_PPC64_DTPREL16:
5338         case R_PPC64_DTPREL16_LO:
5339         case R_PPC64_DTPREL16_HI:
5340         case R_PPC64_DTPREL16_HA:
5341         case R_PPC64_DTPREL16_DS:
5342         case R_PPC64_DTPREL16_LO_DS:
5343         case R_PPC64_DTPREL16_HIGH:
5344         case R_PPC64_DTPREL16_HIGHA:
5345         case R_PPC64_DTPREL16_HIGHER:
5346         case R_PPC64_DTPREL16_HIGHERA:
5347         case R_PPC64_DTPREL16_HIGHEST:
5348         case R_PPC64_DTPREL16_HIGHESTA:
5349           break;
5350
5351           /* Nor do these.  */
5352         case R_PPC64_REL16:
5353         case R_PPC64_REL16_LO:
5354         case R_PPC64_REL16_HI:
5355         case R_PPC64_REL16_HA:
5356           break;
5357
5358         case R_PPC64_TOC16:
5359         case R_PPC64_TOC16_DS:
5360           htab->do_multi_toc = 1;
5361           ppc64_elf_tdata (abfd)->has_small_toc_reloc = 1;
5362         case R_PPC64_TOC16_LO:
5363         case R_PPC64_TOC16_HI:
5364         case R_PPC64_TOC16_HA:
5365         case R_PPC64_TOC16_LO_DS:
5366           sec->has_toc_reloc = 1;
5367           break;
5368
5369           /* This relocation describes the C++ object vtable hierarchy.
5370              Reconstruct it for later use during GC.  */
5371         case R_PPC64_GNU_VTINHERIT:
5372           if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
5373             return FALSE;
5374           break;
5375
5376           /* This relocation describes which C++ vtable entries are actually
5377              used.  Record for later use during GC.  */
5378         case R_PPC64_GNU_VTENTRY:
5379           BFD_ASSERT (h != NULL);
5380           if (h != NULL
5381               && !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
5382             return FALSE;
5383           break;
5384
5385         case R_PPC64_REL14:
5386         case R_PPC64_REL14_BRTAKEN:
5387         case R_PPC64_REL14_BRNTAKEN:
5388           {
5389             asection *dest = NULL;
5390
5391             /* Heuristic: If jumping outside our section, chances are
5392                we are going to need a stub.  */
5393             if (h != NULL)
5394               {
5395                 /* If the sym is weak it may be overridden later, so
5396                    don't assume we know where a weak sym lives.  */
5397                 if (h->root.type == bfd_link_hash_defined)
5398                   dest = h->root.u.def.section;
5399               }
5400             else
5401               {
5402                 Elf_Internal_Sym *isym;
5403
5404                 isym = bfd_sym_from_r_symndx (&htab->sym_cache,
5405                                               abfd, r_symndx);
5406                 if (isym == NULL)
5407                   return FALSE;
5408
5409                 dest = bfd_section_from_elf_index (abfd, isym->st_shndx);
5410               }
5411
5412             if (dest != sec)
5413               ppc64_elf_section_data (sec)->has_14bit_branch = 1;
5414           }
5415           /* Fall through.  */
5416
5417         case R_PPC64_REL24:
5418           if (h != NULL && ifunc == NULL)
5419             {
5420               /* We may need a .plt entry if the function this reloc
5421                  refers to is in a shared lib.  */
5422               if (!update_plt_info (abfd, &h->plt.plist, rel->r_addend))
5423                 return FALSE;
5424               h->needs_plt = 1;
5425               if (h->root.root.string[0] == '.'
5426                   && h->root.root.string[1] != '\0')
5427                 ((struct ppc_link_hash_entry *) h)->is_func = 1;
5428               if (h == tga || h == dottga)
5429                 sec->has_tls_reloc = 1;
5430             }
5431           break;
5432
5433         case R_PPC64_TPREL64:
5434           tls_type = TLS_EXPLICIT | TLS_TLS | TLS_TPREL;
5435           if (!info->executable)
5436             info->flags |= DF_STATIC_TLS;
5437           goto dotlstoc;
5438
5439         case R_PPC64_DTPMOD64:
5440           if (rel + 1 < rel_end
5441               && rel[1].r_info == ELF64_R_INFO (r_symndx, R_PPC64_DTPREL64)
5442               && rel[1].r_offset == rel->r_offset + 8)
5443             tls_type = TLS_EXPLICIT | TLS_TLS | TLS_GD;
5444           else
5445             tls_type = TLS_EXPLICIT | TLS_TLS | TLS_LD;
5446           goto dotlstoc;
5447
5448         case R_PPC64_DTPREL64:
5449           tls_type = TLS_EXPLICIT | TLS_TLS | TLS_DTPREL;
5450           if (rel != relocs
5451               && rel[-1].r_info == ELF64_R_INFO (r_symndx, R_PPC64_DTPMOD64)
5452               && rel[-1].r_offset == rel->r_offset - 8)
5453             /* This is the second reloc of a dtpmod, dtprel pair.
5454                Don't mark with TLS_DTPREL.  */
5455             goto dodyn;
5456
5457         dotlstoc:
5458           sec->has_tls_reloc = 1;
5459           if (h != NULL)
5460             {
5461               struct ppc_link_hash_entry *eh;
5462               eh = (struct ppc_link_hash_entry *) h;
5463               eh->tls_mask |= tls_type;
5464             }
5465           else
5466             if (!update_local_sym_info (abfd, symtab_hdr, r_symndx,
5467                                         rel->r_addend, tls_type))
5468               return FALSE;
5469
5470           ppc64_sec = ppc64_elf_section_data (sec);
5471           if (ppc64_sec->sec_type != sec_toc)
5472             {
5473               bfd_size_type amt;
5474
5475               /* One extra to simplify get_tls_mask.  */
5476               amt = sec->size * sizeof (unsigned) / 8 + sizeof (unsigned);
5477               ppc64_sec->u.toc.symndx = bfd_zalloc (abfd, amt);
5478               if (ppc64_sec->u.toc.symndx == NULL)
5479                 return FALSE;
5480               amt = sec->size * sizeof (bfd_vma) / 8;
5481               ppc64_sec->u.toc.add = bfd_zalloc (abfd, amt);
5482               if (ppc64_sec->u.toc.add == NULL)
5483                 return FALSE;
5484               BFD_ASSERT (ppc64_sec->sec_type == sec_normal);
5485               ppc64_sec->sec_type = sec_toc;
5486             }
5487           BFD_ASSERT (rel->r_offset % 8 == 0);
5488           ppc64_sec->u.toc.symndx[rel->r_offset / 8] = r_symndx;
5489           ppc64_sec->u.toc.add[rel->r_offset / 8] = rel->r_addend;
5490
5491           /* Mark the second slot of a GD or LD entry.
5492              -1 to indicate GD and -2 to indicate LD.  */
5493           if (tls_type == (TLS_EXPLICIT | TLS_TLS | TLS_GD))
5494             ppc64_sec->u.toc.symndx[rel->r_offset / 8 + 1] = -1;
5495           else if (tls_type == (TLS_EXPLICIT | TLS_TLS | TLS_LD))
5496             ppc64_sec->u.toc.symndx[rel->r_offset / 8 + 1] = -2;
5497           goto dodyn;
5498
5499         case R_PPC64_TPREL16:
5500         case R_PPC64_TPREL16_LO:
5501         case R_PPC64_TPREL16_HI:
5502         case R_PPC64_TPREL16_HA:
5503         case R_PPC64_TPREL16_DS:
5504         case R_PPC64_TPREL16_LO_DS:
5505         case R_PPC64_TPREL16_HIGH:
5506         case R_PPC64_TPREL16_HIGHA:
5507         case R_PPC64_TPREL16_HIGHER:
5508         case R_PPC64_TPREL16_HIGHERA:
5509         case R_PPC64_TPREL16_HIGHEST:
5510         case R_PPC64_TPREL16_HIGHESTA:
5511           if (info->shared)
5512             {
5513               if (!info->executable)
5514                 info->flags |= DF_STATIC_TLS;
5515               goto dodyn;
5516             }
5517           break;
5518
5519         case R_PPC64_ADDR64:
5520           if (opd_sym_map != NULL
5521               && rel + 1 < rel_end
5522               && ELF64_R_TYPE ((rel + 1)->r_info) == R_PPC64_TOC)
5523             {
5524               if (h != NULL)
5525                 {
5526                   if (h->root.root.string[0] == '.'
5527                       && h->root.root.string[1] != 0
5528                       && lookup_fdh ((struct ppc_link_hash_entry *) h, htab))
5529                     ;
5530                   else
5531                     ((struct ppc_link_hash_entry *) h)->is_func = 1;
5532                 }
5533               else
5534                 {
5535                   asection *s;
5536                   Elf_Internal_Sym *isym;
5537
5538                   isym = bfd_sym_from_r_symndx (&htab->sym_cache,
5539                                                 abfd, r_symndx);
5540                   if (isym == NULL)
5541                     return FALSE;
5542
5543                   s = bfd_section_from_elf_index (abfd, isym->st_shndx);
5544                   if (s != NULL && s != sec)
5545                     opd_sym_map[rel->r_offset / 8] = s;
5546                 }
5547             }
5548           /* Fall through.  */
5549
5550         case R_PPC64_REL30:
5551         case R_PPC64_REL32:
5552         case R_PPC64_REL64:
5553         case R_PPC64_ADDR14:
5554         case R_PPC64_ADDR14_BRNTAKEN:
5555         case R_PPC64_ADDR14_BRTAKEN:
5556         case R_PPC64_ADDR16:
5557         case R_PPC64_ADDR16_DS:
5558         case R_PPC64_ADDR16_HA:
5559         case R_PPC64_ADDR16_HI:
5560         case R_PPC64_ADDR16_HIGH:
5561         case R_PPC64_ADDR16_HIGHA:
5562         case R_PPC64_ADDR16_HIGHER:
5563         case R_PPC64_ADDR16_HIGHERA:
5564         case R_PPC64_ADDR16_HIGHEST:
5565         case R_PPC64_ADDR16_HIGHESTA:
5566         case R_PPC64_ADDR16_LO:
5567         case R_PPC64_ADDR16_LO_DS:
5568         case R_PPC64_ADDR24:
5569         case R_PPC64_ADDR32:
5570         case R_PPC64_UADDR16:
5571         case R_PPC64_UADDR32:
5572         case R_PPC64_UADDR64:
5573         case R_PPC64_TOC:
5574           if (h != NULL && !info->shared)
5575             /* We may need a copy reloc.  */
5576             h->non_got_ref = 1;
5577
5578           /* Don't propagate .opd relocs.  */
5579           if (NO_OPD_RELOCS && opd_sym_map != NULL)
5580             break;
5581
5582           /* If we are creating a shared library, and this is a reloc
5583              against a global symbol, or a non PC relative reloc
5584              against a local symbol, then we need to copy the reloc
5585              into the shared library.  However, if we are linking with
5586              -Bsymbolic, we do not need to copy a reloc against a
5587              global symbol which is defined in an object we are
5588              including in the link (i.e., DEF_REGULAR is set).  At
5589              this point we have not seen all the input files, so it is
5590              possible that DEF_REGULAR is not set now but will be set
5591              later (it is never cleared).  In case of a weak definition,
5592              DEF_REGULAR may be cleared later by a strong definition in
5593              a shared library.  We account for that possibility below by
5594              storing information in the dyn_relocs field of the hash
5595              table entry.  A similar situation occurs when creating
5596              shared libraries and symbol visibility changes render the
5597              symbol local.
5598
5599              If on the other hand, we are creating an executable, we
5600              may need to keep relocations for symbols satisfied by a
5601              dynamic library if we manage to avoid copy relocs for the
5602              symbol.  */
5603         dodyn:
5604           if ((info->shared
5605                && (must_be_dyn_reloc (info, r_type)
5606                    || (h != NULL
5607                        && (!SYMBOLIC_BIND (info, h)
5608                            || h->root.type == bfd_link_hash_defweak
5609                            || !h->def_regular))))
5610               || (ELIMINATE_COPY_RELOCS
5611                   && !info->shared
5612                   && h != NULL
5613                   && (h->root.type == bfd_link_hash_defweak
5614                       || !h->def_regular))
5615               || (!info->shared
5616                   && ifunc != NULL))
5617             {
5618               /* We must copy these reloc types into the output file.
5619                  Create a reloc section in dynobj and make room for
5620                  this reloc.  */
5621               if (sreloc == NULL)
5622                 {
5623                   sreloc = _bfd_elf_make_dynamic_reloc_section
5624                     (sec, htab->elf.dynobj, 3, abfd, /*rela?*/ TRUE);
5625
5626                   if (sreloc == NULL)
5627                     return FALSE;
5628                 }
5629
5630               /* If this is a global symbol, we count the number of
5631                  relocations we need for this symbol.  */
5632               if (h != NULL)
5633                 {
5634                   struct elf_dyn_relocs *p;
5635                   struct elf_dyn_relocs **head;
5636
5637                   head = &((struct ppc_link_hash_entry *) h)->dyn_relocs;
5638                   p = *head;
5639                   if (p == NULL || p->sec != sec)
5640                     {
5641                       p = bfd_alloc (htab->elf.dynobj, sizeof *p);
5642                       if (p == NULL)
5643                         return FALSE;
5644                       p->next = *head;
5645                       *head = p;
5646                       p->sec = sec;
5647                       p->count = 0;
5648                       p->pc_count = 0;
5649                     }
5650                   p->count += 1;
5651                   if (!must_be_dyn_reloc (info, r_type))
5652                     p->pc_count += 1;
5653                 }
5654               else
5655                 {
5656                   /* Track dynamic relocs needed for local syms too.
5657                      We really need local syms available to do this
5658                      easily.  Oh well.  */
5659                   struct ppc_dyn_relocs *p;
5660                   struct ppc_dyn_relocs **head;
5661                   bfd_boolean is_ifunc;
5662                   asection *s;
5663                   void *vpp;
5664                   Elf_Internal_Sym *isym;
5665
5666                   isym = bfd_sym_from_r_symndx (&htab->sym_cache,
5667                                                 abfd, r_symndx);
5668                   if (isym == NULL)
5669                     return FALSE;
5670
5671                   s = bfd_section_from_elf_index (abfd, isym->st_shndx);
5672                   if (s == NULL)
5673                     s = sec;
5674
5675                   vpp = &elf_section_data (s)->local_dynrel;
5676                   head = (struct ppc_dyn_relocs **) vpp;
5677                   is_ifunc = ELF_ST_TYPE (isym->st_info) == STT_GNU_IFUNC;
5678                   p = *head;
5679                   if (p != NULL && p->sec == sec && p->ifunc != is_ifunc)
5680                     p = p->next;
5681                   if (p == NULL || p->sec != sec || p->ifunc != is_ifunc)
5682                     {
5683                       p = bfd_alloc (htab->elf.dynobj, sizeof *p);
5684                       if (p == NULL)
5685                         return FALSE;
5686                       p->next = *head;
5687                       *head = p;
5688                       p->sec = sec;
5689                       p->ifunc = is_ifunc;
5690                       p->count = 0;
5691                     }
5692                   p->count += 1;
5693                 }
5694             }
5695           break;
5696
5697         default:
5698           break;
5699         }
5700     }
5701
5702   return TRUE;
5703 }
5704
5705 /* Merge backend specific data from an object file to the output
5706    object file when linking.  */
5707
5708 static bfd_boolean
5709 ppc64_elf_merge_private_bfd_data (bfd *ibfd, bfd *obfd)
5710 {
5711   unsigned long iflags, oflags;
5712
5713   if ((ibfd->flags & BFD_LINKER_CREATED) != 0)
5714     return TRUE;
5715
5716   if (!is_ppc64_elf (ibfd) || !is_ppc64_elf (obfd))
5717     return TRUE;
5718
5719   if (!_bfd_generic_verify_endian_match (ibfd, obfd))
5720     return FALSE;
5721
5722   iflags = elf_elfheader (ibfd)->e_flags;
5723   oflags = elf_elfheader (obfd)->e_flags;
5724
5725   if (!elf_flags_init (obfd) || oflags == 0)
5726     {
5727       elf_flags_init (obfd) = TRUE;
5728       elf_elfheader (obfd)->e_flags = iflags;
5729     }
5730   else if (iflags == oflags || iflags == 0)
5731     ;
5732   else if (iflags & ~EF_PPC64_ABI)
5733     {
5734       (*_bfd_error_handler)
5735         (_("%B uses unknown e_flags 0x%lx"), ibfd, iflags);
5736       bfd_set_error (bfd_error_bad_value);
5737       return FALSE;
5738     }
5739   else
5740     {
5741       (*_bfd_error_handler)
5742         (_("%B: ABI version %ld is not compatible with ABI version %ld output"),
5743          ibfd, iflags, oflags);
5744       bfd_set_error (bfd_error_bad_value);
5745       return FALSE;
5746     }
5747
5748   /* Merge Tag_compatibility attributes and any common GNU ones.  */
5749   _bfd_elf_merge_object_attributes (ibfd, obfd);
5750
5751   return TRUE;
5752 }
5753
5754 static bfd_boolean
5755 ppc64_elf_print_private_bfd_data (bfd *abfd, void *ptr)
5756 {
5757   /* Print normal ELF private data.  */
5758   _bfd_elf_print_private_bfd_data (abfd, ptr);
5759
5760   if (elf_elfheader (abfd)->e_flags != 0)
5761     {
5762       FILE *file = ptr;
5763
5764       /* xgettext:c-format */
5765       fprintf (file, _("private flags = 0x%lx:"),
5766                elf_elfheader (abfd)->e_flags);
5767
5768       if ((elf_elfheader (abfd)->e_flags & EF_PPC64_ABI) != 0)
5769         fprintf (file, _(" [abiv%ld]"),
5770                  elf_elfheader (abfd)->e_flags & EF_PPC64_ABI);
5771       fputc ('\n', file);
5772     }
5773
5774   return TRUE;
5775 }
5776
5777 /* OFFSET in OPD_SEC specifies a function descriptor.  Return the address
5778    of the code entry point, and its section.  */
5779
5780 static bfd_vma
5781 opd_entry_value (asection *opd_sec,
5782                  bfd_vma offset,
5783                  asection **code_sec,
5784                  bfd_vma *code_off,
5785                  bfd_boolean in_code_sec)
5786 {
5787   bfd *opd_bfd = opd_sec->owner;
5788   Elf_Internal_Rela *relocs;
5789   Elf_Internal_Rela *lo, *hi, *look;
5790   bfd_vma val;
5791
5792   /* No relocs implies we are linking a --just-symbols object, or looking
5793      at a final linked executable with addr2line or somesuch.  */
5794   if (opd_sec->reloc_count == 0)
5795     {
5796       bfd_byte *contents = ppc64_elf_tdata (opd_bfd)->opd.contents;
5797
5798       if (contents == NULL)
5799         {
5800           if (!bfd_malloc_and_get_section (opd_bfd, opd_sec, &contents))
5801             return (bfd_vma) -1;
5802           ppc64_elf_tdata (opd_bfd)->opd.contents = contents;
5803         }
5804
5805       val = bfd_get_64 (opd_bfd, contents + offset);
5806       if (code_sec != NULL)
5807         {
5808           asection *sec, *likely = NULL;
5809
5810           if (in_code_sec)
5811             {
5812               sec = *code_sec;
5813               if (sec->vma <= val
5814                   && val < sec->vma + sec->size)
5815                 likely = sec;
5816               else
5817                 val = -1;
5818             }
5819           else
5820             for (sec = opd_bfd->sections; sec != NULL; sec = sec->next)
5821               if (sec->vma <= val
5822                   && (sec->flags & SEC_LOAD) != 0
5823                   && (sec->flags & SEC_ALLOC) != 0)
5824                 likely = sec;
5825           if (likely != NULL)
5826             {
5827               *code_sec = likely;
5828               if (code_off != NULL)
5829                 *code_off = val - likely->vma;
5830             }
5831         }
5832       return val;
5833     }
5834
5835   BFD_ASSERT (is_ppc64_elf (opd_bfd));
5836
5837   relocs = ppc64_elf_tdata (opd_bfd)->opd.relocs;
5838   if (relocs == NULL)
5839     relocs = _bfd_elf_link_read_relocs (opd_bfd, opd_sec, NULL, NULL, TRUE);
5840
5841   /* Go find the opd reloc at the sym address.  */
5842   lo = relocs;
5843   BFD_ASSERT (lo != NULL);
5844   hi = lo + opd_sec->reloc_count - 1; /* ignore last reloc */
5845   val = (bfd_vma) -1;
5846   while (lo < hi)
5847     {
5848       look = lo + (hi - lo) / 2;
5849       if (look->r_offset < offset)
5850         lo = look + 1;
5851       else if (look->r_offset > offset)
5852         hi = look;
5853       else
5854         {
5855           Elf_Internal_Shdr *symtab_hdr = &elf_symtab_hdr (opd_bfd);
5856
5857           if (ELF64_R_TYPE (look->r_info) == R_PPC64_ADDR64
5858               && ELF64_R_TYPE ((look + 1)->r_info) == R_PPC64_TOC)
5859             {
5860               unsigned long symndx = ELF64_R_SYM (look->r_info);
5861               asection *sec;
5862
5863               if (symndx < symtab_hdr->sh_info
5864                   || elf_sym_hashes (opd_bfd) == NULL)
5865                 {
5866                   Elf_Internal_Sym *sym;
5867
5868                   sym = (Elf_Internal_Sym *) symtab_hdr->contents;
5869                   if (sym == NULL)
5870                     {
5871                       size_t symcnt = symtab_hdr->sh_info;
5872                       if (elf_sym_hashes (opd_bfd) == NULL)
5873                         symcnt = symtab_hdr->sh_size / symtab_hdr->sh_entsize;
5874                       sym = bfd_elf_get_elf_syms (opd_bfd, symtab_hdr, symcnt,
5875                                                   0, NULL, NULL, NULL);
5876                       if (sym == NULL)
5877                         break;
5878                       symtab_hdr->contents = (bfd_byte *) sym;
5879                     }
5880
5881                   sym += symndx;
5882                   val = sym->st_value;
5883                   sec = bfd_section_from_elf_index (opd_bfd, sym->st_shndx);
5884                   BFD_ASSERT ((sec->flags & SEC_MERGE) == 0);
5885                 }
5886               else
5887                 {
5888                   struct elf_link_hash_entry **sym_hashes;
5889                   struct elf_link_hash_entry *rh;
5890
5891                   sym_hashes = elf_sym_hashes (opd_bfd);
5892                   rh = sym_hashes[symndx - symtab_hdr->sh_info];
5893                   if (rh != NULL)
5894                     {
5895                       rh = elf_follow_link (rh);
5896                       BFD_ASSERT (rh->root.type == bfd_link_hash_defined
5897                                   || rh->root.type == bfd_link_hash_defweak);
5898                       val = rh->root.u.def.value;
5899                       sec = rh->root.u.def.section;
5900                     }
5901                   else
5902                     {
5903                       /* Handle the odd case where we can be called
5904                          during bfd_elf_link_add_symbols before the
5905                          symbol hashes have been fully populated.  */
5906                       Elf_Internal_Sym *sym;
5907
5908                       sym = bfd_elf_get_elf_syms (opd_bfd, symtab_hdr, 1,
5909                                                   symndx, NULL, NULL, NULL);
5910                       if (sym == NULL)
5911                         break;
5912
5913                       val = sym->st_value;
5914                       sec = bfd_section_from_elf_index (opd_bfd, sym->st_shndx);
5915                       free (sym);
5916                     }
5917                 }
5918               val += look->r_addend;
5919               if (code_off != NULL)
5920                 *code_off = val;
5921               if (code_sec != NULL)
5922                 {
5923                   if (in_code_sec && *code_sec != sec)
5924                     return -1;
5925                   else
5926                     *code_sec = sec;
5927                 }
5928               if (sec != NULL && sec->output_section != NULL)
5929                 val += sec->output_section->vma + sec->output_offset;
5930             }
5931           break;
5932         }
5933     }
5934
5935   return val;
5936 }
5937
5938 /* If the ELF symbol SYM might be a function in SEC, return the
5939    function size and set *CODE_OFF to the function's entry point,
5940    otherwise return zero.  */
5941
5942 static bfd_size_type
5943 ppc64_elf_maybe_function_sym (const asymbol *sym, asection *sec,
5944                               bfd_vma *code_off)
5945 {
5946   bfd_size_type size;
5947
5948   if ((sym->flags & (BSF_SECTION_SYM | BSF_FILE | BSF_OBJECT
5949                      | BSF_THREAD_LOCAL | BSF_RELC | BSF_SRELC)) != 0)
5950     return 0;
5951
5952   size = 0;
5953   if (!(sym->flags & BSF_SYNTHETIC))
5954     size = ((elf_symbol_type *) sym)->internal_elf_sym.st_size;
5955
5956   if (strcmp (sym->section->name, ".opd") == 0)
5957     {
5958       if (opd_entry_value (sym->section, sym->value,
5959                            &sec, code_off, TRUE) == (bfd_vma) -1)
5960         return 0;
5961       /* An old ABI binary with dot-syms has a size of 24 on the .opd
5962          symbol.  This size has nothing to do with the code size of the
5963          function, which is what we're supposed to return, but the
5964          code size isn't available without looking up the dot-sym.
5965          However, doing that would be a waste of time particularly
5966          since elf_find_function will look at the dot-sym anyway.
5967          Now, elf_find_function will keep the largest size of any
5968          function sym found at the code address of interest, so return
5969          1 here to avoid it incorrectly caching a larger function size
5970          for a small function.  This does mean we return the wrong
5971          size for a new-ABI function of size 24, but all that does is
5972          disable caching for such functions.  */
5973       if (size == 24)
5974         size = 1;
5975     }
5976   else
5977     {
5978       if (sym->section != sec)
5979         return 0;
5980       *code_off = sym->value;
5981     }
5982   if (size == 0)
5983     size = 1;
5984   return size;
5985 }
5986
5987 /* Return true if symbol is defined in a regular object file.  */
5988
5989 static bfd_boolean
5990 is_static_defined (struct elf_link_hash_entry *h)
5991 {
5992   return ((h->root.type == bfd_link_hash_defined
5993            || h->root.type == bfd_link_hash_defweak)
5994           && h->root.u.def.section != NULL
5995           && h->root.u.def.section->output_section != NULL);
5996 }
5997
5998 /* If FDH is a function descriptor symbol, return the associated code
5999    entry symbol if it is defined.  Return NULL otherwise.  */
6000
6001 static struct ppc_link_hash_entry *
6002 defined_code_entry (struct ppc_link_hash_entry *fdh)
6003 {
6004   if (fdh->is_func_descriptor)
6005     {
6006       struct ppc_link_hash_entry *fh = ppc_follow_link (fdh->oh);
6007       if (fh->elf.root.type == bfd_link_hash_defined
6008           || fh->elf.root.type == bfd_link_hash_defweak)
6009         return fh;
6010     }
6011   return NULL;
6012 }
6013
6014 /* If FH is a function code entry symbol, return the associated
6015    function descriptor symbol if it is defined.  Return NULL otherwise.  */
6016
6017 static struct ppc_link_hash_entry *
6018 defined_func_desc (struct ppc_link_hash_entry *fh)
6019 {
6020   if (fh->oh != NULL
6021       && fh->oh->is_func_descriptor)
6022     {
6023       struct ppc_link_hash_entry *fdh = ppc_follow_link (fh->oh);
6024       if (fdh->elf.root.type == bfd_link_hash_defined
6025           || fdh->elf.root.type == bfd_link_hash_defweak)
6026         return fdh;
6027     }
6028   return NULL;
6029 }
6030
6031 /* Mark all our entry sym sections, both opd and code section.  */
6032
6033 static void
6034 ppc64_elf_gc_keep (struct bfd_link_info *info)
6035 {
6036   struct ppc_link_hash_table *htab = ppc_hash_table (info);
6037   struct bfd_sym_chain *sym;
6038
6039   if (htab == NULL)
6040     return;
6041
6042   for (sym = info->gc_sym_list; sym != NULL; sym = sym->next)
6043     {
6044       struct ppc_link_hash_entry *eh, *fh;
6045       asection *sec;
6046
6047       eh = (struct ppc_link_hash_entry *)
6048         elf_link_hash_lookup (&htab->elf, sym->name, FALSE, FALSE, TRUE);
6049       if (eh == NULL)
6050         continue;
6051       if (eh->elf.root.type != bfd_link_hash_defined
6052           && eh->elf.root.type != bfd_link_hash_defweak)
6053         continue;
6054
6055       fh = defined_code_entry (eh);
6056       if (fh != NULL)
6057         {
6058           sec = fh->elf.root.u.def.section;
6059           sec->flags |= SEC_KEEP;
6060         }
6061       else if (get_opd_info (eh->elf.root.u.def.section) != NULL
6062                && opd_entry_value (eh->elf.root.u.def.section,
6063                                    eh->elf.root.u.def.value,
6064                                    &sec, NULL, FALSE) != (bfd_vma) -1)
6065         sec->flags |= SEC_KEEP;
6066
6067       sec = eh->elf.root.u.def.section;
6068       sec->flags |= SEC_KEEP;
6069     }
6070 }
6071
6072 /* Mark sections containing dynamically referenced symbols.  When
6073    building shared libraries, we must assume that any visible symbol is
6074    referenced.  */
6075
6076 static bfd_boolean
6077 ppc64_elf_gc_mark_dynamic_ref (struct elf_link_hash_entry *h, void *inf)
6078 {
6079   struct bfd_link_info *info = (struct bfd_link_info *) inf;
6080   struct ppc_link_hash_entry *eh = (struct ppc_link_hash_entry *) h;
6081   struct ppc_link_hash_entry *fdh;
6082
6083   /* Dynamic linking info is on the func descriptor sym.  */
6084   fdh = defined_func_desc (eh);
6085   if (fdh != NULL)
6086     eh = fdh;
6087
6088   if ((eh->elf.root.type == bfd_link_hash_defined
6089        || eh->elf.root.type == bfd_link_hash_defweak)
6090       && (eh->elf.ref_dynamic
6091           || (!info->executable
6092               && eh->elf.def_regular
6093               && ELF_ST_VISIBILITY (eh->elf.other) != STV_INTERNAL
6094               && ELF_ST_VISIBILITY (eh->elf.other) != STV_HIDDEN
6095               && (strchr (eh->elf.root.root.string, ELF_VER_CHR) != NULL
6096                   || !bfd_hide_sym_by_version (info->version_info,
6097                                                eh->elf.root.root.string)))))
6098     {
6099       asection *code_sec;
6100       struct ppc_link_hash_entry *fh;
6101
6102       eh->elf.root.u.def.section->flags |= SEC_KEEP;
6103
6104       /* Function descriptor syms cause the associated
6105          function code sym section to be marked.  */
6106       fh = defined_code_entry (eh);
6107       if (fh != NULL)
6108         {
6109           code_sec = fh->elf.root.u.def.section;
6110           code_sec->flags |= SEC_KEEP;
6111         }
6112       else if (get_opd_info (eh->elf.root.u.def.section) != NULL
6113                && opd_entry_value (eh->elf.root.u.def.section,
6114                                    eh->elf.root.u.def.value,
6115                                    &code_sec, NULL, FALSE) != (bfd_vma) -1)
6116         code_sec->flags |= SEC_KEEP;
6117     }
6118
6119   return TRUE;
6120 }
6121
6122 /* Return the section that should be marked against GC for a given
6123    relocation.  */
6124
6125 static asection *
6126 ppc64_elf_gc_mark_hook (asection *sec,
6127                         struct bfd_link_info *info,
6128                         Elf_Internal_Rela *rel,
6129                         struct elf_link_hash_entry *h,
6130                         Elf_Internal_Sym *sym)
6131 {
6132   asection *rsec;
6133
6134   /* Syms return NULL if we're marking .opd, so we avoid marking all
6135      function sections, as all functions are referenced in .opd.  */
6136   rsec = NULL;
6137   if (get_opd_info (sec) != NULL)
6138     return rsec;
6139
6140   if (h != NULL)
6141     {
6142       enum elf_ppc64_reloc_type r_type;
6143       struct ppc_link_hash_entry *eh, *fh, *fdh;
6144
6145       r_type = ELF64_R_TYPE (rel->r_info);
6146       switch (r_type)
6147         {
6148         case R_PPC64_GNU_VTINHERIT:
6149         case R_PPC64_GNU_VTENTRY:
6150           break;
6151
6152         default:
6153           switch (h->root.type)
6154             {
6155             case bfd_link_hash_defined:
6156             case bfd_link_hash_defweak:
6157               eh = (struct ppc_link_hash_entry *) h;
6158               fdh = defined_func_desc (eh);
6159               if (fdh != NULL)
6160                 eh = fdh;
6161
6162               /* Function descriptor syms cause the associated
6163                  function code sym section to be marked.  */
6164               fh = defined_code_entry (eh);
6165               if (fh != NULL)
6166                 {
6167                   /* They also mark their opd section.  */
6168                   eh->elf.root.u.def.section->gc_mark = 1;
6169
6170                   rsec = fh->elf.root.u.def.section;
6171                 }
6172               else if (get_opd_info (eh->elf.root.u.def.section) != NULL
6173                        && opd_entry_value (eh->elf.root.u.def.section,
6174                                            eh->elf.root.u.def.value,
6175                                            &rsec, NULL, FALSE) != (bfd_vma) -1)
6176                 eh->elf.root.u.def.section->gc_mark = 1;
6177               else
6178                 rsec = h->root.u.def.section;
6179               break;
6180
6181             case bfd_link_hash_common:
6182               rsec = h->root.u.c.p->section;
6183               break;
6184
6185             default:
6186               return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym);
6187             }
6188         }
6189     }
6190   else
6191     {
6192       struct _opd_sec_data *opd;
6193
6194       rsec = bfd_section_from_elf_index (sec->owner, sym->st_shndx);
6195       opd = get_opd_info (rsec);
6196       if (opd != NULL && opd->func_sec != NULL)
6197         {
6198           rsec->gc_mark = 1;
6199
6200           rsec = opd->func_sec[(sym->st_value + rel->r_addend) / 8];
6201         }
6202     }
6203
6204   return rsec;
6205 }
6206
6207 /* Update the .got, .plt. and dynamic reloc reference counts for the
6208    section being removed.  */
6209
6210 static bfd_boolean
6211 ppc64_elf_gc_sweep_hook (bfd *abfd, struct bfd_link_info *info,
6212                          asection *sec, const Elf_Internal_Rela *relocs)
6213 {
6214   struct ppc_link_hash_table *htab;
6215   Elf_Internal_Shdr *symtab_hdr;
6216   struct elf_link_hash_entry **sym_hashes;
6217   struct got_entry **local_got_ents;
6218   const Elf_Internal_Rela *rel, *relend;
6219
6220   if (info->relocatable)
6221     return TRUE;
6222
6223   if ((sec->flags & SEC_ALLOC) == 0)
6224     return TRUE;
6225
6226   elf_section_data (sec)->local_dynrel = NULL;
6227
6228   htab = ppc_hash_table (info);
6229   if (htab == NULL)
6230     return FALSE;
6231
6232   symtab_hdr = &elf_symtab_hdr (abfd);
6233   sym_hashes = elf_sym_hashes (abfd);
6234   local_got_ents = elf_local_got_ents (abfd);
6235
6236   relend = relocs + sec->reloc_count;
6237   for (rel = relocs; rel < relend; rel++)
6238     {
6239       unsigned long r_symndx;
6240       enum elf_ppc64_reloc_type r_type;
6241       struct elf_link_hash_entry *h = NULL;
6242       unsigned char tls_type = 0;
6243
6244       r_symndx = ELF64_R_SYM (rel->r_info);
6245       r_type = ELF64_R_TYPE (rel->r_info);
6246       if (r_symndx >= symtab_hdr->sh_info)
6247         {
6248           struct ppc_link_hash_entry *eh;
6249           struct elf_dyn_relocs **pp;
6250           struct elf_dyn_relocs *p;
6251
6252           h = sym_hashes[r_symndx - symtab_hdr->sh_info];
6253           h = elf_follow_link (h);
6254           eh = (struct ppc_link_hash_entry *) h;
6255
6256           for (pp = &eh->dyn_relocs; (p = *pp) != NULL; pp = &p->next)
6257             if (p->sec == sec)
6258               {
6259                 /* Everything must go for SEC.  */
6260                 *pp = p->next;
6261                 break;
6262               }
6263         }
6264
6265       if (is_branch_reloc (r_type))
6266         {
6267           struct plt_entry **ifunc = NULL;
6268           if (h != NULL)
6269             {
6270               if (h->type == STT_GNU_IFUNC)
6271                 ifunc = &h->plt.plist;
6272             }
6273           else if (local_got_ents != NULL)
6274             {
6275               struct plt_entry **local_plt = (struct plt_entry **)
6276                 (local_got_ents + symtab_hdr->sh_info);
6277               unsigned char *local_got_tls_masks = (unsigned char *)
6278                 (local_plt + symtab_hdr->sh_info);
6279               if ((local_got_tls_masks[r_symndx] & PLT_IFUNC) != 0)
6280                 ifunc = local_plt + r_symndx;
6281             }
6282           if (ifunc != NULL)
6283             {
6284               struct plt_entry *ent;
6285
6286               for (ent = *ifunc; ent != NULL; ent = ent->next)
6287                 if (ent->addend == rel->r_addend)
6288                   break;
6289               if (ent == NULL)
6290                 abort ();
6291               if (ent->plt.refcount > 0)
6292                 ent->plt.refcount -= 1;
6293               continue;
6294             }
6295         }
6296
6297       switch (r_type)
6298         {
6299         case R_PPC64_GOT_TLSLD16:
6300         case R_PPC64_GOT_TLSLD16_LO:
6301         case R_PPC64_GOT_TLSLD16_HI:
6302         case R_PPC64_GOT_TLSLD16_HA:
6303           tls_type = TLS_TLS | TLS_LD;
6304           goto dogot;
6305
6306         case R_PPC64_GOT_TLSGD16:
6307         case R_PPC64_GOT_TLSGD16_LO:
6308         case R_PPC64_GOT_TLSGD16_HI:
6309         case R_PPC64_GOT_TLSGD16_HA:
6310           tls_type = TLS_TLS | TLS_GD;
6311           goto dogot;
6312
6313         case R_PPC64_GOT_TPREL16_DS:
6314         case R_PPC64_GOT_TPREL16_LO_DS:
6315         case R_PPC64_GOT_TPREL16_HI:
6316         case R_PPC64_GOT_TPREL16_HA:
6317           tls_type = TLS_TLS | TLS_TPREL;
6318           goto dogot;
6319
6320         case R_PPC64_GOT_DTPREL16_DS:
6321         case R_PPC64_GOT_DTPREL16_LO_DS:
6322         case R_PPC64_GOT_DTPREL16_HI:
6323         case R_PPC64_GOT_DTPREL16_HA:
6324           tls_type = TLS_TLS | TLS_DTPREL;
6325           goto dogot;
6326
6327         case R_PPC64_GOT16:
6328         case R_PPC64_GOT16_DS:
6329         case R_PPC64_GOT16_HA:
6330         case R_PPC64_GOT16_HI:
6331         case R_PPC64_GOT16_LO:
6332         case R_PPC64_GOT16_LO_DS:
6333         dogot:
6334           {
6335             struct got_entry *ent;
6336
6337             if (h != NULL)
6338               ent = h->got.glist;
6339             else
6340               ent = local_got_ents[r_symndx];
6341
6342             for (; ent != NULL; ent = ent->next)
6343               if (ent->addend == rel->r_addend
6344                   && ent->owner == abfd
6345                   && ent->tls_type == tls_type)
6346                 break;
6347             if (ent == NULL)
6348               abort ();
6349             if (ent->got.refcount > 0)
6350               ent->got.refcount -= 1;
6351           }
6352           break;
6353
6354         case R_PPC64_PLT16_HA:
6355         case R_PPC64_PLT16_HI:
6356         case R_PPC64_PLT16_LO:
6357         case R_PPC64_PLT32:
6358         case R_PPC64_PLT64:
6359         case R_PPC64_REL14:
6360         case R_PPC64_REL14_BRNTAKEN:
6361         case R_PPC64_REL14_BRTAKEN:
6362         case R_PPC64_REL24:
6363           if (h != NULL)
6364             {
6365               struct plt_entry *ent;
6366
6367               for (ent = h->plt.plist; ent != NULL; ent = ent->next)
6368                 if (ent->addend == rel->r_addend)
6369                   break;
6370               if (ent != NULL && ent->plt.refcount > 0)
6371                 ent->plt.refcount -= 1;
6372             }
6373           break;
6374
6375         default:
6376           break;
6377         }
6378     }
6379   return TRUE;
6380 }
6381
6382 /* The maximum size of .sfpr.  */
6383 #define SFPR_MAX (218*4)
6384
6385 struct sfpr_def_parms
6386 {
6387   const char name[12];
6388   unsigned char lo, hi;
6389   bfd_byte * (*write_ent) (bfd *, bfd_byte *, int);
6390   bfd_byte * (*write_tail) (bfd *, bfd_byte *, int);
6391 };
6392
6393 /* Auto-generate _save*, _rest* functions in .sfpr.  */
6394
6395 static bfd_boolean
6396 sfpr_define (struct bfd_link_info *info, const struct sfpr_def_parms *parm)
6397 {
6398   struct ppc_link_hash_table *htab = ppc_hash_table (info);
6399   unsigned int i;
6400   size_t len = strlen (parm->name);
6401   bfd_boolean writing = FALSE;
6402   char sym[16];
6403
6404   if (htab == NULL)
6405     return FALSE;
6406
6407   memcpy (sym, parm->name, len);
6408   sym[len + 2] = 0;
6409
6410   for (i = parm->lo; i <= parm->hi; i++)
6411     {
6412       struct elf_link_hash_entry *h;
6413
6414       sym[len + 0] = i / 10 + '0';
6415       sym[len + 1] = i % 10 + '0';
6416       h = elf_link_hash_lookup (&htab->elf, sym, FALSE, FALSE, TRUE);
6417       if (h != NULL
6418           && !h->def_regular)
6419         {
6420           h->root.type = bfd_link_hash_defined;
6421           h->root.u.def.section = htab->sfpr;
6422           h->root.u.def.value = htab->sfpr->size;
6423           h->type = STT_FUNC;
6424           h->def_regular = 1;
6425           _bfd_elf_link_hash_hide_symbol (info, h, TRUE);
6426           writing = TRUE;
6427           if (htab->sfpr->contents == NULL)
6428             {
6429               htab->sfpr->contents = bfd_alloc (htab->elf.dynobj, SFPR_MAX);
6430               if (htab->sfpr->contents == NULL)
6431                 return FALSE;
6432             }
6433         }
6434       if (writing)
6435         {
6436           bfd_byte *p = htab->sfpr->contents + htab->sfpr->size;
6437           if (i != parm->hi)
6438             p = (*parm->write_ent) (htab->elf.dynobj, p, i);
6439           else
6440             p = (*parm->write_tail) (htab->elf.dynobj, p, i);
6441           htab->sfpr->size = p - htab->sfpr->contents;
6442         }
6443     }
6444
6445   return TRUE;
6446 }
6447
6448 static bfd_byte *
6449 savegpr0 (bfd *abfd, bfd_byte *p, int r)
6450 {
6451   bfd_put_32 (abfd, STD_R0_0R1 + (r << 21) + (1 << 16) - (32 - r) * 8, p);
6452   return p + 4;
6453 }
6454
6455 static bfd_byte *
6456 savegpr0_tail (bfd *abfd, bfd_byte *p, int r)
6457 {
6458   p = savegpr0 (abfd, p, r);
6459   bfd_put_32 (abfd, STD_R0_0R1 + 16, p);
6460   p = p + 4;
6461   bfd_put_32 (abfd, BLR, p);
6462   return p + 4;
6463 }
6464
6465 static bfd_byte *
6466 restgpr0 (bfd *abfd, bfd_byte *p, int r)
6467 {
6468   bfd_put_32 (abfd, LD_R0_0R1 + (r << 21) + (1 << 16) - (32 - r) * 8, p);
6469   return p + 4;
6470 }
6471
6472 static bfd_byte *
6473 restgpr0_tail (bfd *abfd, bfd_byte *p, int r)
6474 {
6475   bfd_put_32 (abfd, LD_R0_0R1 + 16, p);
6476   p = p + 4;
6477   p = restgpr0 (abfd, p, r);
6478   bfd_put_32 (abfd, MTLR_R0, p);
6479   p = p + 4;
6480   if (r == 29)
6481     {
6482       p = restgpr0 (abfd, p, 30);
6483       p = restgpr0 (abfd, p, 31);
6484     }
6485   bfd_put_32 (abfd, BLR, p);
6486   return p + 4;
6487 }
6488
6489 static bfd_byte *
6490 savegpr1 (bfd *abfd, bfd_byte *p, int r)
6491 {
6492   bfd_put_32 (abfd, STD_R0_0R12 + (r << 21) + (1 << 16) - (32 - r) * 8, p);
6493   return p + 4;
6494 }
6495
6496 static bfd_byte *
6497 savegpr1_tail (bfd *abfd, bfd_byte *p, int r)
6498 {
6499   p = savegpr1 (abfd, p, r);
6500   bfd_put_32 (abfd, BLR, p);
6501   return p + 4;
6502 }
6503
6504 static bfd_byte *
6505 restgpr1 (bfd *abfd, bfd_byte *p, int r)
6506 {
6507   bfd_put_32 (abfd, LD_R0_0R12 + (r << 21) + (1 << 16) - (32 - r) * 8, p);
6508   return p + 4;
6509 }
6510
6511 static bfd_byte *
6512 restgpr1_tail (bfd *abfd, bfd_byte *p, int r)
6513 {
6514   p = restgpr1 (abfd, p, r);
6515   bfd_put_32 (abfd, BLR, p);
6516   return p + 4;
6517 }
6518
6519 static bfd_byte *
6520 savefpr (bfd *abfd, bfd_byte *p, int r)
6521 {
6522   bfd_put_32 (abfd, STFD_FR0_0R1 + (r << 21) + (1 << 16) - (32 - r) * 8, p);
6523   return p + 4;
6524 }
6525
6526 static bfd_byte *
6527 savefpr0_tail (bfd *abfd, bfd_byte *p, int r)
6528 {
6529   p = savefpr (abfd, p, r);
6530   bfd_put_32 (abfd, STD_R0_0R1 + 16, p);
6531   p = p + 4;
6532   bfd_put_32 (abfd, BLR, p);
6533   return p + 4;
6534 }
6535
6536 static bfd_byte *
6537 restfpr (bfd *abfd, bfd_byte *p, int r)
6538 {
6539   bfd_put_32 (abfd, LFD_FR0_0R1 + (r << 21) + (1 << 16) - (32 - r) * 8, p);
6540   return p + 4;
6541 }
6542
6543 static bfd_byte *
6544 restfpr0_tail (bfd *abfd, bfd_byte *p, int r)
6545 {
6546   bfd_put_32 (abfd, LD_R0_0R1 + 16, p);
6547   p = p + 4;
6548   p = restfpr (abfd, p, r);
6549   bfd_put_32 (abfd, MTLR_R0, p);
6550   p = p + 4;
6551   if (r == 29)
6552     {
6553       p = restfpr (abfd, p, 30);
6554       p = restfpr (abfd, p, 31);
6555     }
6556   bfd_put_32 (abfd, BLR, p);
6557   return p + 4;
6558 }
6559
6560 static bfd_byte *
6561 savefpr1_tail (bfd *abfd, bfd_byte *p, int r)
6562 {
6563   p = savefpr (abfd, p, r);
6564   bfd_put_32 (abfd, BLR, p);
6565   return p + 4;
6566 }
6567
6568 static bfd_byte *
6569 restfpr1_tail (bfd *abfd, bfd_byte *p, int r)
6570 {
6571   p = restfpr (abfd, p, r);
6572   bfd_put_32 (abfd, BLR, p);
6573   return p + 4;
6574 }
6575
6576 static bfd_byte *
6577 savevr (bfd *abfd, bfd_byte *p, int r)
6578 {
6579   bfd_put_32 (abfd, LI_R12_0 + (1 << 16) - (32 - r) * 16, p);
6580   p = p + 4;
6581   bfd_put_32 (abfd, STVX_VR0_R12_R0 + (r << 21), p);
6582   return p + 4;
6583 }
6584
6585 static bfd_byte *
6586 savevr_tail (bfd *abfd, bfd_byte *p, int r)
6587 {
6588   p = savevr (abfd, p, r);
6589   bfd_put_32 (abfd, BLR, p);
6590   return p + 4;
6591 }
6592
6593 static bfd_byte *
6594 restvr (bfd *abfd, bfd_byte *p, int r)
6595 {
6596   bfd_put_32 (abfd, LI_R12_0 + (1 << 16) - (32 - r) * 16, p);
6597   p = p + 4;
6598   bfd_put_32 (abfd, LVX_VR0_R12_R0 + (r << 21), p);
6599   return p + 4;
6600 }
6601
6602 static bfd_byte *
6603 restvr_tail (bfd *abfd, bfd_byte *p, int r)
6604 {
6605   p = restvr (abfd, p, r);
6606   bfd_put_32 (abfd, BLR, p);
6607   return p + 4;
6608 }
6609
6610 /* Called via elf_link_hash_traverse to transfer dynamic linking
6611    information on function code symbol entries to their corresponding
6612    function descriptor symbol entries.  */
6613
6614 static bfd_boolean
6615 func_desc_adjust (struct elf_link_hash_entry *h, void *inf)
6616 {
6617   struct bfd_link_info *info;
6618   struct ppc_link_hash_table *htab;
6619   struct plt_entry *ent;
6620   struct ppc_link_hash_entry *fh;
6621   struct ppc_link_hash_entry *fdh;
6622   bfd_boolean force_local;
6623
6624   fh = (struct ppc_link_hash_entry *) h;
6625   if (fh->elf.root.type == bfd_link_hash_indirect)
6626     return TRUE;
6627
6628   info = inf;
6629   htab = ppc_hash_table (info);
6630   if (htab == NULL)
6631     return FALSE;
6632
6633   /* Resolve undefined references to dot-symbols as the value
6634      in the function descriptor, if we have one in a regular object.
6635      This is to satisfy cases like ".quad .foo".  Calls to functions
6636      in dynamic objects are handled elsewhere.  */
6637   if (fh->elf.root.type == bfd_link_hash_undefweak
6638       && fh->was_undefined
6639       && (fdh = defined_func_desc (fh)) != NULL
6640       && get_opd_info (fdh->elf.root.u.def.section) != NULL
6641       && opd_entry_value (fdh->elf.root.u.def.section,
6642                           fdh->elf.root.u.def.value,
6643                           &fh->elf.root.u.def.section,
6644                           &fh->elf.root.u.def.value, FALSE) != (bfd_vma) -1)
6645     {
6646       fh->elf.root.type = fdh->elf.root.type;
6647       fh->elf.forced_local = 1;
6648       fh->elf.def_regular = fdh->elf.def_regular;
6649       fh->elf.def_dynamic = fdh->elf.def_dynamic;
6650     }
6651
6652   /* If this is a function code symbol, transfer dynamic linking
6653      information to the function descriptor symbol.  */
6654   if (!fh->is_func)
6655     return TRUE;
6656
6657   for (ent = fh->elf.plt.plist; ent != NULL; ent = ent->next)
6658     if (ent->plt.refcount > 0)
6659       break;
6660   if (ent == NULL
6661       || fh->elf.root.root.string[0] != '.'
6662       || fh->elf.root.root.string[1] == '\0')
6663     return TRUE;
6664
6665   /* Find the corresponding function descriptor symbol.  Create it
6666      as undefined if necessary.  */
6667
6668   fdh = lookup_fdh (fh, htab);
6669   if (fdh == NULL
6670       && !info->executable
6671       && (fh->elf.root.type == bfd_link_hash_undefined
6672           || fh->elf.root.type == bfd_link_hash_undefweak))
6673     {
6674       fdh = make_fdh (info, fh);
6675       if (fdh == NULL)
6676         return FALSE;
6677     }
6678
6679   /* Fake function descriptors are made undefweak.  If the function
6680      code symbol is strong undefined, make the fake sym the same.
6681      If the function code symbol is defined, then force the fake
6682      descriptor local;  We can't support overriding of symbols in a
6683      shared library on a fake descriptor.  */
6684
6685   if (fdh != NULL
6686       && fdh->fake
6687       && fdh->elf.root.type == bfd_link_hash_undefweak)
6688     {
6689       if (fh->elf.root.type == bfd_link_hash_undefined)
6690         {
6691           fdh->elf.root.type = bfd_link_hash_undefined;
6692           bfd_link_add_undef (&htab->elf.root, &fdh->elf.root);
6693         }
6694       else if (fh->elf.root.type == bfd_link_hash_defined
6695                || fh->elf.root.type == bfd_link_hash_defweak)
6696         {
6697           _bfd_elf_link_hash_hide_symbol (info, &fdh->elf, TRUE);
6698         }
6699     }
6700
6701   if (fdh != NULL
6702       && !fdh->elf.forced_local
6703       && (!info->executable
6704           || fdh->elf.def_dynamic
6705           || fdh->elf.ref_dynamic
6706           || (fdh->elf.root.type == bfd_link_hash_undefweak
6707               && ELF_ST_VISIBILITY (fdh->elf.other) == STV_DEFAULT)))
6708     {
6709       if (fdh->elf.dynindx == -1)
6710         if (! bfd_elf_link_record_dynamic_symbol (info, &fdh->elf))
6711           return FALSE;
6712       fdh->elf.ref_regular |= fh->elf.ref_regular;
6713       fdh->elf.ref_dynamic |= fh->elf.ref_dynamic;
6714       fdh->elf.ref_regular_nonweak |= fh->elf.ref_regular_nonweak;
6715       fdh->elf.non_got_ref |= fh->elf.non_got_ref;
6716       if (ELF_ST_VISIBILITY (fh->elf.other) == STV_DEFAULT)
6717         {
6718           move_plt_plist (fh, fdh);
6719           fdh->elf.needs_plt = 1;
6720         }
6721       fdh->is_func_descriptor = 1;
6722       fdh->oh = fh;
6723       fh->oh = fdh;
6724     }
6725
6726   /* Now that the info is on the function descriptor, clear the
6727      function code sym info.  Any function code syms for which we
6728      don't have a definition in a regular file, we force local.
6729      This prevents a shared library from exporting syms that have
6730      been imported from another library.  Function code syms that
6731      are really in the library we must leave global to prevent the
6732      linker dragging in a definition from a static library.  */
6733   force_local = (!fh->elf.def_regular
6734                  || fdh == NULL
6735                  || !fdh->elf.def_regular
6736                  || fdh->elf.forced_local);
6737   _bfd_elf_link_hash_hide_symbol (info, &fh->elf, force_local);
6738
6739   return TRUE;
6740 }
6741
6742 /* Called near the start of bfd_elf_size_dynamic_sections.  We use
6743    this hook to a) provide some gcc support functions, and b) transfer
6744    dynamic linking information gathered so far on function code symbol
6745    entries, to their corresponding function descriptor symbol entries.  */
6746
6747 static bfd_boolean
6748 ppc64_elf_func_desc_adjust (bfd *obfd ATTRIBUTE_UNUSED,
6749                             struct bfd_link_info *info)
6750 {
6751   struct ppc_link_hash_table *htab;
6752   unsigned int i;
6753   static const struct sfpr_def_parms funcs[] =
6754     {
6755       { "_savegpr0_", 14, 31, savegpr0, savegpr0_tail },
6756       { "_restgpr0_", 14, 29, restgpr0, restgpr0_tail },
6757       { "_restgpr0_", 30, 31, restgpr0, restgpr0_tail },
6758       { "_savegpr1_", 14, 31, savegpr1, savegpr1_tail },
6759       { "_restgpr1_", 14, 31, restgpr1, restgpr1_tail },
6760       { "_savefpr_", 14, 31, savefpr, savefpr0_tail },
6761       { "_restfpr_", 14, 29, restfpr, restfpr0_tail },
6762       { "_restfpr_", 30, 31, restfpr, restfpr0_tail },
6763       { "._savef", 14, 31, savefpr, savefpr1_tail },
6764       { "._restf", 14, 31, restfpr, restfpr1_tail },
6765       { "_savevr_", 20, 31, savevr, savevr_tail },
6766       { "_restvr_", 20, 31, restvr, restvr_tail }
6767     };
6768
6769   htab = ppc_hash_table (info);
6770   if (htab == NULL)
6771     return FALSE;
6772
6773   if (!info->relocatable
6774       && htab->elf.hgot != NULL)
6775     _bfd_elf_link_hash_hide_symbol (info, htab->elf.hgot, TRUE);
6776
6777   if (htab->sfpr == NULL)
6778     /* We don't have any relocs.  */
6779     return TRUE;
6780
6781   /* Provide any missing _save* and _rest* functions.  */
6782   htab->sfpr->size = 0;
6783   if (!info->relocatable)
6784     for (i = 0; i < sizeof (funcs) / sizeof (funcs[0]); i++)
6785       if (!sfpr_define (info, &funcs[i]))
6786         return FALSE;
6787
6788   elf_link_hash_traverse (&htab->elf, func_desc_adjust, info);
6789
6790   if (htab->sfpr->size == 0)
6791     htab->sfpr->flags |= SEC_EXCLUDE;
6792
6793   return TRUE;
6794 }
6795
6796 /* Adjust a symbol defined by a dynamic object and referenced by a
6797    regular object.  The current definition is in some section of the
6798    dynamic object, but we're not including those sections.  We have to
6799    change the definition to something the rest of the link can
6800    understand.  */
6801
6802 static bfd_boolean
6803 ppc64_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
6804                                  struct elf_link_hash_entry *h)
6805 {
6806   struct ppc_link_hash_table *htab;
6807   asection *s;
6808
6809   htab = ppc_hash_table (info);
6810   if (htab == NULL)
6811     return FALSE;
6812
6813   /* Deal with function syms.  */
6814   if (h->type == STT_FUNC
6815       || h->type == STT_GNU_IFUNC
6816       || h->needs_plt)
6817     {
6818       /* Clear procedure linkage table information for any symbol that
6819          won't need a .plt entry.  */
6820       struct plt_entry *ent;
6821       for (ent = h->plt.plist; ent != NULL; ent = ent->next)
6822         if (ent->plt.refcount > 0)
6823           break;
6824       if (ent == NULL
6825           || (h->type != STT_GNU_IFUNC
6826               && (SYMBOL_CALLS_LOCAL (info, h)
6827                   || (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
6828                       && h->root.type == bfd_link_hash_undefweak))))
6829         {
6830           h->plt.plist = NULL;
6831           h->needs_plt = 0;
6832         }
6833     }
6834   else
6835     h->plt.plist = NULL;
6836
6837   /* If this is a weak symbol, and there is a real definition, the
6838      processor independent code will have arranged for us to see the
6839      real definition first, and we can just use the same value.  */
6840   if (h->u.weakdef != NULL)
6841     {
6842       BFD_ASSERT (h->u.weakdef->root.type == bfd_link_hash_defined
6843                   || h->u.weakdef->root.type == bfd_link_hash_defweak);
6844       h->root.u.def.section = h->u.weakdef->root.u.def.section;
6845       h->root.u.def.value = h->u.weakdef->root.u.def.value;
6846       if (ELIMINATE_COPY_RELOCS)
6847         h->non_got_ref = h->u.weakdef->non_got_ref;
6848       return TRUE;
6849     }
6850
6851   /* If we are creating a shared library, we must presume that the
6852      only references to the symbol are via the global offset table.
6853      For such cases we need not do anything here; the relocations will
6854      be handled correctly by relocate_section.  */
6855   if (info->shared)
6856     return TRUE;
6857
6858   /* If there are no references to this symbol that do not use the
6859      GOT, we don't need to generate a copy reloc.  */
6860   if (!h->non_got_ref)
6861     return TRUE;
6862
6863   /* Don't generate a copy reloc for symbols defined in the executable.  */
6864   if (!h->def_dynamic || !h->ref_regular || h->def_regular)
6865     return TRUE;
6866
6867   if (ELIMINATE_COPY_RELOCS)
6868     {
6869       struct ppc_link_hash_entry * eh;
6870       struct elf_dyn_relocs *p;
6871
6872       eh = (struct ppc_link_hash_entry *) h;
6873       for (p = eh->dyn_relocs; p != NULL; p = p->next)
6874         {
6875           s = p->sec->output_section;
6876           if (s != NULL && (s->flags & SEC_READONLY) != 0)
6877             break;
6878         }
6879
6880       /* If we didn't find any dynamic relocs in read-only sections, then
6881          we'll be keeping the dynamic relocs and avoiding the copy reloc.  */
6882       if (p == NULL)
6883         {
6884           h->non_got_ref = 0;
6885           return TRUE;
6886         }
6887     }
6888
6889   if (h->plt.plist != NULL)
6890     {
6891       /* We should never get here, but unfortunately there are versions
6892          of gcc out there that improperly (for this ABI) put initialized
6893          function pointers, vtable refs and suchlike in read-only
6894          sections.  Allow them to proceed, but warn that this might
6895          break at runtime.  */
6896       info->callbacks->einfo
6897         (_("%P: copy reloc against `%T' requires lazy plt linking; "
6898            "avoid setting LD_BIND_NOW=1 or upgrade gcc\n"),
6899          h->root.root.string);
6900     }
6901
6902   /* This is a reference to a symbol defined by a dynamic object which
6903      is not a function.  */
6904
6905   /* We must allocate the symbol in our .dynbss section, which will
6906      become part of the .bss section of the executable.  There will be
6907      an entry for this symbol in the .dynsym section.  The dynamic
6908      object will contain position independent code, so all references
6909      from the dynamic object to this symbol will go through the global
6910      offset table.  The dynamic linker will use the .dynsym entry to
6911      determine the address it must put in the global offset table, so
6912      both the dynamic object and the regular object will refer to the
6913      same memory location for the variable.  */
6914
6915   /* We must generate a R_PPC64_COPY reloc to tell the dynamic linker
6916      to copy the initial value out of the dynamic object and into the
6917      runtime process image.  We need to remember the offset into the
6918      .rela.bss section we are going to use.  */
6919   if ((h->root.u.def.section->flags & SEC_ALLOC) != 0 && h->size != 0)
6920     {
6921       htab->relbss->size += sizeof (Elf64_External_Rela);
6922       h->needs_copy = 1;
6923     }
6924
6925   s = htab->dynbss;
6926
6927   return _bfd_elf_adjust_dynamic_copy (h, s);
6928 }
6929
6930 /* If given a function descriptor symbol, hide both the function code
6931    sym and the descriptor.  */
6932 static void
6933 ppc64_elf_hide_symbol (struct bfd_link_info *info,
6934                        struct elf_link_hash_entry *h,
6935                        bfd_boolean force_local)
6936 {
6937   struct ppc_link_hash_entry *eh;
6938   _bfd_elf_link_hash_hide_symbol (info, h, force_local);
6939
6940   eh = (struct ppc_link_hash_entry *) h;
6941   if (eh->is_func_descriptor)
6942     {
6943       struct ppc_link_hash_entry *fh = eh->oh;
6944
6945       if (fh == NULL)
6946         {
6947           const char *p, *q;
6948           struct ppc_link_hash_table *htab;
6949           char save;
6950
6951           /* We aren't supposed to use alloca in BFD because on
6952              systems which do not have alloca the version in libiberty
6953              calls xmalloc, which might cause the program to crash
6954              when it runs out of memory.  This function doesn't have a
6955              return status, so there's no way to gracefully return an
6956              error.  So cheat.  We know that string[-1] can be safely
6957              accessed;  It's either a string in an ELF string table,
6958              or allocated in an objalloc structure.  */
6959
6960           p = eh->elf.root.root.string - 1;
6961           save = *p;
6962           *(char *) p = '.';
6963           htab = ppc_hash_table (info);
6964           if (htab == NULL)
6965             return;
6966
6967           fh = (struct ppc_link_hash_entry *)
6968             elf_link_hash_lookup (&htab->elf, p, FALSE, FALSE, FALSE);
6969           *(char *) p = save;
6970
6971           /* Unfortunately, if it so happens that the string we were
6972              looking for was allocated immediately before this string,
6973              then we overwrote the string terminator.  That's the only
6974              reason the lookup should fail.  */
6975           if (fh == NULL)
6976             {
6977               q = eh->elf.root.root.string + strlen (eh->elf.root.root.string);
6978               while (q >= eh->elf.root.root.string && *q == *p)
6979                 --q, --p;
6980               if (q < eh->elf.root.root.string && *p == '.')
6981                 fh = (struct ppc_link_hash_entry *)
6982                   elf_link_hash_lookup (&htab->elf, p, FALSE, FALSE, FALSE);
6983             }
6984           if (fh != NULL)
6985             {
6986               eh->oh = fh;
6987               fh->oh = eh;
6988             }
6989         }
6990       if (fh != NULL)
6991         _bfd_elf_link_hash_hide_symbol (info, &fh->elf, force_local);
6992     }
6993 }
6994
6995 static bfd_boolean
6996 get_sym_h (struct elf_link_hash_entry **hp,
6997            Elf_Internal_Sym **symp,
6998            asection **symsecp,
6999            unsigned char **tls_maskp,
7000            Elf_Internal_Sym **locsymsp,
7001            unsigned long r_symndx,
7002            bfd *ibfd)
7003 {
7004   Elf_Internal_Shdr *symtab_hdr = &elf_symtab_hdr (ibfd);
7005
7006   if (r_symndx >= symtab_hdr->sh_info)
7007     {
7008       struct elf_link_hash_entry **sym_hashes = elf_sym_hashes (ibfd);
7009       struct elf_link_hash_entry *h;
7010
7011       h = sym_hashes[r_symndx - symtab_hdr->sh_info];
7012       h = elf_follow_link (h);
7013
7014       if (hp != NULL)
7015         *hp = h;
7016
7017       if (symp != NULL)
7018         *symp = NULL;
7019
7020       if (symsecp != NULL)
7021         {
7022           asection *symsec = NULL;
7023           if (h->root.type == bfd_link_hash_defined
7024               || h->root.type == bfd_link_hash_defweak)
7025             symsec = h->root.u.def.section;
7026           *symsecp = symsec;
7027         }
7028
7029       if (tls_maskp != NULL)
7030         {
7031           struct ppc_link_hash_entry *eh;
7032
7033           eh = (struct ppc_link_hash_entry *) h;
7034           *tls_maskp = &eh->tls_mask;
7035         }
7036     }
7037   else
7038     {
7039       Elf_Internal_Sym *sym;
7040       Elf_Internal_Sym *locsyms = *locsymsp;
7041
7042       if (locsyms == NULL)
7043         {
7044           locsyms = (Elf_Internal_Sym *) symtab_hdr->contents;
7045           if (locsyms == NULL)
7046             locsyms = bfd_elf_get_elf_syms (ibfd, symtab_hdr,
7047                                             symtab_hdr->sh_info,
7048                                             0, NULL, NULL, NULL);
7049           if (locsyms == NULL)
7050             return FALSE;
7051           *locsymsp = locsyms;
7052         }
7053       sym = locsyms + r_symndx;
7054
7055       if (hp != NULL)
7056         *hp = NULL;
7057
7058       if (symp != NULL)
7059         *symp = sym;
7060
7061       if (symsecp != NULL)
7062         *symsecp = bfd_section_from_elf_index (ibfd, sym->st_shndx);
7063
7064       if (tls_maskp != NULL)
7065         {
7066           struct got_entry **lgot_ents;
7067           unsigned char *tls_mask;
7068
7069           tls_mask = NULL;
7070           lgot_ents = elf_local_got_ents (ibfd);
7071           if (lgot_ents != NULL)
7072             {
7073               struct plt_entry **local_plt = (struct plt_entry **)
7074                 (lgot_ents + symtab_hdr->sh_info);
7075               unsigned char *lgot_masks = (unsigned char *)
7076                 (local_plt + symtab_hdr->sh_info);
7077               tls_mask = &lgot_masks[r_symndx];
7078             }
7079           *tls_maskp = tls_mask;
7080         }
7081     }
7082   return TRUE;
7083 }
7084
7085 /* Returns TLS_MASKP for the given REL symbol.  Function return is 0 on
7086    error, 2 on a toc GD type suitable for optimization, 3 on a toc LD
7087    type suitable for optimization, and 1 otherwise.  */
7088
7089 static int
7090 get_tls_mask (unsigned char **tls_maskp,
7091               unsigned long *toc_symndx,
7092               bfd_vma *toc_addend,
7093               Elf_Internal_Sym **locsymsp,
7094               const Elf_Internal_Rela *rel,
7095               bfd *ibfd)
7096 {
7097   unsigned long r_symndx;
7098   int next_r;
7099   struct elf_link_hash_entry *h;
7100   Elf_Internal_Sym *sym;
7101   asection *sec;
7102   bfd_vma off;
7103
7104   r_symndx = ELF64_R_SYM (rel->r_info);
7105   if (!get_sym_h (&h, &sym, &sec, tls_maskp, locsymsp, r_symndx, ibfd))
7106     return 0;
7107
7108   if ((*tls_maskp != NULL && **tls_maskp != 0)
7109       || sec == NULL
7110       || ppc64_elf_section_data (sec) == NULL
7111       || ppc64_elf_section_data (sec)->sec_type != sec_toc)
7112     return 1;
7113
7114   /* Look inside a TOC section too.  */
7115   if (h != NULL)
7116     {
7117       BFD_ASSERT (h->root.type == bfd_link_hash_defined);
7118       off = h->root.u.def.value;
7119     }
7120   else
7121     off = sym->st_value;
7122   off += rel->r_addend;
7123   BFD_ASSERT (off % 8 == 0);
7124   r_symndx = ppc64_elf_section_data (sec)->u.toc.symndx[off / 8];
7125   next_r = ppc64_elf_section_data (sec)->u.toc.symndx[off / 8 + 1];
7126   if (toc_symndx != NULL)
7127     *toc_symndx = r_symndx;
7128   if (toc_addend != NULL)
7129     *toc_addend = ppc64_elf_section_data (sec)->u.toc.add[off / 8];
7130   if (!get_sym_h (&h, &sym, &sec, tls_maskp, locsymsp, r_symndx, ibfd))
7131     return 0;
7132   if ((h == NULL || is_static_defined (h))
7133       && (next_r == -1 || next_r == -2))
7134     return 1 - next_r;
7135   return 1;
7136 }
7137
7138 /* Find (or create) an entry in the tocsave hash table.  */
7139
7140 static struct tocsave_entry *
7141 tocsave_find (struct ppc_link_hash_table *htab,
7142               enum insert_option insert,
7143               Elf_Internal_Sym **local_syms,
7144               const Elf_Internal_Rela *irela,
7145               bfd *ibfd)
7146 {
7147   unsigned long r_indx;
7148   struct elf_link_hash_entry *h;
7149   Elf_Internal_Sym *sym;
7150   struct tocsave_entry ent, *p;
7151   hashval_t hash;
7152   struct tocsave_entry **slot;
7153
7154   r_indx = ELF64_R_SYM (irela->r_info);
7155   if (!get_sym_h (&h, &sym, &ent.sec, NULL, local_syms, r_indx, ibfd))
7156     return NULL;
7157   if (ent.sec == NULL || ent.sec->output_section == NULL)
7158     {
7159       (*_bfd_error_handler)
7160         (_("%B: undefined symbol on R_PPC64_TOCSAVE relocation"));
7161       return NULL;
7162     }
7163
7164   if (h != NULL)
7165     ent.offset = h->root.u.def.value;
7166   else
7167     ent.offset = sym->st_value;
7168   ent.offset += irela->r_addend;
7169
7170   hash = tocsave_htab_hash (&ent);
7171   slot = ((struct tocsave_entry **)
7172           htab_find_slot_with_hash (htab->tocsave_htab, &ent, hash, insert));
7173   if (slot == NULL)
7174     return NULL;
7175
7176   if (*slot == NULL)
7177     {
7178       p = (struct tocsave_entry *) bfd_alloc (ibfd, sizeof (*p));
7179       if (p == NULL)
7180         return NULL;
7181       *p = ent;
7182       *slot = p;
7183     }
7184   return *slot;
7185 }
7186
7187 /* Adjust all global syms defined in opd sections.  In gcc generated
7188    code for the old ABI, these will already have been done.  */
7189
7190 static bfd_boolean
7191 adjust_opd_syms (struct elf_link_hash_entry *h, void *inf ATTRIBUTE_UNUSED)
7192 {
7193   struct ppc_link_hash_entry *eh;
7194   asection *sym_sec;
7195   struct _opd_sec_data *opd;
7196
7197   if (h->root.type == bfd_link_hash_indirect)
7198     return TRUE;
7199
7200   if (h->root.type != bfd_link_hash_defined
7201       && h->root.type != bfd_link_hash_defweak)
7202     return TRUE;
7203
7204   eh = (struct ppc_link_hash_entry *) h;
7205   if (eh->adjust_done)
7206     return TRUE;
7207
7208   sym_sec = eh->elf.root.u.def.section;
7209   opd = get_opd_info (sym_sec);
7210   if (opd != NULL && opd->adjust != NULL)
7211     {
7212       long adjust = opd->adjust[eh->elf.root.u.def.value / 8];
7213       if (adjust == -1)
7214         {
7215           /* This entry has been deleted.  */
7216           asection *dsec = ppc64_elf_tdata (sym_sec->owner)->deleted_section;
7217           if (dsec == NULL)
7218             {
7219               for (dsec = sym_sec->owner->sections; dsec; dsec = dsec->next)
7220                 if (discarded_section (dsec))
7221                   {
7222                     ppc64_elf_tdata (sym_sec->owner)->deleted_section = dsec;
7223                     break;
7224                   }
7225             }
7226           eh->elf.root.u.def.value = 0;
7227           eh->elf.root.u.def.section = dsec;
7228         }
7229       else
7230         eh->elf.root.u.def.value += adjust;
7231       eh->adjust_done = 1;
7232     }
7233   return TRUE;
7234 }
7235
7236 /* Handles decrementing dynamic reloc counts for the reloc specified by
7237    R_INFO in section SEC.  If LOCAL_SYMS is NULL, then H and SYM
7238    have already been determined.  */
7239
7240 static bfd_boolean
7241 dec_dynrel_count (bfd_vma r_info,
7242                   asection *sec,
7243                   struct bfd_link_info *info,
7244                   Elf_Internal_Sym **local_syms,
7245                   struct elf_link_hash_entry *h,
7246                   Elf_Internal_Sym *sym)
7247 {
7248   enum elf_ppc64_reloc_type r_type;
7249   asection *sym_sec = NULL;
7250
7251   /* Can this reloc be dynamic?  This switch, and later tests here
7252      should be kept in sync with the code in check_relocs.  */
7253   r_type = ELF64_R_TYPE (r_info);
7254   switch (r_type)
7255     {
7256     default:
7257       return TRUE;
7258
7259     case R_PPC64_TPREL16:
7260     case R_PPC64_TPREL16_LO:
7261     case R_PPC64_TPREL16_HI:
7262     case R_PPC64_TPREL16_HA:
7263     case R_PPC64_TPREL16_DS:
7264     case R_PPC64_TPREL16_LO_DS:
7265     case R_PPC64_TPREL16_HIGH:
7266     case R_PPC64_TPREL16_HIGHA:
7267     case R_PPC64_TPREL16_HIGHER:
7268     case R_PPC64_TPREL16_HIGHERA:
7269     case R_PPC64_TPREL16_HIGHEST:
7270     case R_PPC64_TPREL16_HIGHESTA:
7271       if (!info->shared)
7272         return TRUE;
7273
7274     case R_PPC64_TPREL64:
7275     case R_PPC64_DTPMOD64:
7276     case R_PPC64_DTPREL64:
7277     case R_PPC64_ADDR64:
7278     case R_PPC64_REL30:
7279     case R_PPC64_REL32:
7280     case R_PPC64_REL64:
7281     case R_PPC64_ADDR14:
7282     case R_PPC64_ADDR14_BRNTAKEN:
7283     case R_PPC64_ADDR14_BRTAKEN:
7284     case R_PPC64_ADDR16:
7285     case R_PPC64_ADDR16_DS:
7286     case R_PPC64_ADDR16_HA:
7287     case R_PPC64_ADDR16_HI:
7288     case R_PPC64_ADDR16_HIGH:
7289     case R_PPC64_ADDR16_HIGHA:
7290     case R_PPC64_ADDR16_HIGHER:
7291     case R_PPC64_ADDR16_HIGHERA:
7292     case R_PPC64_ADDR16_HIGHEST:
7293     case R_PPC64_ADDR16_HIGHESTA:
7294     case R_PPC64_ADDR16_LO:
7295     case R_PPC64_ADDR16_LO_DS:
7296     case R_PPC64_ADDR24:
7297     case R_PPC64_ADDR32:
7298     case R_PPC64_UADDR16:
7299     case R_PPC64_UADDR32:
7300     case R_PPC64_UADDR64:
7301     case R_PPC64_TOC:
7302       break;
7303     }
7304
7305   if (local_syms != NULL)
7306     {
7307       unsigned long r_symndx;
7308       bfd *ibfd = sec->owner;
7309
7310       r_symndx = ELF64_R_SYM (r_info);
7311       if (!get_sym_h (&h, &sym, &sym_sec, NULL, local_syms, r_symndx, ibfd))
7312         return FALSE;
7313     }
7314
7315   if ((info->shared
7316        && (must_be_dyn_reloc (info, r_type)
7317            || (h != NULL
7318                && (!SYMBOLIC_BIND (info, h)
7319                    || h->root.type == bfd_link_hash_defweak
7320                    || !h->def_regular))))
7321       || (ELIMINATE_COPY_RELOCS
7322           && !info->shared
7323           && h != NULL
7324           && (h->root.type == bfd_link_hash_defweak
7325               || !h->def_regular)))
7326     ;
7327   else
7328     return TRUE;
7329
7330   if (h != NULL)
7331     {
7332       struct elf_dyn_relocs *p;
7333       struct elf_dyn_relocs **pp;
7334       pp = &((struct ppc_link_hash_entry *) h)->dyn_relocs;
7335
7336       /* elf_gc_sweep may have already removed all dyn relocs associated
7337          with local syms for a given section.  Also, symbol flags are
7338          changed by elf_gc_sweep_symbol, confusing the test above.  Don't
7339          report a dynreloc miscount.  */
7340       if (*pp == NULL && info->gc_sections)
7341         return TRUE;
7342
7343       while ((p = *pp) != NULL)
7344         {
7345           if (p->sec == sec)
7346             {
7347               if (!must_be_dyn_reloc (info, r_type))
7348                 p->pc_count -= 1;
7349               p->count -= 1;
7350               if (p->count == 0)
7351                 *pp = p->next;
7352               return TRUE;
7353             }
7354           pp = &p->next;
7355         }
7356     }
7357   else
7358     {
7359       struct ppc_dyn_relocs *p;
7360       struct ppc_dyn_relocs **pp;
7361       void *vpp;
7362       bfd_boolean is_ifunc;
7363
7364       if (local_syms == NULL)
7365         sym_sec = bfd_section_from_elf_index (sec->owner, sym->st_shndx);
7366       if (sym_sec == NULL)
7367         sym_sec = sec;
7368
7369       vpp = &elf_section_data (sym_sec)->local_dynrel;
7370       pp = (struct ppc_dyn_relocs **) vpp;
7371
7372       if (*pp == NULL && info->gc_sections)
7373         return TRUE;
7374
7375       is_ifunc = ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC;
7376       while ((p = *pp) != NULL)
7377         {
7378           if (p->sec == sec && p->ifunc == is_ifunc)
7379             {
7380               p->count -= 1;
7381               if (p->count == 0)
7382                 *pp = p->next;
7383               return TRUE;
7384             }
7385           pp = &p->next;
7386         }
7387     }
7388
7389   info->callbacks->einfo (_("%P: dynreloc miscount for %B, section %A\n"),
7390                           sec->owner, sec);
7391   bfd_set_error (bfd_error_bad_value);
7392   return FALSE;
7393 }
7394
7395 /* Remove unused Official Procedure Descriptor entries.  Currently we
7396    only remove those associated with functions in discarded link-once
7397    sections, or weakly defined functions that have been overridden.  It
7398    would be possible to remove many more entries for statically linked
7399    applications.  */
7400
7401 bfd_boolean
7402 ppc64_elf_edit_opd (struct bfd_link_info *info, bfd_boolean non_overlapping)
7403 {
7404   bfd *ibfd;
7405   bfd_boolean some_edited = FALSE;
7406   asection *need_pad = NULL;
7407
7408   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link_next)
7409     {
7410       asection *sec;
7411       Elf_Internal_Rela *relstart, *rel, *relend;
7412       Elf_Internal_Shdr *symtab_hdr;
7413       Elf_Internal_Sym *local_syms;
7414       bfd_vma offset;
7415       struct _opd_sec_data *opd;
7416       bfd_boolean need_edit, add_aux_fields;
7417       bfd_size_type cnt_16b = 0;
7418
7419       if (!is_ppc64_elf (ibfd))
7420         continue;
7421
7422       sec = bfd_get_section_by_name (ibfd, ".opd");
7423       if (sec == NULL || sec->size == 0)
7424         continue;
7425
7426       if (sec->sec_info_type == SEC_INFO_TYPE_JUST_SYMS)
7427         continue;
7428
7429       if (sec->output_section == bfd_abs_section_ptr)
7430         continue;
7431
7432       /* Look through the section relocs.  */
7433       if ((sec->flags & SEC_RELOC) == 0 || sec->reloc_count == 0)
7434         continue;
7435
7436       local_syms = NULL;
7437       symtab_hdr = &elf_symtab_hdr (ibfd);
7438
7439       /* Read the relocations.  */
7440       relstart = _bfd_elf_link_read_relocs (ibfd, sec, NULL, NULL,
7441                                             info->keep_memory);
7442       if (relstart == NULL)
7443         return FALSE;
7444
7445       /* First run through the relocs to check they are sane, and to
7446          determine whether we need to edit this opd section.  */
7447       need_edit = FALSE;
7448       need_pad = sec;
7449       offset = 0;
7450       relend = relstart + sec->reloc_count;
7451       for (rel = relstart; rel < relend; )
7452         {
7453           enum elf_ppc64_reloc_type r_type;
7454           unsigned long r_symndx;
7455           asection *sym_sec;
7456           struct elf_link_hash_entry *h;
7457           Elf_Internal_Sym *sym;
7458
7459           /* .opd contains a regular array of 16 or 24 byte entries.  We're
7460              only interested in the reloc pointing to a function entry
7461              point.  */
7462           if (rel->r_offset != offset
7463               || rel + 1 >= relend
7464               || (rel + 1)->r_offset != offset + 8)
7465             {
7466               /* If someone messes with .opd alignment then after a
7467                  "ld -r" we might have padding in the middle of .opd.
7468                  Also, there's nothing to prevent someone putting
7469                  something silly in .opd with the assembler.  No .opd
7470                  optimization for them!  */
7471             broken_opd:
7472               (*_bfd_error_handler)
7473                 (_("%B: .opd is not a regular array of opd entries"), ibfd);
7474               need_edit = FALSE;
7475               break;
7476             }
7477
7478           if ((r_type = ELF64_R_TYPE (rel->r_info)) != R_PPC64_ADDR64
7479               || (r_type = ELF64_R_TYPE ((rel + 1)->r_info)) != R_PPC64_TOC)
7480             {
7481               (*_bfd_error_handler)
7482                 (_("%B: unexpected reloc type %u in .opd section"),
7483                  ibfd, r_type);
7484               need_edit = FALSE;
7485               break;
7486             }
7487
7488           r_symndx = ELF64_R_SYM (rel->r_info);
7489           if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms,
7490                           r_symndx, ibfd))
7491             goto error_ret;
7492
7493           if (sym_sec == NULL || sym_sec->owner == NULL)
7494             {
7495               const char *sym_name;
7496               if (h != NULL)
7497                 sym_name = h->root.root.string;
7498               else
7499                 sym_name = bfd_elf_sym_name (ibfd, symtab_hdr, sym,
7500                                              sym_sec);
7501
7502               (*_bfd_error_handler)
7503                 (_("%B: undefined sym `%s' in .opd section"),
7504                  ibfd, sym_name);
7505               need_edit = FALSE;
7506               break;
7507             }
7508
7509           /* opd entries are always for functions defined in the
7510              current input bfd.  If the symbol isn't defined in the
7511              input bfd, then we won't be using the function in this
7512              bfd;  It must be defined in a linkonce section in another
7513              bfd, or is weak.  It's also possible that we are
7514              discarding the function due to a linker script /DISCARD/,
7515              which we test for via the output_section.  */
7516           if (sym_sec->owner != ibfd
7517               || sym_sec->output_section == bfd_abs_section_ptr)
7518             need_edit = TRUE;
7519
7520           rel += 2;
7521           if (rel == relend
7522               || (rel + 1 == relend && rel->r_offset == offset + 16))
7523             {
7524               if (sec->size == offset + 24)
7525                 {
7526                   need_pad = NULL;
7527                   break;
7528                 }
7529               if (rel == relend && sec->size == offset + 16)
7530                 {
7531                   cnt_16b++;
7532                   break;
7533                 }
7534               goto broken_opd;
7535             }
7536
7537           if (rel->r_offset == offset + 24)
7538             offset += 24;
7539           else if (rel->r_offset != offset + 16)
7540             goto broken_opd;
7541           else if (rel + 1 < relend
7542                    && ELF64_R_TYPE (rel[0].r_info) == R_PPC64_ADDR64
7543                    && ELF64_R_TYPE (rel[1].r_info) == R_PPC64_TOC)
7544             {
7545               offset += 16;
7546               cnt_16b++;
7547             }
7548           else if (rel + 2 < relend
7549                    && ELF64_R_TYPE (rel[1].r_info) == R_PPC64_ADDR64
7550                    && ELF64_R_TYPE (rel[2].r_info) == R_PPC64_TOC)
7551             {
7552               offset += 24;
7553               rel += 1;
7554             }
7555           else
7556             goto broken_opd;
7557         }
7558
7559       add_aux_fields = non_overlapping && cnt_16b > 0;
7560
7561       if (need_edit || add_aux_fields)
7562         {
7563           Elf_Internal_Rela *write_rel;
7564           Elf_Internal_Shdr *rel_hdr;
7565           bfd_byte *rptr, *wptr;
7566           bfd_byte *new_contents;
7567           bfd_boolean skip;
7568           long opd_ent_size;
7569           bfd_size_type amt;
7570
7571           new_contents = NULL;
7572           amt = sec->size * sizeof (long) / 8;
7573           opd = &ppc64_elf_section_data (sec)->u.opd;
7574           opd->adjust = bfd_zalloc (sec->owner, amt);
7575           if (opd->adjust == NULL)
7576             return FALSE;
7577           ppc64_elf_section_data (sec)->sec_type = sec_opd;
7578
7579           /* This seems a waste of time as input .opd sections are all
7580              zeros as generated by gcc, but I suppose there's no reason
7581              this will always be so.  We might start putting something in
7582              the third word of .opd entries.  */
7583           if ((sec->flags & SEC_IN_MEMORY) == 0)
7584             {
7585               bfd_byte *loc;
7586               if (!bfd_malloc_and_get_section (ibfd, sec, &loc))
7587                 {
7588                   if (loc != NULL)
7589                     free (loc);
7590                 error_ret:
7591                   if (local_syms != NULL
7592                       && symtab_hdr->contents != (unsigned char *) local_syms)
7593                     free (local_syms);
7594                   if (elf_section_data (sec)->relocs != relstart)
7595                     free (relstart);
7596                   return FALSE;
7597                 }
7598               sec->contents = loc;
7599               sec->flags |= (SEC_IN_MEMORY | SEC_HAS_CONTENTS);
7600             }
7601
7602           elf_section_data (sec)->relocs = relstart;
7603
7604           new_contents = sec->contents;
7605           if (add_aux_fields)
7606             {
7607               new_contents = bfd_malloc (sec->size + cnt_16b * 8);
7608               if (new_contents == NULL)
7609                 return FALSE;
7610               need_pad = FALSE;
7611             }
7612           wptr = new_contents;
7613           rptr = sec->contents;
7614
7615           write_rel = relstart;
7616           skip = FALSE;
7617           offset = 0;
7618           opd_ent_size = 0;
7619           for (rel = relstart; rel < relend; rel++)
7620             {
7621               unsigned long r_symndx;
7622               asection *sym_sec;
7623               struct elf_link_hash_entry *h;
7624               Elf_Internal_Sym *sym;
7625
7626               r_symndx = ELF64_R_SYM (rel->r_info);
7627               if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms,
7628                               r_symndx, ibfd))
7629                 goto error_ret;
7630
7631               if (rel->r_offset == offset)
7632                 {
7633                   struct ppc_link_hash_entry *fdh = NULL;
7634
7635                   /* See if the .opd entry is full 24 byte or
7636                      16 byte (with fd_aux entry overlapped with next
7637                      fd_func).  */
7638                   opd_ent_size = 24;
7639                   if ((rel + 2 == relend && sec->size == offset + 16)
7640                       || (rel + 3 < relend
7641                           && rel[2].r_offset == offset + 16
7642                           && rel[3].r_offset == offset + 24
7643                           && ELF64_R_TYPE (rel[2].r_info) == R_PPC64_ADDR64
7644                           && ELF64_R_TYPE (rel[3].r_info) == R_PPC64_TOC))
7645                     opd_ent_size = 16;
7646
7647                   if (h != NULL
7648                       && h->root.root.string[0] == '.')
7649                     {
7650                       struct ppc_link_hash_table *htab;
7651
7652                       htab = ppc_hash_table (info);
7653                       if (htab != NULL)
7654                         fdh = lookup_fdh ((struct ppc_link_hash_entry *) h,
7655                                           htab);
7656                       if (fdh != NULL
7657                           && fdh->elf.root.type != bfd_link_hash_defined
7658                           && fdh->elf.root.type != bfd_link_hash_defweak)
7659                         fdh = NULL;
7660                     }
7661
7662                   skip = (sym_sec->owner != ibfd
7663                           || sym_sec->output_section == bfd_abs_section_ptr);
7664                   if (skip)
7665                     {
7666                       if (fdh != NULL && sym_sec->owner == ibfd)
7667                         {
7668                           /* Arrange for the function descriptor sym
7669                              to be dropped.  */
7670                           fdh->elf.root.u.def.value = 0;
7671                           fdh->elf.root.u.def.section = sym_sec;
7672                         }
7673                       opd->adjust[rel->r_offset / 8] = -1;
7674                     }
7675                   else
7676                     {
7677                       /* We'll be keeping this opd entry.  */
7678
7679                       if (fdh != NULL)
7680                         {
7681                           /* Redefine the function descriptor symbol to
7682                              this location in the opd section.  It is
7683                              necessary to update the value here rather
7684                              than using an array of adjustments as we do
7685                              for local symbols, because various places
7686                              in the generic ELF code use the value
7687                              stored in u.def.value.  */
7688                           fdh->elf.root.u.def.value = wptr - new_contents;
7689                           fdh->adjust_done = 1;
7690                         }
7691
7692                       /* Local syms are a bit tricky.  We could
7693                          tweak them as they can be cached, but
7694                          we'd need to look through the local syms
7695                          for the function descriptor sym which we
7696                          don't have at the moment.  So keep an
7697                          array of adjustments.  */
7698                       opd->adjust[rel->r_offset / 8]
7699                         = (wptr - new_contents) - (rptr - sec->contents);
7700
7701                       if (wptr != rptr)
7702                         memcpy (wptr, rptr, opd_ent_size);
7703                       wptr += opd_ent_size;
7704                       if (add_aux_fields && opd_ent_size == 16)
7705                         {
7706                           memset (wptr, '\0', 8);
7707                           wptr += 8;
7708                         }
7709                     }
7710                   rptr += opd_ent_size;
7711                   offset += opd_ent_size;
7712                 }
7713
7714               if (skip)
7715                 {
7716                   if (!NO_OPD_RELOCS
7717                       && !info->relocatable
7718                       && !dec_dynrel_count (rel->r_info, sec, info,
7719                                             NULL, h, sym))
7720                     goto error_ret;
7721                 }
7722               else
7723                 {
7724                   /* We need to adjust any reloc offsets to point to the
7725                      new opd entries.  While we're at it, we may as well
7726                      remove redundant relocs.  */
7727                   rel->r_offset += opd->adjust[(offset - opd_ent_size) / 8];
7728                   if (write_rel != rel)
7729                     memcpy (write_rel, rel, sizeof (*rel));
7730                   ++write_rel;
7731                 }
7732             }
7733
7734           sec->size = wptr - new_contents;
7735           sec->reloc_count = write_rel - relstart;
7736           if (add_aux_fields)
7737             {
7738               free (sec->contents);
7739               sec->contents = new_contents;
7740             }
7741
7742           /* Fudge the header size too, as this is used later in
7743              elf_bfd_final_link if we are emitting relocs.  */
7744           rel_hdr = _bfd_elf_single_rel_hdr (sec);
7745           rel_hdr->sh_size = sec->reloc_count * rel_hdr->sh_entsize;
7746           some_edited = TRUE;
7747         }
7748       else if (elf_section_data (sec)->relocs != relstart)
7749         free (relstart);
7750
7751       if (local_syms != NULL
7752           && symtab_hdr->contents != (unsigned char *) local_syms)
7753         {
7754           if (!info->keep_memory)
7755             free (local_syms);
7756           else
7757             symtab_hdr->contents = (unsigned char *) local_syms;
7758         }
7759     }
7760
7761   if (some_edited)
7762     elf_link_hash_traverse (elf_hash_table (info), adjust_opd_syms, NULL);
7763
7764   /* If we are doing a final link and the last .opd entry is just 16 byte
7765      long, add a 8 byte padding after it.  */
7766   if (need_pad != NULL && !info->relocatable)
7767     {
7768       bfd_byte *p;
7769
7770       if ((need_pad->flags & SEC_IN_MEMORY) == 0)
7771         {
7772           BFD_ASSERT (need_pad->size > 0);
7773
7774           p = bfd_malloc (need_pad->size + 8);
7775           if (p == NULL)
7776             return FALSE;
7777
7778           if (! bfd_get_section_contents (need_pad->owner, need_pad,
7779                                           p, 0, need_pad->size))
7780             return FALSE;
7781
7782           need_pad->contents = p;
7783           need_pad->flags |= (SEC_IN_MEMORY | SEC_HAS_CONTENTS);
7784         }
7785       else
7786         {
7787           p = bfd_realloc (need_pad->contents, need_pad->size + 8);
7788           if (p == NULL)
7789             return FALSE;
7790
7791           need_pad->contents = p;
7792         }
7793
7794       memset (need_pad->contents + need_pad->size, 0, 8);
7795       need_pad->size += 8;
7796     }
7797
7798   return TRUE;
7799 }
7800
7801 /* Set htab->tls_get_addr and call the generic ELF tls_setup function.  */
7802
7803 asection *
7804 ppc64_elf_tls_setup (struct bfd_link_info *info,
7805                      int no_tls_get_addr_opt,
7806                      int *no_multi_toc)
7807 {
7808   struct ppc_link_hash_table *htab;
7809
7810   htab = ppc_hash_table (info);
7811   if (htab == NULL)
7812     return NULL;
7813
7814   if (abiversion (info->output_bfd) == 1)
7815     htab->opd_abi = 1;
7816
7817   if (*no_multi_toc)
7818     htab->do_multi_toc = 0;
7819   else if (!htab->do_multi_toc)
7820     *no_multi_toc = 1;
7821
7822   htab->tls_get_addr = ((struct ppc_link_hash_entry *)
7823                         elf_link_hash_lookup (&htab->elf, ".__tls_get_addr",
7824                                               FALSE, FALSE, TRUE));
7825   /* Move dynamic linking info to the function descriptor sym.  */
7826   if (htab->tls_get_addr != NULL)
7827     func_desc_adjust (&htab->tls_get_addr->elf, info);
7828   htab->tls_get_addr_fd = ((struct ppc_link_hash_entry *)
7829                            elf_link_hash_lookup (&htab->elf, "__tls_get_addr",
7830                                                  FALSE, FALSE, TRUE));
7831   if (!no_tls_get_addr_opt)
7832     {
7833       struct elf_link_hash_entry *opt, *opt_fd, *tga, *tga_fd;
7834
7835       opt = elf_link_hash_lookup (&htab->elf, ".__tls_get_addr_opt",
7836                                   FALSE, FALSE, TRUE);
7837       if (opt != NULL)
7838         func_desc_adjust (opt, info);
7839       opt_fd = elf_link_hash_lookup (&htab->elf, "__tls_get_addr_opt",
7840                                      FALSE, FALSE, TRUE);
7841       if (opt_fd != NULL
7842           && (opt_fd->root.type == bfd_link_hash_defined
7843               || opt_fd->root.type == bfd_link_hash_defweak))
7844         {
7845           /* If glibc supports an optimized __tls_get_addr call stub,
7846              signalled by the presence of __tls_get_addr_opt, and we'll
7847              be calling __tls_get_addr via a plt call stub, then
7848              make __tls_get_addr point to __tls_get_addr_opt.  */
7849           tga_fd = &htab->tls_get_addr_fd->elf;
7850           if (htab->elf.dynamic_sections_created
7851               && tga_fd != NULL
7852               && (tga_fd->type == STT_FUNC
7853                   || tga_fd->needs_plt)
7854               && !(SYMBOL_CALLS_LOCAL (info, tga_fd)
7855                    || (ELF_ST_VISIBILITY (tga_fd->other) != STV_DEFAULT
7856                        && tga_fd->root.type == bfd_link_hash_undefweak)))
7857             {
7858               struct plt_entry *ent;
7859
7860               for (ent = tga_fd->plt.plist; ent != NULL; ent = ent->next)
7861                 if (ent->plt.refcount > 0)
7862                   break;
7863               if (ent != NULL)
7864                 {
7865                   tga_fd->root.type = bfd_link_hash_indirect;
7866                   tga_fd->root.u.i.link = &opt_fd->root;
7867                   ppc64_elf_copy_indirect_symbol (info, opt_fd, tga_fd);
7868                   if (opt_fd->dynindx != -1)
7869                     {
7870                       /* Use __tls_get_addr_opt in dynamic relocations.  */
7871                       opt_fd->dynindx = -1;
7872                       _bfd_elf_strtab_delref (elf_hash_table (info)->dynstr,
7873                                               opt_fd->dynstr_index);
7874                       if (!bfd_elf_link_record_dynamic_symbol (info, opt_fd))
7875                         return NULL;
7876                     }
7877                   htab->tls_get_addr_fd = (struct ppc_link_hash_entry *) opt_fd;
7878                   tga = &htab->tls_get_addr->elf;
7879                   if (opt != NULL && tga != NULL)
7880                     {
7881                       tga->root.type = bfd_link_hash_indirect;
7882                       tga->root.u.i.link = &opt->root;
7883                       ppc64_elf_copy_indirect_symbol (info, opt, tga);
7884                       _bfd_elf_link_hash_hide_symbol (info, opt,
7885                                                       tga->forced_local);
7886                       htab->tls_get_addr = (struct ppc_link_hash_entry *) opt;
7887                     }
7888                   htab->tls_get_addr_fd->oh = htab->tls_get_addr;
7889                   htab->tls_get_addr_fd->is_func_descriptor = 1;
7890                   if (htab->tls_get_addr != NULL)
7891                     {
7892                       htab->tls_get_addr->oh = htab->tls_get_addr_fd;
7893                       htab->tls_get_addr->is_func = 1;
7894                     }
7895                 }
7896             }
7897         }
7898       else
7899         no_tls_get_addr_opt = TRUE;
7900     }
7901   htab->no_tls_get_addr_opt = no_tls_get_addr_opt;
7902   return _bfd_elf_tls_setup (info->output_bfd, info);
7903 }
7904
7905 /* Return TRUE iff REL is a branch reloc with a global symbol matching
7906    HASH1 or HASH2.  */
7907
7908 static bfd_boolean
7909 branch_reloc_hash_match (const bfd *ibfd,
7910                          const Elf_Internal_Rela *rel,
7911                          const struct ppc_link_hash_entry *hash1,
7912                          const struct ppc_link_hash_entry *hash2)
7913 {
7914   Elf_Internal_Shdr *symtab_hdr = &elf_symtab_hdr (ibfd);
7915   enum elf_ppc64_reloc_type r_type = ELF64_R_TYPE (rel->r_info);
7916   unsigned int r_symndx = ELF64_R_SYM (rel->r_info);
7917
7918   if (r_symndx >= symtab_hdr->sh_info && is_branch_reloc (r_type))
7919     {
7920       struct elf_link_hash_entry **sym_hashes = elf_sym_hashes (ibfd);
7921       struct elf_link_hash_entry *h;
7922
7923       h = sym_hashes[r_symndx - symtab_hdr->sh_info];
7924       h = elf_follow_link (h);
7925       if (h == &hash1->elf || h == &hash2->elf)
7926         return TRUE;
7927     }
7928   return FALSE;
7929 }
7930
7931 /* Run through all the TLS relocs looking for optimization
7932    opportunities.  The linker has been hacked (see ppc64elf.em) to do
7933    a preliminary section layout so that we know the TLS segment
7934    offsets.  We can't optimize earlier because some optimizations need
7935    to know the tp offset, and we need to optimize before allocating
7936    dynamic relocations.  */
7937
7938 bfd_boolean
7939 ppc64_elf_tls_optimize (struct bfd_link_info *info)
7940 {
7941   bfd *ibfd;
7942   asection *sec;
7943   struct ppc_link_hash_table *htab;
7944   unsigned char *toc_ref;
7945   int pass;
7946
7947   if (info->relocatable || !info->executable)
7948     return TRUE;
7949
7950   htab = ppc_hash_table (info);
7951   if (htab == NULL)
7952     return FALSE;
7953
7954   /* Make two passes over the relocs.  On the first pass, mark toc
7955      entries involved with tls relocs, and check that tls relocs
7956      involved in setting up a tls_get_addr call are indeed followed by
7957      such a call.  If they are not, we can't do any tls optimization.
7958      On the second pass twiddle tls_mask flags to notify
7959      relocate_section that optimization can be done, and adjust got
7960      and plt refcounts.  */
7961   toc_ref = NULL;
7962   for (pass = 0; pass < 2; ++pass)
7963     for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link_next)
7964       {
7965         Elf_Internal_Sym *locsyms = NULL;
7966         asection *toc = bfd_get_section_by_name (ibfd, ".toc");
7967
7968         for (sec = ibfd->sections; sec != NULL; sec = sec->next)
7969           if (sec->has_tls_reloc && !bfd_is_abs_section (sec->output_section))
7970             {
7971               Elf_Internal_Rela *relstart, *rel, *relend;
7972               bfd_boolean found_tls_get_addr_arg = 0;
7973
7974               /* Read the relocations.  */
7975               relstart = _bfd_elf_link_read_relocs (ibfd, sec, NULL, NULL,
7976                                                     info->keep_memory);
7977               if (relstart == NULL)
7978                 return FALSE;
7979
7980               relend = relstart + sec->reloc_count;
7981               for (rel = relstart; rel < relend; rel++)
7982                 {
7983                   enum elf_ppc64_reloc_type r_type;
7984                   unsigned long r_symndx;
7985                   struct elf_link_hash_entry *h;
7986                   Elf_Internal_Sym *sym;
7987                   asection *sym_sec;
7988                   unsigned char *tls_mask;
7989                   unsigned char tls_set, tls_clear, tls_type = 0;
7990                   bfd_vma value;
7991                   bfd_boolean ok_tprel, is_local;
7992                   long toc_ref_index = 0;
7993                   int expecting_tls_get_addr = 0;
7994                   bfd_boolean ret = FALSE;
7995
7996                   r_symndx = ELF64_R_SYM (rel->r_info);
7997                   if (!get_sym_h (&h, &sym, &sym_sec, &tls_mask, &locsyms,
7998                                   r_symndx, ibfd))
7999                     {
8000                     err_free_rel:
8001                       if (elf_section_data (sec)->relocs != relstart)
8002                         free (relstart);
8003                       if (toc_ref != NULL)
8004                         free (toc_ref);
8005                       if (locsyms != NULL
8006                           && (elf_symtab_hdr (ibfd).contents
8007                               != (unsigned char *) locsyms))
8008                         free (locsyms);
8009                       return ret;
8010                     }
8011
8012                   if (h != NULL)
8013                     {
8014                       if (h->root.type == bfd_link_hash_defined
8015                           || h->root.type == bfd_link_hash_defweak)
8016                         value = h->root.u.def.value;
8017                       else if (h->root.type == bfd_link_hash_undefweak)
8018                         value = 0;
8019                       else
8020                         {
8021                           found_tls_get_addr_arg = 0;
8022                           continue;
8023                         }
8024                     }
8025                   else
8026                     /* Symbols referenced by TLS relocs must be of type
8027                        STT_TLS.  So no need for .opd local sym adjust.  */
8028                     value = sym->st_value;
8029
8030                   ok_tprel = FALSE;
8031                   is_local = FALSE;
8032                   if (h == NULL
8033                       || !h->def_dynamic)
8034                     {
8035                       is_local = TRUE;
8036                       if (h != NULL
8037                           && h->root.type == bfd_link_hash_undefweak)
8038                         ok_tprel = TRUE;
8039                       else
8040                         {
8041                           value += sym_sec->output_offset;
8042                           value += sym_sec->output_section->vma;
8043                           value -= htab->elf.tls_sec->vma;
8044                           ok_tprel = (value + TP_OFFSET + ((bfd_vma) 1 << 31)
8045                                       < (bfd_vma) 1 << 32);
8046                         }
8047                     }
8048
8049                   r_type = ELF64_R_TYPE (rel->r_info);
8050                   /* If this section has old-style __tls_get_addr calls
8051                      without marker relocs, then check that each
8052                      __tls_get_addr call reloc is preceded by a reloc
8053                      that conceivably belongs to the __tls_get_addr arg
8054                      setup insn.  If we don't find matching arg setup
8055                      relocs, don't do any tls optimization.  */
8056                   if (pass == 0
8057                       && sec->has_tls_get_addr_call
8058                       && h != NULL
8059                       && (h == &htab->tls_get_addr->elf
8060                           || h == &htab->tls_get_addr_fd->elf)
8061                       && !found_tls_get_addr_arg
8062                       && is_branch_reloc (r_type))
8063                     {
8064                       info->callbacks->minfo (_("%H __tls_get_addr lost arg, "
8065                                                 "TLS optimization disabled\n"),
8066                                               ibfd, sec, rel->r_offset);
8067                       ret = TRUE;
8068                       goto err_free_rel;
8069                     }
8070
8071                   found_tls_get_addr_arg = 0;
8072                   switch (r_type)
8073                     {
8074                     case R_PPC64_GOT_TLSLD16:
8075                     case R_PPC64_GOT_TLSLD16_LO:
8076                       expecting_tls_get_addr = 1;
8077                       found_tls_get_addr_arg = 1;
8078                       /* Fall thru */
8079
8080                     case R_PPC64_GOT_TLSLD16_HI:
8081                     case R_PPC64_GOT_TLSLD16_HA:
8082                       /* These relocs should never be against a symbol
8083                          defined in a shared lib.  Leave them alone if
8084                          that turns out to be the case.  */
8085                       if (!is_local)
8086                         continue;
8087
8088                       /* LD -> LE */
8089                       tls_set = 0;
8090                       tls_clear = TLS_LD;
8091                       tls_type = TLS_TLS | TLS_LD;
8092                       break;
8093
8094                     case R_PPC64_GOT_TLSGD16:
8095                     case R_PPC64_GOT_TLSGD16_LO:
8096                       expecting_tls_get_addr = 1;
8097                       found_tls_get_addr_arg = 1;
8098                       /* Fall thru */
8099
8100                     case R_PPC64_GOT_TLSGD16_HI:
8101                     case R_PPC64_GOT_TLSGD16_HA:
8102                       if (ok_tprel)
8103                         /* GD -> LE */
8104                         tls_set = 0;
8105                       else
8106                         /* GD -> IE */
8107                         tls_set = TLS_TLS | TLS_TPRELGD;
8108                       tls_clear = TLS_GD;
8109                       tls_type = TLS_TLS | TLS_GD;
8110                       break;
8111
8112                     case R_PPC64_GOT_TPREL16_DS:
8113                     case R_PPC64_GOT_TPREL16_LO_DS:
8114                     case R_PPC64_GOT_TPREL16_HI:
8115                     case R_PPC64_GOT_TPREL16_HA:
8116                       if (ok_tprel)
8117                         {
8118                           /* IE -> LE */
8119                           tls_set = 0;
8120                           tls_clear = TLS_TPREL;
8121                           tls_type = TLS_TLS | TLS_TPREL;
8122                           break;
8123                         }
8124                       continue;
8125
8126                     case R_PPC64_TLSGD:
8127                     case R_PPC64_TLSLD:
8128                       found_tls_get_addr_arg = 1;
8129                       /* Fall thru */
8130
8131                     case R_PPC64_TLS:
8132                     case R_PPC64_TOC16:
8133                     case R_PPC64_TOC16_LO:
8134                       if (sym_sec == NULL || sym_sec != toc)
8135                         continue;
8136
8137                       /* Mark this toc entry as referenced by a TLS
8138                          code sequence.  We can do that now in the
8139                          case of R_PPC64_TLS, and after checking for
8140                          tls_get_addr for the TOC16 relocs.  */
8141                       if (toc_ref == NULL)
8142                         toc_ref = bfd_zmalloc (toc->output_section->rawsize / 8);
8143                       if (toc_ref == NULL)
8144                         goto err_free_rel;
8145
8146                       if (h != NULL)
8147                         value = h->root.u.def.value;
8148                       else
8149                         value = sym->st_value;
8150                       value += rel->r_addend;
8151                       BFD_ASSERT (value < toc->size && value % 8 == 0);
8152                       toc_ref_index = (value + toc->output_offset) / 8;
8153                       if (r_type == R_PPC64_TLS
8154                           || r_type == R_PPC64_TLSGD
8155                           || r_type == R_PPC64_TLSLD)
8156                         {
8157                           toc_ref[toc_ref_index] = 1;
8158                           continue;
8159                         }
8160
8161                       if (pass != 0 && toc_ref[toc_ref_index] == 0)
8162                         continue;
8163
8164                       tls_set = 0;
8165                       tls_clear = 0;
8166                       expecting_tls_get_addr = 2;
8167                       break;
8168
8169                     case R_PPC64_TPREL64:
8170                       if (pass == 0
8171                           || sec != toc
8172                           || toc_ref == NULL
8173                           || !toc_ref[(rel->r_offset + toc->output_offset) / 8])
8174                         continue;
8175                       if (ok_tprel)
8176                         {
8177                           /* IE -> LE */
8178                           tls_set = TLS_EXPLICIT;
8179                           tls_clear = TLS_TPREL;
8180                           break;
8181                         }
8182                       continue;
8183
8184                     case R_PPC64_DTPMOD64:
8185                       if (pass == 0
8186                           || sec != toc
8187                           || toc_ref == NULL
8188                           || !toc_ref[(rel->r_offset + toc->output_offset) / 8])
8189                         continue;
8190                       if (rel + 1 < relend
8191                           && (rel[1].r_info
8192                               == ELF64_R_INFO (r_symndx, R_PPC64_DTPREL64))
8193                           && rel[1].r_offset == rel->r_offset + 8)
8194                         {
8195                           if (ok_tprel)
8196                             /* GD -> LE */
8197                             tls_set = TLS_EXPLICIT | TLS_GD;
8198                           else
8199                             /* GD -> IE */
8200                             tls_set = TLS_EXPLICIT | TLS_GD | TLS_TPRELGD;
8201                           tls_clear = TLS_GD;
8202                         }
8203                       else
8204                         {
8205                           if (!is_local)
8206                             continue;
8207
8208                           /* LD -> LE */
8209                           tls_set = TLS_EXPLICIT;
8210                           tls_clear = TLS_LD;
8211                         }
8212                       break;
8213
8214                     default:
8215                       continue;
8216                     }
8217
8218                   if (pass == 0)
8219                     {
8220                       if (!expecting_tls_get_addr
8221                           || !sec->has_tls_get_addr_call)
8222                         continue;
8223
8224                       if (rel + 1 < relend
8225                           && branch_reloc_hash_match (ibfd, rel + 1,
8226                                                       htab->tls_get_addr,
8227                                                       htab->tls_get_addr_fd))
8228                         {
8229                           if (expecting_tls_get_addr == 2)
8230                             {
8231                               /* Check for toc tls entries.  */
8232                               unsigned char *toc_tls;
8233                               int retval;
8234
8235                               retval = get_tls_mask (&toc_tls, NULL, NULL,
8236                                                      &locsyms,
8237                                                      rel, ibfd);
8238                               if (retval == 0)
8239                                 goto err_free_rel;
8240                               if (toc_tls != NULL)
8241                                 {
8242                                   if ((*toc_tls & (TLS_GD | TLS_LD)) != 0)
8243                                     found_tls_get_addr_arg = 1;
8244                                   if (retval > 1)
8245                                     toc_ref[toc_ref_index] = 1;
8246                                 }
8247                             }
8248                           continue;
8249                         }
8250
8251                       if (expecting_tls_get_addr != 1)
8252                         continue;
8253
8254                       /* Uh oh, we didn't find the expected call.  We
8255                          could just mark this symbol to exclude it
8256                          from tls optimization but it's safer to skip
8257                          the entire optimization.  */
8258                       info->callbacks->minfo (_("%H arg lost __tls_get_addr, "
8259                                                 "TLS optimization disabled\n"),
8260                                               ibfd, sec, rel->r_offset);
8261                       ret = TRUE;
8262                       goto err_free_rel;
8263                     }
8264
8265                   if (expecting_tls_get_addr && htab->tls_get_addr != NULL)
8266                     {
8267                       struct plt_entry *ent;
8268                       for (ent = htab->tls_get_addr->elf.plt.plist;
8269                            ent != NULL;
8270                            ent = ent->next)
8271                         if (ent->addend == 0)
8272                           {
8273                             if (ent->plt.refcount > 0)
8274                               {
8275                                 ent->plt.refcount -= 1;
8276                                 expecting_tls_get_addr = 0;
8277                               }
8278                             break;
8279                           }
8280                     }
8281
8282                   if (expecting_tls_get_addr && htab->tls_get_addr_fd != NULL)
8283                     {
8284                       struct plt_entry *ent;
8285                       for (ent = htab->tls_get_addr_fd->elf.plt.plist;
8286                            ent != NULL;
8287                            ent = ent->next)
8288                         if (ent->addend == 0)
8289                           {
8290                             if (ent->plt.refcount > 0)
8291                               ent->plt.refcount -= 1;
8292                             break;
8293                           }
8294                     }
8295
8296                   if (tls_clear == 0)
8297                     continue;
8298
8299                   if ((tls_set & TLS_EXPLICIT) == 0)
8300                     {
8301                       struct got_entry *ent;
8302
8303                       /* Adjust got entry for this reloc.  */
8304                       if (h != NULL)
8305                         ent = h->got.glist;
8306                       else
8307                         ent = elf_local_got_ents (ibfd)[r_symndx];
8308
8309                       for (; ent != NULL; ent = ent->next)
8310                         if (ent->addend == rel->r_addend
8311                             && ent->owner == ibfd
8312                             && ent->tls_type == tls_type)
8313                           break;
8314                       if (ent == NULL)
8315                         abort ();
8316
8317                       if (tls_set == 0)
8318                         {
8319                           /* We managed to get rid of a got entry.  */
8320                           if (ent->got.refcount > 0)
8321                             ent->got.refcount -= 1;
8322                         }
8323                     }
8324                   else
8325                     {
8326                       /* If we got rid of a DTPMOD/DTPREL reloc pair then
8327                          we'll lose one or two dyn relocs.  */
8328                       if (!dec_dynrel_count (rel->r_info, sec, info,
8329                                              NULL, h, sym))
8330                         return FALSE;
8331
8332                       if (tls_set == (TLS_EXPLICIT | TLS_GD))
8333                         {
8334                           if (!dec_dynrel_count ((rel + 1)->r_info, sec, info,
8335                                                  NULL, h, sym))
8336                             return FALSE;
8337                         }
8338                     }
8339
8340                   *tls_mask |= tls_set;
8341                   *tls_mask &= ~tls_clear;
8342                 }
8343
8344               if (elf_section_data (sec)->relocs != relstart)
8345                 free (relstart);
8346             }
8347
8348         if (locsyms != NULL
8349             && (elf_symtab_hdr (ibfd).contents != (unsigned char *) locsyms))
8350           {
8351             if (!info->keep_memory)
8352               free (locsyms);
8353             else
8354               elf_symtab_hdr (ibfd).contents = (unsigned char *) locsyms;
8355           }
8356       }
8357
8358   if (toc_ref != NULL)
8359     free (toc_ref);
8360   return TRUE;
8361 }
8362
8363 /* Called via elf_link_hash_traverse from ppc64_elf_edit_toc to adjust
8364    the values of any global symbols in a toc section that has been
8365    edited.  Globals in toc sections should be a rarity, so this function
8366    sets a flag if any are found in toc sections other than the one just
8367    edited, so that futher hash table traversals can be avoided.  */
8368
8369 struct adjust_toc_info
8370 {
8371   asection *toc;
8372   unsigned long *skip;
8373   bfd_boolean global_toc_syms;
8374 };
8375
8376 enum toc_skip_enum { ref_from_discarded = 1, can_optimize = 2 };
8377
8378 static bfd_boolean
8379 adjust_toc_syms (struct elf_link_hash_entry *h, void *inf)
8380 {
8381   struct ppc_link_hash_entry *eh;
8382   struct adjust_toc_info *toc_inf = (struct adjust_toc_info *) inf;
8383   unsigned long i;
8384
8385   if (h->root.type != bfd_link_hash_defined
8386       && h->root.type != bfd_link_hash_defweak)
8387     return TRUE;
8388
8389   eh = (struct ppc_link_hash_entry *) h;
8390   if (eh->adjust_done)
8391     return TRUE;
8392
8393   if (eh->elf.root.u.def.section == toc_inf->toc)
8394     {
8395       if (eh->elf.root.u.def.value > toc_inf->toc->rawsize)
8396         i = toc_inf->toc->rawsize >> 3;
8397       else
8398         i = eh->elf.root.u.def.value >> 3;
8399
8400       if ((toc_inf->skip[i] & (ref_from_discarded | can_optimize)) != 0)
8401         {
8402           (*_bfd_error_handler)
8403             (_("%s defined on removed toc entry"), eh->elf.root.root.string);
8404           do
8405             ++i;
8406           while ((toc_inf->skip[i] & (ref_from_discarded | can_optimize)) != 0);
8407           eh->elf.root.u.def.value = (bfd_vma) i << 3;
8408         }
8409
8410       eh->elf.root.u.def.value -= toc_inf->skip[i];
8411       eh->adjust_done = 1;
8412     }
8413   else if (strcmp (eh->elf.root.u.def.section->name, ".toc") == 0)
8414     toc_inf->global_toc_syms = TRUE;
8415
8416   return TRUE;
8417 }
8418
8419 /* Return TRUE iff INSN is one we expect on a _LO variety toc/got reloc.  */
8420
8421 static bfd_boolean
8422 ok_lo_toc_insn (unsigned int insn)
8423 {
8424   return ((insn & (0x3f << 26)) == 14u << 26 /* addi */
8425           || (insn & (0x3f << 26)) == 32u << 26 /* lwz */
8426           || (insn & (0x3f << 26)) == 34u << 26 /* lbz */
8427           || (insn & (0x3f << 26)) == 36u << 26 /* stw */
8428           || (insn & (0x3f << 26)) == 38u << 26 /* stb */
8429           || (insn & (0x3f << 26)) == 40u << 26 /* lhz */
8430           || (insn & (0x3f << 26)) == 42u << 26 /* lha */
8431           || (insn & (0x3f << 26)) == 44u << 26 /* sth */
8432           || (insn & (0x3f << 26)) == 46u << 26 /* lmw */
8433           || (insn & (0x3f << 26)) == 47u << 26 /* stmw */
8434           || (insn & (0x3f << 26)) == 48u << 26 /* lfs */
8435           || (insn & (0x3f << 26)) == 50u << 26 /* lfd */
8436           || (insn & (0x3f << 26)) == 52u << 26 /* stfs */
8437           || (insn & (0x3f << 26)) == 54u << 26 /* stfd */
8438           || ((insn & (0x3f << 26)) == 58u << 26 /* lwa,ld,lmd */
8439               && (insn & 3) != 1)
8440           || ((insn & (0x3f << 26)) == 62u << 26 /* std, stmd */
8441               && ((insn & 3) == 0 || (insn & 3) == 3))
8442           || (insn & (0x3f << 26)) == 12u << 26 /* addic */);
8443 }
8444
8445 /* Examine all relocs referencing .toc sections in order to remove
8446    unused .toc entries.  */
8447
8448 bfd_boolean
8449 ppc64_elf_edit_toc (struct bfd_link_info *info)
8450 {
8451   bfd *ibfd;
8452   struct adjust_toc_info toc_inf;
8453   struct ppc_link_hash_table *htab = ppc_hash_table (info);
8454
8455   htab->do_toc_opt = 1;
8456   toc_inf.global_toc_syms = TRUE;
8457   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link_next)
8458     {
8459       asection *toc, *sec;
8460       Elf_Internal_Shdr *symtab_hdr;
8461       Elf_Internal_Sym *local_syms;
8462       Elf_Internal_Rela *relstart, *rel, *toc_relocs;
8463       unsigned long *skip, *drop;
8464       unsigned char *used;
8465       unsigned char *keep, last, some_unused;
8466
8467       if (!is_ppc64_elf (ibfd))
8468         continue;
8469
8470       toc = bfd_get_section_by_name (ibfd, ".toc");
8471       if (toc == NULL
8472           || toc->size == 0
8473           || toc->sec_info_type == SEC_INFO_TYPE_JUST_SYMS
8474           || discarded_section (toc))
8475         continue;
8476
8477       toc_relocs = NULL;
8478       local_syms = NULL;
8479       symtab_hdr = &elf_symtab_hdr (ibfd);
8480
8481       /* Look at sections dropped from the final link.  */
8482       skip = NULL;
8483       relstart = NULL;
8484       for (sec = ibfd->sections; sec != NULL; sec = sec->next)
8485         {
8486           if (sec->reloc_count == 0
8487               || !discarded_section (sec)
8488               || get_opd_info (sec)
8489               || (sec->flags & SEC_ALLOC) == 0
8490               || (sec->flags & SEC_DEBUGGING) != 0)
8491             continue;
8492
8493           relstart = _bfd_elf_link_read_relocs (ibfd, sec, NULL, NULL, FALSE);
8494           if (relstart == NULL)
8495             goto error_ret;
8496
8497           /* Run through the relocs to see which toc entries might be
8498              unused.  */
8499           for (rel = relstart; rel < relstart + sec->reloc_count; ++rel)
8500             {
8501               enum elf_ppc64_reloc_type r_type;
8502               unsigned long r_symndx;
8503               asection *sym_sec;
8504               struct elf_link_hash_entry *h;
8505               Elf_Internal_Sym *sym;
8506               bfd_vma val;
8507
8508               r_type = ELF64_R_TYPE (rel->r_info);
8509               switch (r_type)
8510                 {
8511                 default:
8512                   continue;
8513
8514                 case R_PPC64_TOC16:
8515                 case R_PPC64_TOC16_LO:
8516                 case R_PPC64_TOC16_HI:
8517                 case R_PPC64_TOC16_HA:
8518                 case R_PPC64_TOC16_DS:
8519                 case R_PPC64_TOC16_LO_DS:
8520                   break;
8521                 }
8522
8523               r_symndx = ELF64_R_SYM (rel->r_info);
8524               if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms,
8525                               r_symndx, ibfd))
8526                 goto error_ret;
8527
8528               if (sym_sec != toc)
8529                 continue;
8530
8531               if (h != NULL)
8532                 val = h->root.u.def.value;
8533               else
8534                 val = sym->st_value;
8535               val += rel->r_addend;
8536
8537               if (val >= toc->size)
8538                 continue;
8539
8540               /* Anything in the toc ought to be aligned to 8 bytes.
8541                  If not, don't mark as unused.  */
8542               if (val & 7)
8543                 continue;
8544
8545               if (skip == NULL)
8546                 {
8547                   skip = bfd_zmalloc (sizeof (*skip) * (toc->size + 15) / 8);
8548                   if (skip == NULL)
8549                     goto error_ret;
8550                 }
8551
8552               skip[val >> 3] = ref_from_discarded;
8553             }
8554
8555           if (elf_section_data (sec)->relocs != relstart)
8556             free (relstart);
8557         }
8558
8559       /* For largetoc loads of address constants, we can convert
8560          .  addis rx,2,addr@got@ha
8561          .  ld ry,addr@got@l(rx)
8562          to
8563          .  addis rx,2,addr@toc@ha
8564          .  addi ry,rx,addr@toc@l
8565          when addr is within 2G of the toc pointer.  This then means
8566          that the word storing "addr" in the toc is no longer needed.  */
8567
8568       if (!ppc64_elf_tdata (ibfd)->has_small_toc_reloc
8569           && toc->output_section->rawsize < (bfd_vma) 1 << 31
8570           && toc->reloc_count != 0)
8571         {
8572           /* Read toc relocs.  */
8573           toc_relocs = _bfd_elf_link_read_relocs (ibfd, toc, NULL, NULL,
8574                                                   info->keep_memory);
8575           if (toc_relocs == NULL)
8576             goto error_ret;
8577
8578           for (rel = toc_relocs; rel < toc_relocs + toc->reloc_count; ++rel)
8579             {
8580               enum elf_ppc64_reloc_type r_type;
8581               unsigned long r_symndx;
8582               asection *sym_sec;
8583               struct elf_link_hash_entry *h;
8584               Elf_Internal_Sym *sym;
8585               bfd_vma val, addr;
8586
8587               r_type = ELF64_R_TYPE (rel->r_info);
8588               if (r_type != R_PPC64_ADDR64)
8589                 continue;
8590
8591               r_symndx = ELF64_R_SYM (rel->r_info);
8592               if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms,
8593                               r_symndx, ibfd))
8594                 goto error_ret;
8595
8596               if (sym_sec == NULL
8597                   || discarded_section (sym_sec))
8598                 continue;
8599
8600               if (!SYMBOL_CALLS_LOCAL (info, h))
8601                 continue;
8602
8603               if (h != NULL)
8604                 {
8605                   if (h->type == STT_GNU_IFUNC)
8606                     continue;
8607                   val = h->root.u.def.value;
8608                 }
8609               else
8610                 {
8611                   if (ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC)
8612                     continue;
8613                   val = sym->st_value;
8614                 }
8615               val += rel->r_addend;
8616               val += sym_sec->output_section->vma + sym_sec->output_offset;
8617
8618               /* We don't yet know the exact toc pointer value, but we
8619                  know it will be somewhere in the toc section.  Don't
8620                  optimize if the difference from any possible toc
8621                  pointer is outside [ff..f80008000, 7fff7fff].  */
8622               addr = toc->output_section->vma + TOC_BASE_OFF;
8623               if (val - addr + (bfd_vma) 0x80008000 >= (bfd_vma) 1 << 32)
8624                 continue;
8625
8626               addr = toc->output_section->vma + toc->output_section->rawsize;
8627               if (val - addr + (bfd_vma) 0x80008000 >= (bfd_vma) 1 << 32)
8628                 continue;
8629
8630               if (skip == NULL)
8631                 {
8632                   skip = bfd_zmalloc (sizeof (*skip) * (toc->size + 15) / 8);
8633                   if (skip == NULL)
8634                     goto error_ret;
8635                 }
8636
8637               skip[rel->r_offset >> 3]
8638                 |= can_optimize | ((rel - toc_relocs) << 2);
8639             }
8640         }
8641
8642       if (skip == NULL)
8643         continue;
8644
8645       used = bfd_zmalloc (sizeof (*used) * (toc->size + 7) / 8);
8646       if (used == NULL)
8647         {
8648         error_ret:
8649           if (local_syms != NULL
8650               && symtab_hdr->contents != (unsigned char *) local_syms)
8651             free (local_syms);
8652           if (sec != NULL
8653               && relstart != NULL
8654               && elf_section_data (sec)->relocs != relstart)
8655             free (relstart);
8656           if (toc_relocs != NULL
8657               && elf_section_data (toc)->relocs != toc_relocs)
8658             free (toc_relocs);
8659           if (skip != NULL)
8660             free (skip);
8661           return FALSE;
8662         }
8663
8664       /* Now check all kept sections that might reference the toc.
8665          Check the toc itself last.  */
8666       for (sec = (ibfd->sections == toc && toc->next ? toc->next
8667                   : ibfd->sections);
8668            sec != NULL;
8669            sec = (sec == toc ? NULL
8670                   : sec->next == NULL ? toc
8671                   : sec->next == toc && toc->next ? toc->next
8672                   : sec->next))
8673         {
8674           int repeat;
8675
8676           if (sec->reloc_count == 0
8677               || discarded_section (sec)
8678               || get_opd_info (sec)
8679               || (sec->flags & SEC_ALLOC) == 0
8680               || (sec->flags & SEC_DEBUGGING) != 0)
8681             continue;
8682
8683           relstart = _bfd_elf_link_read_relocs (ibfd, sec, NULL, NULL,
8684                                                 info->keep_memory);
8685           if (relstart == NULL)
8686             goto error_ret;
8687
8688           /* Mark toc entries referenced as used.  */
8689           do
8690             {
8691               repeat = 0;
8692               for (rel = relstart; rel < relstart + sec->reloc_count; ++rel)
8693                 {
8694                   enum elf_ppc64_reloc_type r_type;
8695                   unsigned long r_symndx;
8696                   asection *sym_sec;
8697                   struct elf_link_hash_entry *h;
8698                   Elf_Internal_Sym *sym;
8699                   bfd_vma val;
8700                   enum {no_check, check_lo, check_ha} insn_check;
8701
8702                   r_type = ELF64_R_TYPE (rel->r_info);
8703                   switch (r_type)
8704                     {
8705                     default:
8706                       insn_check = no_check;
8707                       break;
8708
8709                     case R_PPC64_GOT_TLSLD16_HA:
8710                     case R_PPC64_GOT_TLSGD16_HA:
8711                     case R_PPC64_GOT_TPREL16_HA:
8712                     case R_PPC64_GOT_DTPREL16_HA:
8713                     case R_PPC64_GOT16_HA:
8714                     case R_PPC64_TOC16_HA:
8715                       insn_check = check_ha;
8716                       break;
8717
8718                     case R_PPC64_GOT_TLSLD16_LO:
8719                     case R_PPC64_GOT_TLSGD16_LO:
8720                     case R_PPC64_GOT_TPREL16_LO_DS:
8721                     case R_PPC64_GOT_DTPREL16_LO_DS:
8722                     case R_PPC64_GOT16_LO:
8723                     case R_PPC64_GOT16_LO_DS:
8724                     case R_PPC64_TOC16_LO:
8725                     case R_PPC64_TOC16_LO_DS:
8726                       insn_check = check_lo;
8727                       break;
8728                     }
8729
8730                   if (insn_check != no_check)
8731                     {
8732                       bfd_vma off = rel->r_offset & ~3;
8733                       unsigned char buf[4];
8734                       unsigned int insn;
8735
8736                       if (!bfd_get_section_contents (ibfd, sec, buf, off, 4))
8737                         {
8738                           free (used);
8739                           goto error_ret;
8740                         }
8741                       insn = bfd_get_32 (ibfd, buf);
8742                       if (insn_check == check_lo
8743                           ? !ok_lo_toc_insn (insn)
8744                           : ((insn & ((0x3f << 26) | 0x1f << 16))
8745                              != ((15u << 26) | (2 << 16)) /* addis rt,2,imm */))
8746                         {
8747                           char str[12];
8748
8749                           ppc64_elf_tdata (ibfd)->unexpected_toc_insn = 1;
8750                           sprintf (str, "%#08x", insn);
8751                           info->callbacks->einfo
8752                             (_("%P: %H: toc optimization is not supported for"
8753                                " %s instruction.\n"),
8754                              ibfd, sec, rel->r_offset & ~3, str);
8755                         }
8756                     }
8757
8758                   switch (r_type)
8759                     {
8760                     case R_PPC64_TOC16:
8761                     case R_PPC64_TOC16_LO:
8762                     case R_PPC64_TOC16_HI:
8763                     case R_PPC64_TOC16_HA:
8764                     case R_PPC64_TOC16_DS:
8765                     case R_PPC64_TOC16_LO_DS:
8766                       /* In case we're taking addresses of toc entries.  */
8767                     case R_PPC64_ADDR64:
8768                       break;
8769
8770                     default:
8771                       continue;
8772                     }
8773
8774                   r_symndx = ELF64_R_SYM (rel->r_info);
8775                   if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms,
8776                                   r_symndx, ibfd))
8777                     {
8778                       free (used);
8779                       goto error_ret;
8780                     }
8781
8782                   if (sym_sec != toc)
8783                     continue;
8784
8785                   if (h != NULL)
8786                     val = h->root.u.def.value;
8787                   else
8788                     val = sym->st_value;
8789                   val += rel->r_addend;
8790
8791                   if (val >= toc->size)
8792                     continue;
8793
8794                   if ((skip[val >> 3] & can_optimize) != 0)
8795                     {
8796                       bfd_vma off;
8797                       unsigned char opc;
8798
8799                       switch (r_type)
8800                         {
8801                         case R_PPC64_TOC16_HA:
8802                           break;
8803
8804                         case R_PPC64_TOC16_LO_DS:
8805                           off = rel->r_offset;
8806                           off += (bfd_big_endian (ibfd) ? -2 : 3);
8807                           if (!bfd_get_section_contents (ibfd, sec, &opc,
8808                                                          off, 1))
8809                             {
8810                               free (used);
8811                               goto error_ret;
8812                             }
8813                           if ((opc & (0x3f << 2)) == (58u << 2))
8814                             break;
8815                           /* Fall thru */
8816
8817                         default:
8818                           /* Wrong sort of reloc, or not a ld.  We may
8819                              as well clear ref_from_discarded too.  */
8820                           skip[val >> 3] = 0;
8821                         }
8822                     }
8823
8824                   if (sec != toc)
8825                     used[val >> 3] = 1;
8826                   /* For the toc section, we only mark as used if this
8827                      entry itself isn't unused.  */
8828                   else if ((used[rel->r_offset >> 3]
8829                             || !(skip[rel->r_offset >> 3] & ref_from_discarded))
8830                            && !used[val >> 3])
8831                     {
8832                       /* Do all the relocs again, to catch reference
8833                          chains.  */
8834                       repeat = 1;
8835                       used[val >> 3] = 1;
8836                     }
8837                 }
8838             }
8839           while (repeat);
8840
8841           if (elf_section_data (sec)->relocs != relstart)
8842             free (relstart);
8843         }
8844
8845       /* Merge the used and skip arrays.  Assume that TOC
8846          doublewords not appearing as either used or unused belong
8847          to to an entry more than one doubleword in size.  */
8848       for (drop = skip, keep = used, last = 0, some_unused = 0;
8849            drop < skip + (toc->size + 7) / 8;
8850            ++drop, ++keep)
8851         {
8852           if (*keep)
8853             {
8854               *drop &= ~ref_from_discarded;
8855               if ((*drop & can_optimize) != 0)
8856                 some_unused = 1;
8857               last = 0;
8858             }
8859           else if ((*drop & ref_from_discarded) != 0)
8860             {
8861               some_unused = 1;
8862               last = ref_from_discarded;
8863             }
8864           else
8865             *drop = last;
8866         }
8867
8868       free (used);
8869
8870       if (some_unused)
8871         {
8872           bfd_byte *contents, *src;
8873           unsigned long off;
8874           Elf_Internal_Sym *sym;
8875           bfd_boolean local_toc_syms = FALSE;
8876
8877           /* Shuffle the toc contents, and at the same time convert the
8878              skip array from booleans into offsets.  */
8879           if (!bfd_malloc_and_get_section (ibfd, toc, &contents))
8880             goto error_ret;
8881
8882           elf_section_data (toc)->this_hdr.contents = contents;
8883
8884           for (src = contents, off = 0, drop = skip;
8885                src < contents + toc->size;
8886                src += 8, ++drop)
8887             {
8888               if ((*drop & (can_optimize | ref_from_discarded)) != 0)
8889                 off += 8;
8890               else if (off != 0)
8891                 {
8892                   *drop = off;
8893                   memcpy (src - off, src, 8);
8894                 }
8895             }
8896           *drop = off;
8897           toc->rawsize = toc->size;
8898           toc->size = src - contents - off;
8899
8900           /* Adjust addends for relocs against the toc section sym,
8901              and optimize any accesses we can.  */
8902           for (sec = ibfd->sections; sec != NULL; sec = sec->next)
8903             {
8904               if (sec->reloc_count == 0
8905                   || discarded_section (sec))
8906                 continue;
8907
8908               relstart = _bfd_elf_link_read_relocs (ibfd, sec, NULL, NULL,
8909                                                     info->keep_memory);
8910               if (relstart == NULL)
8911                 goto error_ret;
8912
8913               for (rel = relstart; rel < relstart + sec->reloc_count; ++rel)
8914                 {
8915                   enum elf_ppc64_reloc_type r_type;
8916                   unsigned long r_symndx;
8917                   asection *sym_sec;
8918                   struct elf_link_hash_entry *h;
8919                   bfd_vma val;
8920
8921                   r_type = ELF64_R_TYPE (rel->r_info);
8922                   switch (r_type)
8923                     {
8924                     default:
8925                       continue;
8926
8927                     case R_PPC64_TOC16:
8928                     case R_PPC64_TOC16_LO:
8929                     case R_PPC64_TOC16_HI:
8930                     case R_PPC64_TOC16_HA:
8931                     case R_PPC64_TOC16_DS:
8932                     case R_PPC64_TOC16_LO_DS:
8933                     case R_PPC64_ADDR64:
8934                       break;
8935                     }
8936
8937                   r_symndx = ELF64_R_SYM (rel->r_info);
8938                   if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms,
8939                                   r_symndx, ibfd))
8940                     goto error_ret;
8941
8942                   if (sym_sec != toc)
8943                     continue;
8944
8945                   if (h != NULL)
8946                     val = h->root.u.def.value;
8947                   else
8948                     {
8949                       val = sym->st_value;
8950                       if (val != 0)
8951                         local_toc_syms = TRUE;
8952                     }
8953
8954                   val += rel->r_addend;
8955
8956                   if (val > toc->rawsize)
8957                     val = toc->rawsize;
8958                   else if ((skip[val >> 3] & ref_from_discarded) != 0)
8959                     continue;
8960                   else if ((skip[val >> 3] & can_optimize) != 0)
8961                     {
8962                       Elf_Internal_Rela *tocrel
8963                         = toc_relocs + (skip[val >> 3] >> 2);
8964                       unsigned long tsym = ELF64_R_SYM (tocrel->r_info);
8965
8966                       switch (r_type)
8967                         {
8968                         case R_PPC64_TOC16_HA:
8969                           rel->r_info = ELF64_R_INFO (tsym, R_PPC64_TOC16_HA);
8970                           break;
8971
8972                         case R_PPC64_TOC16_LO_DS:
8973                           rel->r_info = ELF64_R_INFO (tsym, R_PPC64_LO_DS_OPT);
8974                           break;
8975
8976                         default:
8977                           if (!ppc64_elf_howto_table[R_PPC64_ADDR32])
8978                             ppc_howto_init ();
8979                           info->callbacks->einfo
8980                             (_("%P: %H: %s references "
8981                                "optimized away TOC entry\n"),
8982                              ibfd, sec, rel->r_offset,
8983                              ppc64_elf_howto_table[r_type]->name);
8984                           bfd_set_error (bfd_error_bad_value);
8985                           goto error_ret;
8986                         }
8987                       rel->r_addend = tocrel->r_addend;
8988                       elf_section_data (sec)->relocs = relstart;
8989                       continue;
8990                     }
8991
8992                   if (h != NULL || sym->st_value != 0)
8993                     continue;
8994
8995                   rel->r_addend -= skip[val >> 3];
8996                   elf_section_data (sec)->relocs = relstart;
8997                 }
8998
8999               if (elf_section_data (sec)->relocs != relstart)
9000                 free (relstart);
9001             }
9002
9003           /* We shouldn't have local or global symbols defined in the TOC,
9004              but handle them anyway.  */
9005           if (local_syms != NULL)
9006             for (sym = local_syms;
9007                  sym < local_syms + symtab_hdr->sh_info;
9008                  ++sym)
9009               if (sym->st_value != 0
9010                   && bfd_section_from_elf_index (ibfd, sym->st_shndx) == toc)
9011                 {
9012                   unsigned long i;
9013
9014                   if (sym->st_value > toc->rawsize)
9015                     i = toc->rawsize >> 3;
9016                   else
9017                     i = sym->st_value >> 3;
9018
9019                   if ((skip[i] & (ref_from_discarded | can_optimize)) != 0)
9020                     {
9021                       if (local_toc_syms)
9022                         (*_bfd_error_handler)
9023                           (_("%s defined on removed toc entry"),
9024                            bfd_elf_sym_name (ibfd, symtab_hdr, sym, NULL));
9025                       do
9026                         ++i;
9027                       while ((skip[i] & (ref_from_discarded | can_optimize)));
9028                       sym->st_value = (bfd_vma) i << 3;
9029                     }
9030
9031                   sym->st_value -= skip[i];
9032                   symtab_hdr->contents = (unsigned char *) local_syms;
9033                 }
9034
9035           /* Adjust any global syms defined in this toc input section.  */
9036           if (toc_inf.global_toc_syms)
9037             {
9038               toc_inf.toc = toc;
9039               toc_inf.skip = skip;
9040               toc_inf.global_toc_syms = FALSE;
9041               elf_link_hash_traverse (elf_hash_table (info), adjust_toc_syms,
9042                                       &toc_inf);
9043             }
9044
9045           if (toc->reloc_count != 0)
9046             {
9047               Elf_Internal_Shdr *rel_hdr;
9048               Elf_Internal_Rela *wrel;
9049               bfd_size_type sz;
9050
9051               /* Remove unused toc relocs, and adjust those we keep.  */
9052               if (toc_relocs == NULL)
9053                 toc_relocs = _bfd_elf_link_read_relocs (ibfd, toc, NULL, NULL,
9054                                                         info->keep_memory);
9055               if (toc_relocs == NULL)
9056                 goto error_ret;
9057
9058               wrel = toc_relocs;
9059               for (rel = toc_relocs; rel < toc_relocs + toc->reloc_count; ++rel)
9060                 if ((skip[rel->r_offset >> 3]
9061                      & (ref_from_discarded | can_optimize)) == 0)
9062                   {
9063                     wrel->r_offset = rel->r_offset - skip[rel->r_offset >> 3];
9064                     wrel->r_info = rel->r_info;
9065                     wrel->r_addend = rel->r_addend;
9066                     ++wrel;
9067                   }
9068                 else if (!dec_dynrel_count (rel->r_info, toc, info,
9069                                             &local_syms, NULL, NULL))
9070                   goto error_ret;
9071
9072               elf_section_data (toc)->relocs = toc_relocs;
9073               toc->reloc_count = wrel - toc_relocs;
9074               rel_hdr = _bfd_elf_single_rel_hdr (toc);
9075               sz = rel_hdr->sh_entsize;
9076               rel_hdr->sh_size = toc->reloc_count * sz;
9077             }
9078         }
9079       else if (toc_relocs != NULL
9080                && elf_section_data (toc)->relocs != toc_relocs)
9081         free (toc_relocs);
9082
9083       if (local_syms != NULL
9084           && symtab_hdr->contents != (unsigned char *) local_syms)
9085         {
9086           if (!info->keep_memory)
9087             free (local_syms);
9088           else
9089             symtab_hdr->contents = (unsigned char *) local_syms;
9090         }
9091       free (skip);
9092     }
9093
9094   return TRUE;
9095 }
9096
9097 /* Return true iff input section I references the TOC using
9098    instructions limited to +/-32k offsets.  */
9099
9100 bfd_boolean
9101 ppc64_elf_has_small_toc_reloc (asection *i)
9102 {
9103   return (is_ppc64_elf (i->owner)
9104           && ppc64_elf_tdata (i->owner)->has_small_toc_reloc);
9105 }
9106
9107 /* Allocate space for one GOT entry.  */
9108
9109 static void
9110 allocate_got (struct elf_link_hash_entry *h,
9111               struct bfd_link_info *info,
9112               struct got_entry *gent)
9113 {
9114   struct ppc_link_hash_table *htab = ppc_hash_table (info);
9115   bfd_boolean dyn;
9116   struct ppc_link_hash_entry *eh = (struct ppc_link_hash_entry *) h;
9117   int entsize = (gent->tls_type & eh->tls_mask & (TLS_GD | TLS_LD)
9118                  ? 16 : 8);
9119   int rentsize = (gent->tls_type & eh->tls_mask & TLS_GD
9120                   ? 2 : 1) * sizeof (Elf64_External_Rela);
9121   asection *got = ppc64_elf_tdata (gent->owner)->got;
9122
9123   gent->got.offset = got->size;
9124   got->size += entsize;
9125
9126   dyn = htab->elf.dynamic_sections_created;
9127   if (h->type == STT_GNU_IFUNC)
9128     {
9129       htab->reliplt->size += rentsize;
9130       htab->got_reli_size += rentsize;
9131     }
9132   else if ((info->shared
9133             || WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, 0, h))
9134            && (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
9135                || h->root.type != bfd_link_hash_undefweak))
9136     {
9137       asection *relgot = ppc64_elf_tdata (gent->owner)->relgot;
9138       relgot->size += rentsize;
9139     }
9140 }
9141
9142 /* This function merges got entries in the same toc group.  */
9143
9144 static void
9145 merge_got_entries (struct got_entry **pent)
9146 {
9147   struct got_entry *ent, *ent2;
9148
9149   for (ent = *pent; ent != NULL; ent = ent->next)
9150     if (!ent->is_indirect)
9151       for (ent2 = ent->next; ent2 != NULL; ent2 = ent2->next)
9152         if (!ent2->is_indirect
9153             && ent2->addend == ent->addend
9154             && ent2->tls_type == ent->tls_type
9155             && elf_gp (ent2->owner) == elf_gp (ent->owner))
9156           {
9157             ent2->is_indirect = TRUE;
9158             ent2->got.ent = ent;
9159           }
9160 }
9161
9162 /* Allocate space in .plt, .got and associated reloc sections for
9163    dynamic relocs.  */
9164
9165 static bfd_boolean
9166 allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
9167 {
9168   struct bfd_link_info *info;
9169   struct ppc_link_hash_table *htab;
9170   asection *s;
9171   struct ppc_link_hash_entry *eh;
9172   struct elf_dyn_relocs *p;
9173   struct got_entry **pgent, *gent;
9174
9175   if (h->root.type == bfd_link_hash_indirect)
9176     return TRUE;
9177
9178   info = (struct bfd_link_info *) inf;
9179   htab = ppc_hash_table (info);
9180   if (htab == NULL)
9181     return FALSE;
9182
9183   if ((htab->elf.dynamic_sections_created
9184        && h->dynindx != -1
9185        && WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, info->shared, h))
9186       || h->type == STT_GNU_IFUNC)
9187     {
9188       struct plt_entry *pent;
9189       bfd_boolean doneone = FALSE;
9190       for (pent = h->plt.plist; pent != NULL; pent = pent->next)
9191         if (pent->plt.refcount > 0)
9192           {
9193             if (!htab->elf.dynamic_sections_created
9194                 || h->dynindx == -1)
9195               {
9196                 s = htab->iplt;
9197                 pent->plt.offset = s->size;
9198                 s->size += PLT_ENTRY_SIZE;
9199                 s = htab->reliplt;
9200               }
9201             else
9202               {
9203                 /* If this is the first .plt entry, make room for the special
9204                    first entry.  */
9205                 s = htab->plt;
9206                 if (s->size == 0)
9207                   s->size += PLT_INITIAL_ENTRY_SIZE;
9208
9209                 pent->plt.offset = s->size;
9210
9211                 /* Make room for this entry.  */
9212                 s->size += PLT_ENTRY_SIZE;
9213
9214                 /* Make room for the .glink code.  */
9215                 s = htab->glink;
9216                 if (s->size == 0)
9217                   s->size += GLINK_CALL_STUB_SIZE;
9218                 /* We need bigger stubs past index 32767.  */
9219                 if (s->size >= GLINK_CALL_STUB_SIZE + 32768*2*4)
9220                   s->size += 4;
9221                 s->size += 2*4;
9222
9223                 /* We also need to make an entry in the .rela.plt section.  */
9224                 s = htab->relplt;
9225               }
9226             s->size += sizeof (Elf64_External_Rela);
9227             doneone = TRUE;
9228           }
9229         else
9230           pent->plt.offset = (bfd_vma) -1;
9231       if (!doneone)
9232         {
9233           h->plt.plist = NULL;
9234           h->needs_plt = 0;
9235         }
9236     }
9237   else
9238     {
9239       h->plt.plist = NULL;
9240       h->needs_plt = 0;
9241     }
9242
9243   eh = (struct ppc_link_hash_entry *) h;
9244   /* Run through the TLS GD got entries first if we're changing them
9245      to TPREL.  */
9246   if ((eh->tls_mask & TLS_TPRELGD) != 0)
9247     for (gent = h->got.glist; gent != NULL; gent = gent->next)
9248       if (gent->got.refcount > 0
9249           && (gent->tls_type & TLS_GD) != 0)
9250         {
9251           /* This was a GD entry that has been converted to TPREL.  If
9252              there happens to be a TPREL entry we can use that one.  */
9253           struct got_entry *ent;
9254           for (ent = h->got.glist; ent != NULL; ent = ent->next)
9255             if (ent->got.refcount > 0
9256                 && (ent->tls_type & TLS_TPREL) != 0
9257                 && ent->addend == gent->addend
9258                 && ent->owner == gent->owner)
9259               {
9260                 gent->got.refcount = 0;
9261                 break;
9262               }
9263
9264           /* If not, then we'll be using our own TPREL entry.  */
9265           if (gent->got.refcount != 0)
9266             gent->tls_type = TLS_TLS | TLS_TPREL;
9267         }
9268
9269   /* Remove any list entry that won't generate a word in the GOT before
9270      we call merge_got_entries.  Otherwise we risk merging to empty
9271      entries.  */
9272   pgent = &h->got.glist;
9273   while ((gent = *pgent) != NULL)
9274     if (gent->got.refcount > 0)
9275       {
9276         if ((gent->tls_type & TLS_LD) != 0
9277             && !h->def_dynamic)
9278           {
9279             ppc64_tlsld_got (gent->owner)->got.refcount += 1;
9280             *pgent = gent->next;
9281           }
9282         else
9283           pgent = &gent->next;
9284       }
9285     else
9286       *pgent = gent->next;
9287
9288   if (!htab->do_multi_toc)
9289     merge_got_entries (&h->got.glist);
9290
9291   for (gent = h->got.glist; gent != NULL; gent = gent->next)
9292     if (!gent->is_indirect)
9293       {
9294         /* Make sure this symbol is output as a dynamic symbol.
9295            Undefined weak syms won't yet be marked as dynamic,
9296            nor will all TLS symbols.  */
9297         if (h->dynindx == -1
9298             && !h->forced_local
9299             && h->type != STT_GNU_IFUNC
9300             && htab->elf.dynamic_sections_created)
9301           {
9302             if (! bfd_elf_link_record_dynamic_symbol (info, h))
9303               return FALSE;
9304           }
9305
9306         if (!is_ppc64_elf (gent->owner))
9307           abort ();
9308
9309         allocate_got (h, info, gent);
9310       }
9311
9312   if (eh->dyn_relocs == NULL
9313       || (!htab->elf.dynamic_sections_created
9314           && h->type != STT_GNU_IFUNC))
9315     return TRUE;
9316
9317   /* In the shared -Bsymbolic case, discard space allocated for
9318      dynamic pc-relative relocs against symbols which turn out to be
9319      defined in regular objects.  For the normal shared case, discard
9320      space for relocs that have become local due to symbol visibility
9321      changes.  */
9322
9323   if (info->shared)
9324     {
9325       /* Relocs that use pc_count are those that appear on a call insn,
9326          or certain REL relocs (see must_be_dyn_reloc) that can be
9327          generated via assembly.  We want calls to protected symbols to
9328          resolve directly to the function rather than going via the plt.
9329          If people want function pointer comparisons to work as expected
9330          then they should avoid writing weird assembly.  */
9331       if (SYMBOL_CALLS_LOCAL (info, h))
9332         {
9333           struct elf_dyn_relocs **pp;
9334
9335           for (pp = &eh->dyn_relocs; (p = *pp) != NULL; )
9336             {
9337               p->count -= p->pc_count;
9338               p->pc_count = 0;
9339               if (p->count == 0)
9340                 *pp = p->next;
9341               else
9342                 pp = &p->next;
9343             }
9344         }
9345
9346       /* Also discard relocs on undefined weak syms with non-default
9347          visibility.  */
9348       if (eh->dyn_relocs != NULL
9349           && h->root.type == bfd_link_hash_undefweak)
9350         {
9351           if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT)
9352             eh->dyn_relocs = NULL;
9353
9354           /* Make sure this symbol is output as a dynamic symbol.
9355              Undefined weak syms won't yet be marked as dynamic.  */
9356           else if (h->dynindx == -1
9357                    && !h->forced_local)
9358             {
9359               if (! bfd_elf_link_record_dynamic_symbol (info, h))
9360                 return FALSE;
9361             }
9362         }
9363     }
9364   else if (h->type == STT_GNU_IFUNC)
9365     {
9366       if (!h->non_got_ref)
9367         eh->dyn_relocs = NULL;
9368     }
9369   else if (ELIMINATE_COPY_RELOCS)
9370     {
9371       /* For the non-shared case, discard space for relocs against
9372          symbols which turn out to need copy relocs or are not
9373          dynamic.  */
9374
9375       if (!h->non_got_ref
9376           && !h->def_regular)
9377         {
9378           /* Make sure this symbol is output as a dynamic symbol.
9379              Undefined weak syms won't yet be marked as dynamic.  */
9380           if (h->dynindx == -1
9381               && !h->forced_local)
9382             {
9383               if (! bfd_elf_link_record_dynamic_symbol (info, h))
9384                 return FALSE;
9385             }
9386
9387           /* If that succeeded, we know we'll be keeping all the
9388              relocs.  */
9389           if (h->dynindx != -1)
9390             goto keep;
9391         }
9392
9393       eh->dyn_relocs = NULL;
9394
9395     keep: ;
9396     }
9397
9398   /* Finally, allocate space.  */
9399   for (p = eh->dyn_relocs; p != NULL; p = p->next)
9400     {
9401       asection *sreloc = elf_section_data (p->sec)->sreloc;
9402       if (eh->elf.type == STT_GNU_IFUNC)
9403         sreloc = htab->reliplt;
9404       sreloc->size += p->count * sizeof (Elf64_External_Rela);
9405     }
9406
9407   return TRUE;
9408 }
9409
9410 /* Find any dynamic relocs that apply to read-only sections.  */
9411
9412 static bfd_boolean
9413 readonly_dynrelocs (struct elf_link_hash_entry *h, void *inf)
9414 {
9415   struct ppc_link_hash_entry *eh;
9416   struct elf_dyn_relocs *p;
9417
9418   eh = (struct ppc_link_hash_entry *) h;
9419   for (p = eh->dyn_relocs; p != NULL; p = p->next)
9420     {
9421       asection *s = p->sec->output_section;
9422
9423       if (s != NULL && (s->flags & SEC_READONLY) != 0)
9424         {
9425           struct bfd_link_info *info = inf;
9426
9427           info->flags |= DF_TEXTREL;
9428
9429           /* Not an error, just cut short the traversal.  */
9430           return FALSE;
9431         }
9432     }
9433   return TRUE;
9434 }
9435
9436 /* Set the sizes of the dynamic sections.  */
9437
9438 static bfd_boolean
9439 ppc64_elf_size_dynamic_sections (bfd *output_bfd,
9440                                  struct bfd_link_info *info)
9441 {
9442   struct ppc_link_hash_table *htab;
9443   bfd *dynobj;
9444   asection *s;
9445   bfd_boolean relocs;
9446   bfd *ibfd;
9447   struct got_entry *first_tlsld;
9448
9449   htab = ppc_hash_table (info);
9450   if (htab == NULL)
9451     return FALSE;
9452
9453   dynobj = htab->elf.dynobj;
9454   if (dynobj == NULL)
9455     abort ();
9456
9457   if (htab->elf.dynamic_sections_created)
9458     {
9459       /* Set the contents of the .interp section to the interpreter.  */
9460       if (info->executable)
9461         {
9462           s = bfd_get_linker_section (dynobj, ".interp");
9463           if (s == NULL)
9464             abort ();
9465           s->size = sizeof ELF_DYNAMIC_INTERPRETER;
9466           s->contents = (unsigned char *) ELF_DYNAMIC_INTERPRETER;
9467         }
9468     }
9469
9470   /* Set up .got offsets for local syms, and space for local dynamic
9471      relocs.  */
9472   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link_next)
9473     {
9474       struct got_entry **lgot_ents;
9475       struct got_entry **end_lgot_ents;
9476       struct plt_entry **local_plt;
9477       struct plt_entry **end_local_plt;
9478       unsigned char *lgot_masks;
9479       bfd_size_type locsymcount;
9480       Elf_Internal_Shdr *symtab_hdr;
9481
9482       if (!is_ppc64_elf (ibfd))
9483         continue;
9484
9485       for (s = ibfd->sections; s != NULL; s = s->next)
9486         {
9487           struct ppc_dyn_relocs *p;
9488
9489           for (p = elf_section_data (s)->local_dynrel; p != NULL; p = p->next)
9490             {
9491               if (!bfd_is_abs_section (p->sec)
9492                   && bfd_is_abs_section (p->sec->output_section))
9493                 {
9494                   /* Input section has been discarded, either because
9495                      it is a copy of a linkonce section or due to
9496                      linker script /DISCARD/, so we'll be discarding
9497                      the relocs too.  */
9498                 }
9499               else if (p->count != 0)
9500                 {
9501                   asection *srel = elf_section_data (p->sec)->sreloc;
9502                   if (p->ifunc)
9503                     srel = htab->reliplt;
9504                   srel->size += p->count * sizeof (Elf64_External_Rela);
9505                   if ((p->sec->output_section->flags & SEC_READONLY) != 0)
9506                     info->flags |= DF_TEXTREL;
9507                 }
9508             }
9509         }
9510
9511       lgot_ents = elf_local_got_ents (ibfd);
9512       if (!lgot_ents)
9513         continue;
9514
9515       symtab_hdr = &elf_symtab_hdr (ibfd);
9516       locsymcount = symtab_hdr->sh_info;
9517       end_lgot_ents = lgot_ents + locsymcount;
9518       local_plt = (struct plt_entry **) end_lgot_ents;
9519       end_local_plt = local_plt + locsymcount;
9520       lgot_masks = (unsigned char *) end_local_plt;
9521       s = ppc64_elf_tdata (ibfd)->got;
9522       for (; lgot_ents < end_lgot_ents; ++lgot_ents, ++lgot_masks)
9523         {
9524           struct got_entry **pent, *ent;
9525
9526           pent = lgot_ents;
9527           while ((ent = *pent) != NULL)
9528             if (ent->got.refcount > 0)
9529               {
9530                 if ((ent->tls_type & *lgot_masks & TLS_LD) != 0)
9531                   {
9532                     ppc64_tlsld_got (ibfd)->got.refcount += 1;
9533                     *pent = ent->next;
9534                   }
9535                 else
9536                   {
9537                     unsigned int ent_size = 8;
9538                     unsigned int rel_size = sizeof (Elf64_External_Rela);
9539
9540                     ent->got.offset = s->size;
9541                     if ((ent->tls_type & *lgot_masks & TLS_GD) != 0)
9542                       {
9543                         ent_size *= 2;
9544                         rel_size *= 2;
9545                       }
9546                     s->size += ent_size;
9547                     if ((*lgot_masks & PLT_IFUNC) != 0)
9548                       {
9549                         htab->reliplt->size += rel_size;
9550                         htab->got_reli_size += rel_size;
9551                       }
9552                     else if (info->shared)
9553                       {
9554                         asection *srel = ppc64_elf_tdata (ibfd)->relgot;
9555                         srel->size += rel_size;
9556                       }
9557                     pent = &ent->next;
9558                   }
9559               }
9560             else
9561               *pent = ent->next;
9562         }
9563
9564       /* Allocate space for calls to local STT_GNU_IFUNC syms in .iplt.  */
9565       for (; local_plt < end_local_plt; ++local_plt)
9566         {
9567           struct plt_entry *ent;
9568
9569           for (ent = *local_plt; ent != NULL; ent = ent->next)
9570             if (ent->plt.refcount > 0)
9571               {
9572                 s = htab->iplt;
9573                 ent->plt.offset = s->size;
9574                 s->size += PLT_ENTRY_SIZE;
9575
9576                 htab->reliplt->size += sizeof (Elf64_External_Rela);
9577               }
9578             else
9579               ent->plt.offset = (bfd_vma) -1;
9580         }
9581     }
9582
9583   /* Allocate global sym .plt and .got entries, and space for global
9584      sym dynamic relocs.  */
9585   elf_link_hash_traverse (&htab->elf, allocate_dynrelocs, info);
9586
9587   first_tlsld = NULL;
9588   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link_next)
9589     {
9590       struct got_entry *ent;
9591
9592       if (!is_ppc64_elf (ibfd))
9593         continue;
9594
9595       ent = ppc64_tlsld_got (ibfd);
9596       if (ent->got.refcount > 0)
9597         {
9598           if (!htab->do_multi_toc && first_tlsld != NULL)
9599             {
9600               ent->is_indirect = TRUE;
9601               ent->got.ent = first_tlsld;
9602             }
9603           else
9604             {
9605               if (first_tlsld == NULL)
9606                 first_tlsld = ent;
9607               s = ppc64_elf_tdata (ibfd)->got;
9608               ent->got.offset = s->size;
9609               ent->owner = ibfd;
9610               s->size += 16;
9611               if (info->shared)
9612                 {
9613                   asection *srel = ppc64_elf_tdata (ibfd)->relgot;
9614                   srel->size += sizeof (Elf64_External_Rela);
9615                 }
9616             }
9617         }
9618       else
9619         ent->got.offset = (bfd_vma) -1;
9620     }
9621
9622   /* We now have determined the sizes of the various dynamic sections.
9623      Allocate memory for them.  */
9624   relocs = FALSE;
9625   for (s = dynobj->sections; s != NULL; s = s->next)
9626     {
9627       if ((s->flags & SEC_LINKER_CREATED) == 0)
9628         continue;
9629
9630       if (s == htab->brlt || s == htab->relbrlt)
9631         /* These haven't been allocated yet;  don't strip.  */
9632         continue;
9633       else if (s == htab->got
9634                || s == htab->plt
9635                || s == htab->iplt
9636                || s == htab->glink
9637                || s == htab->dynbss)
9638         {
9639           /* Strip this section if we don't need it; see the
9640              comment below.  */
9641         }
9642       else if (s == htab->glink_eh_frame)
9643         {
9644           if (!bfd_is_abs_section (s->output_section))
9645             /* Not sized yet.  */
9646             continue;
9647         }
9648       else if (CONST_STRNEQ (s->name, ".rela"))
9649         {
9650           if (s->size != 0)
9651             {
9652               if (s != htab->relplt)
9653                 relocs = TRUE;
9654
9655               /* We use the reloc_count field as a counter if we need
9656                  to copy relocs into the output file.  */
9657               s->reloc_count = 0;
9658             }
9659         }
9660       else
9661         {
9662           /* It's not one of our sections, so don't allocate space.  */
9663           continue;
9664         }
9665
9666       if (s->size == 0)
9667         {
9668           /* If we don't need this section, strip it from the
9669              output file.  This is mostly to handle .rela.bss and
9670              .rela.plt.  We must create both sections in
9671              create_dynamic_sections, because they must be created
9672              before the linker maps input sections to output
9673              sections.  The linker does that before
9674              adjust_dynamic_symbol is called, and it is that
9675              function which decides whether anything needs to go
9676              into these sections.  */
9677           s->flags |= SEC_EXCLUDE;
9678           continue;
9679         }
9680
9681       if ((s->flags & SEC_HAS_CONTENTS) == 0)
9682         continue;
9683
9684       /* Allocate memory for the section contents.  We use bfd_zalloc
9685          here in case unused entries are not reclaimed before the
9686          section's contents are written out.  This should not happen,
9687          but this way if it does we get a R_PPC64_NONE reloc in .rela
9688          sections instead of garbage.
9689          We also rely on the section contents being zero when writing
9690          the GOT.  */
9691       s->contents = bfd_zalloc (dynobj, s->size);
9692       if (s->contents == NULL)
9693         return FALSE;
9694     }
9695
9696   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link_next)
9697     {
9698       if (!is_ppc64_elf (ibfd))
9699         continue;
9700
9701       s = ppc64_elf_tdata (ibfd)->got;
9702       if (s != NULL && s != htab->got)
9703         {
9704           if (s->size == 0)
9705             s->flags |= SEC_EXCLUDE;
9706           else
9707             {
9708               s->contents = bfd_zalloc (ibfd, s->size);
9709               if (s->contents == NULL)
9710                 return FALSE;
9711             }
9712         }
9713       s = ppc64_elf_tdata (ibfd)->relgot;
9714       if (s != NULL)
9715         {
9716           if (s->size == 0)
9717             s->flags |= SEC_EXCLUDE;
9718           else
9719             {
9720               s->contents = bfd_zalloc (ibfd, s->size);
9721               if (s->contents == NULL)
9722                 return FALSE;
9723               relocs = TRUE;
9724               s->reloc_count = 0;
9725             }
9726         }
9727     }
9728
9729   if (htab->elf.dynamic_sections_created)
9730     {
9731       /* Add some entries to the .dynamic section.  We fill in the
9732          values later, in ppc64_elf_finish_dynamic_sections, but we
9733          must add the entries now so that we get the correct size for
9734          the .dynamic section.  The DT_DEBUG entry is filled in by the
9735          dynamic linker and used by the debugger.  */
9736 #define add_dynamic_entry(TAG, VAL) \
9737   _bfd_elf_add_dynamic_entry (info, TAG, VAL)
9738
9739       if (info->executable)
9740         {
9741           if (!add_dynamic_entry (DT_DEBUG, 0))
9742             return FALSE;
9743         }
9744
9745       if (htab->plt != NULL && htab->plt->size != 0)
9746         {
9747           if (!add_dynamic_entry (DT_PLTGOT, 0)
9748               || !add_dynamic_entry (DT_PLTRELSZ, 0)
9749               || !add_dynamic_entry (DT_PLTREL, DT_RELA)
9750               || !add_dynamic_entry (DT_JMPREL, 0)
9751               || !add_dynamic_entry (DT_PPC64_GLINK, 0))
9752             return FALSE;
9753         }
9754
9755       if (NO_OPD_RELOCS && abiversion (output_bfd) <= 1)
9756         {
9757           if (!add_dynamic_entry (DT_PPC64_OPD, 0)
9758               || !add_dynamic_entry (DT_PPC64_OPDSZ, 0))
9759             return FALSE;
9760         }
9761
9762       if (!htab->no_tls_get_addr_opt
9763           && htab->tls_get_addr_fd != NULL
9764           && htab->tls_get_addr_fd->elf.plt.plist != NULL
9765           && !add_dynamic_entry (DT_PPC64_TLSOPT, 0))
9766         return FALSE;
9767
9768       if (relocs)
9769         {
9770           if (!add_dynamic_entry (DT_RELA, 0)
9771               || !add_dynamic_entry (DT_RELASZ, 0)
9772               || !add_dynamic_entry (DT_RELAENT, sizeof (Elf64_External_Rela)))
9773             return FALSE;
9774
9775           /* If any dynamic relocs apply to a read-only section,
9776              then we need a DT_TEXTREL entry.  */
9777           if ((info->flags & DF_TEXTREL) == 0)
9778             elf_link_hash_traverse (&htab->elf, readonly_dynrelocs, info);
9779
9780           if ((info->flags & DF_TEXTREL) != 0)
9781             {
9782               if (!add_dynamic_entry (DT_TEXTREL, 0))
9783                 return FALSE;
9784             }
9785         }
9786     }
9787 #undef add_dynamic_entry
9788
9789   return TRUE;
9790 }
9791
9792 /* Determine the type of stub needed, if any, for a call.  */
9793
9794 static inline enum ppc_stub_type
9795 ppc_type_of_stub (asection *input_sec,
9796                   const Elf_Internal_Rela *rel,
9797                   struct ppc_link_hash_entry **hash,
9798                   struct plt_entry **plt_ent,
9799                   bfd_vma destination)
9800 {
9801   struct ppc_link_hash_entry *h = *hash;
9802   bfd_vma location;
9803   bfd_vma branch_offset;
9804   bfd_vma max_branch_offset;
9805   enum elf_ppc64_reloc_type r_type;
9806
9807   if (h != NULL)
9808     {
9809       struct plt_entry *ent;
9810       struct ppc_link_hash_entry *fdh = h;
9811       if (h->oh != NULL
9812           && h->oh->is_func_descriptor)
9813         {
9814           fdh = ppc_follow_link (h->oh);
9815           *hash = fdh;
9816         }
9817
9818       for (ent = fdh->elf.plt.plist; ent != NULL; ent = ent->next)
9819         if (ent->addend == rel->r_addend
9820             && ent->plt.offset != (bfd_vma) -1)
9821           {
9822             *plt_ent = ent;
9823             return ppc_stub_plt_call;
9824           }
9825
9826       /* Here, we know we don't have a plt entry.  If we don't have a
9827          either a defined function descriptor or a defined entry symbol
9828          in a regular object file, then it is pointless trying to make
9829          any other type of stub.  */
9830       if (!is_static_defined (&fdh->elf)
9831           && !is_static_defined (&h->elf))
9832         return ppc_stub_none;
9833     }
9834   else if (elf_local_got_ents (input_sec->owner) != NULL)
9835     {
9836       Elf_Internal_Shdr *symtab_hdr = &elf_symtab_hdr (input_sec->owner);
9837       struct plt_entry **local_plt = (struct plt_entry **)
9838         elf_local_got_ents (input_sec->owner) + symtab_hdr->sh_info;
9839       unsigned long r_symndx = ELF64_R_SYM (rel->r_info);
9840
9841       if (local_plt[r_symndx] != NULL)
9842         {
9843           struct plt_entry *ent;
9844
9845           for (ent = local_plt[r_symndx]; ent != NULL; ent = ent->next)
9846             if (ent->addend == rel->r_addend
9847                 && ent->plt.offset != (bfd_vma) -1)
9848               {
9849                 *plt_ent = ent;
9850                 return ppc_stub_plt_call;
9851               }
9852         }
9853     }
9854
9855   /* Determine where the call point is.  */
9856   location = (input_sec->output_offset
9857               + input_sec->output_section->vma
9858               + rel->r_offset);
9859
9860   branch_offset = destination - location;
9861   r_type = ELF64_R_TYPE (rel->r_info);
9862
9863   /* Determine if a long branch stub is needed.  */
9864   max_branch_offset = 1 << 25;
9865   if (r_type != R_PPC64_REL24)
9866     max_branch_offset = 1 << 15;
9867
9868   if (branch_offset + max_branch_offset >= 2 * max_branch_offset)
9869     /* We need a stub.  Figure out whether a long_branch or plt_branch
9870        is needed later.  */
9871     return ppc_stub_long_branch;
9872
9873   return ppc_stub_none;
9874 }
9875
9876 /* With power7 weakly ordered memory model, it is possible for ld.so
9877    to update a plt entry in one thread and have another thread see a
9878    stale zero toc entry.  To avoid this we need some sort of acquire
9879    barrier in the call stub.  One solution is to make the load of the
9880    toc word seem to appear to depend on the load of the function entry
9881    word.  Another solution is to test for r2 being zero, and branch to
9882    the appropriate glink entry if so.
9883
9884    .    fake dep barrier        compare
9885    .    ld 12,xxx(2)            ld 12,xxx(2)
9886    .    mtctr 12                mtctr 12
9887    .    xor 11,12,12            ld 2,xxx+8(2)
9888    .    add 2,2,11              cmpldi 2,0
9889    .    ld 2,xxx+8(2)           bnectr+
9890    .    bctr                    b <glink_entry>
9891
9892    The solution involving the compare turns out to be faster, so
9893    that's what we use unless the branch won't reach.  */
9894
9895 #define ALWAYS_USE_FAKE_DEP 0
9896 #define ALWAYS_EMIT_R2SAVE 0
9897
9898 #define PPC_LO(v) ((v) & 0xffff)
9899 #define PPC_HI(v) (((v) >> 16) & 0xffff)
9900 #define PPC_HA(v) PPC_HI ((v) + 0x8000)
9901
9902 static inline unsigned int
9903 plt_stub_size (struct ppc_link_hash_table *htab,
9904                struct ppc_stub_hash_entry *stub_entry,
9905                bfd_vma off)
9906 {
9907   unsigned size = PLT_CALL_STUB_SIZE;
9908
9909   if (!(ALWAYS_EMIT_R2SAVE
9910         || stub_entry->stub_type == ppc_stub_plt_call_r2save))
9911     size -= 4;
9912   if (!htab->plt_static_chain)
9913     size -= 4;
9914   if (htab->plt_thread_safe)
9915     size += 8;
9916   if (PPC_HA (off) == 0)
9917     size -= 4;
9918   if (PPC_HA (off + 8 + 8 * htab->plt_static_chain) != PPC_HA (off))
9919     size += 4;
9920   if (stub_entry->h != NULL
9921       && (stub_entry->h == htab->tls_get_addr_fd
9922           || stub_entry->h == htab->tls_get_addr)
9923       && !htab->no_tls_get_addr_opt)
9924     size += 13 * 4;
9925   return size;
9926 }
9927
9928 /* If this stub would cross fewer 2**plt_stub_align boundaries if we align,
9929    then return the padding needed to do so.  */
9930 static inline unsigned int
9931 plt_stub_pad (struct ppc_link_hash_table *htab,
9932               struct ppc_stub_hash_entry *stub_entry,
9933               bfd_vma plt_off)
9934 {
9935   int stub_align = 1 << htab->plt_stub_align;
9936   unsigned stub_size = plt_stub_size (htab, stub_entry, plt_off);
9937   bfd_vma stub_off = stub_entry->stub_sec->size;
9938
9939   if (((stub_off + stub_size - 1) & -stub_align) - (stub_off & -stub_align)
9940       > (stub_size & -stub_align))
9941     return stub_align - (stub_off & (stub_align - 1));
9942   return 0;
9943 }
9944
9945 /* Build a .plt call stub.  */
9946
9947 static inline bfd_byte *
9948 build_plt_stub (struct ppc_link_hash_table *htab,
9949                 struct ppc_stub_hash_entry *stub_entry,
9950                 bfd_byte *p, bfd_vma offset, Elf_Internal_Rela *r)
9951 {
9952   bfd *obfd = htab->stub_bfd;
9953   bfd_boolean plt_static_chain = htab->plt_static_chain;
9954   bfd_boolean plt_thread_safe = htab->plt_thread_safe;
9955   bfd_boolean use_fake_dep = plt_thread_safe;
9956   bfd_vma cmp_branch_off = 0;
9957
9958   if (!ALWAYS_USE_FAKE_DEP
9959       && plt_thread_safe
9960       && !(stub_entry->h != NULL
9961            && (stub_entry->h == htab->tls_get_addr_fd
9962                || stub_entry->h == htab->tls_get_addr)
9963            && !htab->no_tls_get_addr_opt))
9964     {
9965       bfd_vma pltoff = stub_entry->plt_ent->plt.offset & ~1;
9966       bfd_vma pltindex = (pltoff - PLT_INITIAL_ENTRY_SIZE) / PLT_ENTRY_SIZE;
9967       bfd_vma glinkoff = GLINK_CALL_STUB_SIZE + pltindex * 8;
9968       bfd_vma to, from;
9969
9970       if (pltindex > 32768)
9971         glinkoff += (pltindex - 32768) * 4;
9972       to = (glinkoff
9973             + htab->glink->output_offset
9974             + htab->glink->output_section->vma);
9975       from = (p - stub_entry->stub_sec->contents
9976               + 4 * (ALWAYS_EMIT_R2SAVE
9977                      || stub_entry->stub_type == ppc_stub_plt_call_r2save)
9978               + 4 * (PPC_HA (offset) != 0)
9979               + 4 * (PPC_HA (offset + 8 + 8 * plt_static_chain)
9980                      != PPC_HA (offset))
9981               + 4 * (plt_static_chain != 0)
9982               + 20
9983               + stub_entry->stub_sec->output_offset
9984               + stub_entry->stub_sec->output_section->vma);
9985       cmp_branch_off = to - from;
9986       use_fake_dep = cmp_branch_off + (1 << 25) >= (1 << 26);
9987     }
9988
9989   if (PPC_HA (offset) != 0)
9990     {
9991       if (r != NULL)
9992         {
9993           if (ALWAYS_EMIT_R2SAVE
9994               || stub_entry->stub_type == ppc_stub_plt_call_r2save)
9995             r[0].r_offset += 4;
9996           r[0].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_HA);
9997           r[1].r_offset = r[0].r_offset + 4;
9998           r[1].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_LO_DS);
9999           r[1].r_addend = r[0].r_addend;
10000           if (PPC_HA (offset + 8 + 8 * plt_static_chain) != PPC_HA (offset))
10001             {
10002               r[2].r_offset = r[1].r_offset + 4;
10003               r[2].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_LO);
10004               r[2].r_addend = r[0].r_addend;
10005             }
10006           else
10007             {
10008               r[2].r_offset = r[1].r_offset + 8 + 8 * use_fake_dep;
10009               r[2].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_LO_DS);
10010               r[2].r_addend = r[0].r_addend + 8;
10011               if (plt_static_chain)
10012                 {
10013                   r[3].r_offset = r[2].r_offset + 4;
10014                   r[3].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_LO_DS);
10015                   r[3].r_addend = r[0].r_addend + 16;
10016                 }
10017             }
10018         }
10019       if (ALWAYS_EMIT_R2SAVE
10020           || stub_entry->stub_type == ppc_stub_plt_call_r2save)
10021         bfd_put_32 (obfd, STD_R2_40R1, p),                      p += 4;
10022       bfd_put_32 (obfd, ADDIS_R11_R2 | PPC_HA (offset), p),     p += 4;
10023       bfd_put_32 (obfd, LD_R12_0R11 | PPC_LO (offset), p),      p += 4;
10024       if (PPC_HA (offset + 8 + 8 * plt_static_chain) != PPC_HA (offset))
10025         {
10026           bfd_put_32 (obfd, ADDI_R11_R11 | PPC_LO (offset), p), p += 4;
10027           offset = 0;
10028         }
10029       bfd_put_32 (obfd, MTCTR_R12, p),                          p += 4;
10030       if (use_fake_dep)
10031         {
10032           bfd_put_32 (obfd, XOR_R2_R12_R12, p),                 p += 4;
10033           bfd_put_32 (obfd, ADD_R11_R11_R2, p),                 p += 4;
10034         }
10035       bfd_put_32 (obfd, LD_R2_0R11 | PPC_LO (offset + 8), p),   p += 4;
10036       if (plt_static_chain)
10037         bfd_put_32 (obfd, LD_R11_0R11 | PPC_LO (offset + 16), p), p += 4;
10038     }
10039   else
10040     {
10041       if (r != NULL)
10042         {
10043           if (ALWAYS_EMIT_R2SAVE
10044               || stub_entry->stub_type == ppc_stub_plt_call_r2save)
10045             r[0].r_offset += 4;
10046           r[0].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_DS);
10047           if (PPC_HA (offset + 8 + 8 * plt_static_chain) != PPC_HA (offset))
10048             {
10049               r[1].r_offset = r[0].r_offset + 4;
10050               r[1].r_info = ELF64_R_INFO (0, R_PPC64_TOC16);
10051               r[1].r_addend = r[0].r_addend;
10052             }
10053           else
10054             {
10055               r[1].r_offset = r[0].r_offset + 8 + 8 * use_fake_dep;
10056               r[1].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_DS);
10057               r[1].r_addend = r[0].r_addend + 8 + 8 * plt_static_chain;
10058               if (plt_static_chain)
10059                 {
10060                   r[2].r_offset = r[1].r_offset + 4;
10061                   r[2].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_DS);
10062                   r[2].r_addend = r[0].r_addend + 8;
10063                 }
10064             }
10065         }
10066       if (ALWAYS_EMIT_R2SAVE
10067           || stub_entry->stub_type == ppc_stub_plt_call_r2save)
10068         bfd_put_32 (obfd, STD_R2_40R1, p),                      p += 4;
10069       bfd_put_32 (obfd, LD_R12_0R2 | PPC_LO (offset), p),       p += 4;
10070       if (PPC_HA (offset + 8 + 8 * plt_static_chain) != PPC_HA (offset))
10071         {
10072           bfd_put_32 (obfd, ADDI_R2_R2 | PPC_LO (offset), p),   p += 4;
10073           offset = 0;
10074         }
10075       bfd_put_32 (obfd, MTCTR_R12, p),                          p += 4;
10076       if (use_fake_dep)
10077         {
10078           bfd_put_32 (obfd, XOR_R11_R12_R12, p),                p += 4;
10079           bfd_put_32 (obfd, ADD_R2_R2_R11, p),                  p += 4;
10080         }
10081       if (plt_static_chain)
10082         bfd_put_32 (obfd, LD_R11_0R2 | PPC_LO (offset + 16), p), p += 4;
10083       bfd_put_32 (obfd, LD_R2_0R2 | PPC_LO (offset + 8), p),    p += 4;
10084     }
10085   if (plt_thread_safe && !use_fake_dep)
10086     {
10087       bfd_put_32 (obfd, CMPLDI_R2_0, p),                        p += 4;
10088       bfd_put_32 (obfd, BNECTR_P4, p),                          p += 4;
10089       bfd_put_32 (obfd, B_DOT | (cmp_branch_off & 0x3fffffc), p), p += 4;
10090     }
10091   else
10092     bfd_put_32 (obfd, BCTR, p),                                 p += 4;
10093   return p;
10094 }
10095
10096 /* Build a special .plt call stub for __tls_get_addr.  */
10097
10098 #define LD_R11_0R3      0xe9630000
10099 #define LD_R12_0R3      0xe9830000
10100 #define MR_R0_R3        0x7c601b78
10101 #define CMPDI_R11_0     0x2c2b0000
10102 #define ADD_R3_R12_R13  0x7c6c6a14
10103 #define BEQLR           0x4d820020
10104 #define MR_R3_R0        0x7c030378
10105 #define MFLR_R11        0x7d6802a6
10106 #define STD_R11_0R1     0xf9610000
10107 #define BCTRL           0x4e800421
10108 #define LD_R11_0R1      0xe9610000
10109 #define LD_R2_0R1       0xe8410000
10110 #define MTLR_R11        0x7d6803a6
10111
10112 static inline bfd_byte *
10113 build_tls_get_addr_stub (struct ppc_link_hash_table *htab,
10114                          struct ppc_stub_hash_entry *stub_entry,
10115                          bfd_byte *p, bfd_vma offset, Elf_Internal_Rela *r)
10116 {
10117   bfd *obfd = htab->stub_bfd;
10118
10119   bfd_put_32 (obfd, LD_R11_0R3 + 0, p),         p += 4;
10120   bfd_put_32 (obfd, LD_R12_0R3 + 8, p),         p += 4;
10121   bfd_put_32 (obfd, MR_R0_R3, p),               p += 4;
10122   bfd_put_32 (obfd, CMPDI_R11_0, p),            p += 4;
10123   bfd_put_32 (obfd, ADD_R3_R12_R13, p),         p += 4;
10124   bfd_put_32 (obfd, BEQLR, p),                  p += 4;
10125   bfd_put_32 (obfd, MR_R3_R0, p),               p += 4;
10126   bfd_put_32 (obfd, MFLR_R11, p),               p += 4;
10127   bfd_put_32 (obfd, STD_R11_0R1 + 32, p),       p += 4;
10128
10129   if (r != NULL)
10130     r[0].r_offset += 9 * 4;
10131   p = build_plt_stub (htab, stub_entry, p, offset, r);
10132   bfd_put_32 (obfd, BCTRL, p - 4);
10133
10134   bfd_put_32 (obfd, LD_R11_0R1 + 32, p),        p += 4;
10135   bfd_put_32 (obfd, LD_R2_0R1 + 40, p),         p += 4;
10136   bfd_put_32 (obfd, MTLR_R11, p),               p += 4;
10137   bfd_put_32 (obfd, BLR, p),                    p += 4;
10138
10139   return p;
10140 }
10141
10142 static Elf_Internal_Rela *
10143 get_relocs (asection *sec, int count)
10144 {
10145   Elf_Internal_Rela *relocs;
10146   struct bfd_elf_section_data *elfsec_data;
10147
10148   elfsec_data = elf_section_data (sec);
10149   relocs = elfsec_data->relocs;
10150   if (relocs == NULL)
10151     {
10152       bfd_size_type relsize;
10153       relsize = sec->reloc_count * sizeof (*relocs);
10154       relocs = bfd_alloc (sec->owner, relsize);
10155       if (relocs == NULL)
10156         return NULL;
10157       elfsec_data->relocs = relocs;
10158       elfsec_data->rela.hdr = bfd_zalloc (sec->owner,
10159                                           sizeof (Elf_Internal_Shdr));
10160       if (elfsec_data->rela.hdr == NULL)
10161         return NULL;
10162       elfsec_data->rela.hdr->sh_size = (sec->reloc_count
10163                                         * sizeof (Elf64_External_Rela));
10164       elfsec_data->rela.hdr->sh_entsize = sizeof (Elf64_External_Rela);
10165       sec->reloc_count = 0;
10166     }
10167   relocs += sec->reloc_count;
10168   sec->reloc_count += count;
10169   return relocs;
10170 }
10171
10172 static bfd_vma
10173 get_r2off (struct bfd_link_info *info,
10174            struct ppc_stub_hash_entry *stub_entry)
10175 {
10176   struct ppc_link_hash_table *htab = ppc_hash_table (info);
10177   bfd_vma r2off = htab->stub_group[stub_entry->target_section->id].toc_off;
10178
10179   if (r2off == 0)
10180     {
10181       /* Support linking -R objects.  Get the toc pointer from the
10182          opd entry.  */
10183       char buf[8];
10184       asection *opd = stub_entry->h->elf.root.u.def.section;
10185       bfd_vma opd_off = stub_entry->h->elf.root.u.def.value;
10186
10187       if (strcmp (opd->name, ".opd") != 0
10188           || opd->reloc_count != 0)
10189         {
10190           info->callbacks->einfo (_("%P: cannot find opd entry toc for `%T'\n"),
10191                                   stub_entry->h->elf.root.root.string);
10192           bfd_set_error (bfd_error_bad_value);
10193           return 0;
10194         }
10195       if (!bfd_get_section_contents (opd->owner, opd, buf, opd_off + 8, 8))
10196         return 0;
10197       r2off = bfd_get_64 (opd->owner, buf);
10198       r2off -= elf_gp (info->output_bfd);
10199     }
10200   r2off -= htab->stub_group[stub_entry->id_sec->id].toc_off;
10201   return r2off;
10202 }
10203
10204 static bfd_boolean
10205 ppc_build_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg)
10206 {
10207   struct ppc_stub_hash_entry *stub_entry;
10208   struct ppc_branch_hash_entry *br_entry;
10209   struct bfd_link_info *info;
10210   struct ppc_link_hash_table *htab;
10211   bfd_byte *loc;
10212   bfd_byte *p;
10213   bfd_vma dest, off;
10214   int size;
10215   Elf_Internal_Rela *r;
10216   asection *plt;
10217
10218   /* Massage our args to the form they really have.  */
10219   stub_entry = (struct ppc_stub_hash_entry *) gen_entry;
10220   info = in_arg;
10221
10222   htab = ppc_hash_table (info);
10223   if (htab == NULL)
10224     return FALSE;
10225
10226   /* Make a note of the offset within the stubs for this entry.  */
10227   stub_entry->stub_offset = stub_entry->stub_sec->size;
10228   loc = stub_entry->stub_sec->contents + stub_entry->stub_offset;
10229
10230   htab->stub_count[stub_entry->stub_type - 1] += 1;
10231   switch (stub_entry->stub_type)
10232     {
10233     case ppc_stub_long_branch:
10234     case ppc_stub_long_branch_r2off:
10235       /* Branches are relative.  This is where we are going to.  */
10236       off = dest = (stub_entry->target_value
10237                     + stub_entry->target_section->output_offset
10238                     + stub_entry->target_section->output_section->vma);
10239
10240       /* And this is where we are coming from.  */
10241       off -= (stub_entry->stub_offset
10242               + stub_entry->stub_sec->output_offset
10243               + stub_entry->stub_sec->output_section->vma);
10244
10245       size = 4;
10246       if (stub_entry->stub_type == ppc_stub_long_branch_r2off)
10247         {
10248           bfd_vma r2off = get_r2off (info, stub_entry);
10249
10250           if (r2off == 0)
10251             {
10252               htab->stub_error = TRUE;
10253               return FALSE;
10254             }
10255           bfd_put_32 (htab->stub_bfd, STD_R2_40R1, loc);
10256           loc += 4;
10257           size = 12;
10258           if (PPC_HA (r2off) != 0)
10259             {
10260               size = 16;
10261               bfd_put_32 (htab->stub_bfd, ADDIS_R2_R2 | PPC_HA (r2off), loc);
10262               loc += 4;
10263             }
10264           bfd_put_32 (htab->stub_bfd, ADDI_R2_R2 | PPC_LO (r2off), loc);
10265           loc += 4;
10266           off -= size - 4;
10267         }
10268       bfd_put_32 (htab->stub_bfd, B_DOT | (off & 0x3fffffc), loc);
10269
10270       if (off + (1 << 25) >= (bfd_vma) (1 << 26))
10271         {
10272           info->callbacks->einfo
10273             (_("%P: long branch stub `%s' offset overflow\n"),
10274              stub_entry->root.string);
10275           htab->stub_error = TRUE;
10276           return FALSE;
10277         }
10278
10279       if (info->emitrelocations)
10280         {
10281           r = get_relocs (stub_entry->stub_sec, 1);
10282           if (r == NULL)
10283             return FALSE;
10284           r->r_offset = loc - stub_entry->stub_sec->contents;
10285           r->r_info = ELF64_R_INFO (0, R_PPC64_REL24);
10286           r->r_addend = dest;
10287           if (stub_entry->h != NULL)
10288             {
10289               struct elf_link_hash_entry **hashes;
10290               unsigned long symndx;
10291               struct ppc_link_hash_entry *h;
10292
10293               hashes = elf_sym_hashes (htab->stub_bfd);
10294               if (hashes == NULL)
10295                 {
10296                   bfd_size_type hsize;
10297
10298                   hsize = (htab->stub_globals + 1) * sizeof (*hashes);
10299                   hashes = bfd_zalloc (htab->stub_bfd, hsize);
10300                   if (hashes == NULL)
10301                     return FALSE;
10302                   elf_sym_hashes (htab->stub_bfd) = hashes;
10303                   htab->stub_globals = 1;
10304                 }
10305               symndx = htab->stub_globals++;
10306               h = stub_entry->h;
10307               hashes[symndx] = &h->elf;
10308               r->r_info = ELF64_R_INFO (symndx, R_PPC64_REL24);
10309               if (h->oh != NULL && h->oh->is_func)
10310                 h = ppc_follow_link (h->oh);
10311               if (h->elf.root.u.def.section != stub_entry->target_section)
10312                 /* H is an opd symbol.  The addend must be zero.  */
10313                 r->r_addend = 0;
10314               else
10315                 {
10316                   off = (h->elf.root.u.def.value
10317                          + h->elf.root.u.def.section->output_offset
10318                          + h->elf.root.u.def.section->output_section->vma);
10319                   r->r_addend -= off;
10320                 }
10321             }
10322         }
10323       break;
10324
10325     case ppc_stub_plt_branch:
10326     case ppc_stub_plt_branch_r2off:
10327       br_entry = ppc_branch_hash_lookup (&htab->branch_hash_table,
10328                                          stub_entry->root.string + 9,
10329                                          FALSE, FALSE);
10330       if (br_entry == NULL)
10331         {
10332           info->callbacks->einfo (_("%P: can't find branch stub `%s'\n"),
10333                                   stub_entry->root.string);
10334           htab->stub_error = TRUE;
10335           return FALSE;
10336         }
10337
10338       dest = (stub_entry->target_value
10339               + stub_entry->target_section->output_offset
10340               + stub_entry->target_section->output_section->vma);
10341
10342       bfd_put_64 (htab->brlt->owner, dest,
10343                   htab->brlt->contents + br_entry->offset);
10344
10345       if (br_entry->iter == htab->stub_iteration)
10346         {
10347           br_entry->iter = 0;
10348
10349           if (htab->relbrlt != NULL)
10350             {
10351               /* Create a reloc for the branch lookup table entry.  */
10352               Elf_Internal_Rela rela;
10353               bfd_byte *rl;
10354
10355               rela.r_offset = (br_entry->offset
10356                                + htab->brlt->output_offset
10357                                + htab->brlt->output_section->vma);
10358               rela.r_info = ELF64_R_INFO (0, R_PPC64_RELATIVE);
10359               rela.r_addend = dest;
10360
10361               rl = htab->relbrlt->contents;
10362               rl += (htab->relbrlt->reloc_count++
10363                      * sizeof (Elf64_External_Rela));
10364               bfd_elf64_swap_reloca_out (htab->relbrlt->owner, &rela, rl);
10365             }
10366           else if (info->emitrelocations)
10367             {
10368               r = get_relocs (htab->brlt, 1);
10369               if (r == NULL)
10370                 return FALSE;
10371               /* brlt, being SEC_LINKER_CREATED does not go through the
10372                  normal reloc processing.  Symbols and offsets are not
10373                  translated from input file to output file form, so
10374                  set up the offset per the output file.  */
10375               r->r_offset = (br_entry->offset
10376                              + htab->brlt->output_offset
10377                              + htab->brlt->output_section->vma);
10378               r->r_info = ELF64_R_INFO (0, R_PPC64_RELATIVE);
10379               r->r_addend = dest;
10380             }
10381         }
10382
10383       dest = (br_entry->offset
10384               + htab->brlt->output_offset
10385               + htab->brlt->output_section->vma);
10386
10387       off = (dest
10388              - elf_gp (htab->brlt->output_section->owner)
10389              - htab->stub_group[stub_entry->id_sec->id].toc_off);
10390
10391       if (off + 0x80008000 > 0xffffffff || (off & 7) != 0)
10392         {
10393           info->callbacks->einfo
10394             (_("%P: linkage table error against `%T'\n"),
10395              stub_entry->root.string);
10396           bfd_set_error (bfd_error_bad_value);
10397           htab->stub_error = TRUE;
10398           return FALSE;
10399         }
10400
10401       if (info->emitrelocations)
10402         {
10403           r = get_relocs (stub_entry->stub_sec, 1 + (PPC_HA (off) != 0));
10404           if (r == NULL)
10405             return FALSE;
10406           r[0].r_offset = loc - stub_entry->stub_sec->contents;
10407           if (bfd_big_endian (info->output_bfd))
10408             r[0].r_offset += 2;
10409           if (stub_entry->stub_type == ppc_stub_plt_branch_r2off)
10410             r[0].r_offset += 4;
10411           r[0].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_DS);
10412           r[0].r_addend = dest;
10413           if (PPC_HA (off) != 0)
10414             {
10415               r[0].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_HA);
10416               r[1].r_offset = r[0].r_offset + 4;
10417               r[1].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_LO_DS);
10418               r[1].r_addend = r[0].r_addend;
10419             }
10420         }
10421
10422       if (stub_entry->stub_type != ppc_stub_plt_branch_r2off)
10423         {
10424           if (PPC_HA (off) != 0)
10425             {
10426               size = 16;
10427               bfd_put_32 (htab->stub_bfd, ADDIS_R11_R2 | PPC_HA (off), loc);
10428               loc += 4;
10429               bfd_put_32 (htab->stub_bfd, LD_R12_0R11 | PPC_LO (off), loc);
10430             }
10431           else
10432             {
10433               size = 12;
10434               bfd_put_32 (htab->stub_bfd, LD_R12_0R2 | PPC_LO (off), loc);
10435             }
10436         }
10437       else
10438         {
10439           bfd_vma r2off = get_r2off (info, stub_entry);
10440
10441           if (r2off == 0)
10442             {
10443               htab->stub_error = TRUE;
10444               return FALSE;
10445             }
10446
10447           bfd_put_32 (htab->stub_bfd, STD_R2_40R1, loc);
10448           loc += 4;
10449           size = 20;
10450           if (PPC_HA (off) != 0)
10451             {
10452               size += 4;
10453               bfd_put_32 (htab->stub_bfd, ADDIS_R11_R2 | PPC_HA (off), loc);
10454               loc += 4;
10455               bfd_put_32 (htab->stub_bfd, LD_R12_0R11 | PPC_LO (off), loc);
10456               loc += 4;
10457             }
10458           else
10459             {
10460               bfd_put_32 (htab->stub_bfd, LD_R12_0R2 | PPC_LO (off), loc);
10461               loc += 4;
10462             }
10463
10464           if (PPC_HA (r2off) != 0)
10465             {
10466               size += 4;
10467               bfd_put_32 (htab->stub_bfd, ADDIS_R2_R2 | PPC_HA (r2off), loc);
10468               loc += 4;
10469             }
10470           bfd_put_32 (htab->stub_bfd, ADDI_R2_R2 | PPC_LO (r2off), loc);
10471         }
10472       loc += 4;
10473       bfd_put_32 (htab->stub_bfd, MTCTR_R12, loc);
10474       loc += 4;
10475       bfd_put_32 (htab->stub_bfd, BCTR, loc);
10476       break;
10477
10478     case ppc_stub_plt_call:
10479     case ppc_stub_plt_call_r2save:
10480       if (stub_entry->h != NULL
10481           && stub_entry->h->is_func_descriptor
10482           && stub_entry->h->oh != NULL)
10483         {
10484           struct ppc_link_hash_entry *fh = ppc_follow_link (stub_entry->h->oh);
10485
10486           /* If the old-ABI "dot-symbol" is undefined make it weak so
10487              we don't get a link error from RELOC_FOR_GLOBAL_SYMBOL.
10488              FIXME: We used to define the symbol on one of the call
10489              stubs instead, which is why we test symbol section id
10490              against htab->top_id in various places.  Likely all
10491              these checks could now disappear.  */
10492           if (fh->elf.root.type == bfd_link_hash_undefined)
10493             fh->elf.root.type = bfd_link_hash_undefweak;
10494           /* Stop undo_symbol_twiddle changing it back to undefined.  */
10495           fh->was_undefined = 0;
10496         }
10497
10498       /* Now build the stub.  */
10499       dest = stub_entry->plt_ent->plt.offset & ~1;
10500       if (dest >= (bfd_vma) -2)
10501         abort ();
10502
10503       plt = htab->plt;
10504       if (!htab->elf.dynamic_sections_created
10505           || stub_entry->h == NULL
10506           || stub_entry->h->elf.dynindx == -1)
10507         plt = htab->iplt;
10508
10509       dest += plt->output_offset + plt->output_section->vma;
10510
10511       if (stub_entry->h == NULL
10512           && (stub_entry->plt_ent->plt.offset & 1) == 0)
10513         {
10514           Elf_Internal_Rela rela;
10515           bfd_byte *rl;
10516
10517           rela.r_offset = dest;
10518           if (htab->opd_abi)
10519             rela.r_info = ELF64_R_INFO (0, R_PPC64_JMP_IREL);
10520           else
10521             rela.r_info = ELF64_R_INFO (0, R_PPC64_IRELATIVE);
10522           rela.r_addend = (stub_entry->target_value
10523                            + stub_entry->target_section->output_offset
10524                            + stub_entry->target_section->output_section->vma);
10525
10526           rl = (htab->reliplt->contents
10527                 + (htab->reliplt->reloc_count++
10528                    * sizeof (Elf64_External_Rela)));
10529           bfd_elf64_swap_reloca_out (info->output_bfd, &rela, rl);
10530           stub_entry->plt_ent->plt.offset |= 1;
10531         }
10532
10533       off = (dest
10534              - elf_gp (plt->output_section->owner)
10535              - htab->stub_group[stub_entry->id_sec->id].toc_off);
10536
10537       if (off + 0x80008000 > 0xffffffff || (off & 7) != 0)
10538         {
10539           info->callbacks->einfo
10540             (_("%P: linkage table error against `%T'\n"),
10541              stub_entry->h != NULL
10542              ? stub_entry->h->elf.root.root.string
10543              : "<local sym>");
10544           bfd_set_error (bfd_error_bad_value);
10545           htab->stub_error = TRUE;
10546           return FALSE;
10547         }
10548
10549       if (htab->plt_stub_align != 0)
10550         {
10551           unsigned pad = plt_stub_pad (htab, stub_entry, off);
10552
10553           stub_entry->stub_sec->size += pad;
10554           stub_entry->stub_offset = stub_entry->stub_sec->size;
10555           loc += pad;
10556         }
10557
10558       r = NULL;
10559       if (info->emitrelocations)
10560         {
10561           r = get_relocs (stub_entry->stub_sec,
10562                           (2
10563                            + (PPC_HA (off) != 0)
10564                            + (htab->plt_static_chain
10565                               && PPC_HA (off + 16) == PPC_HA (off))));
10566           if (r == NULL)
10567             return FALSE;
10568           r[0].r_offset = loc - stub_entry->stub_sec->contents;
10569           if (bfd_big_endian (info->output_bfd))
10570             r[0].r_offset += 2;
10571           r[0].r_addend = dest;
10572         }
10573       if (stub_entry->h != NULL
10574           && (stub_entry->h == htab->tls_get_addr_fd
10575               || stub_entry->h == htab->tls_get_addr)
10576           && !htab->no_tls_get_addr_opt)
10577         p = build_tls_get_addr_stub (htab, stub_entry, loc, off, r);
10578       else
10579         p = build_plt_stub (htab, stub_entry, loc, off, r);
10580       size = p - loc;
10581       break;
10582
10583     default:
10584       BFD_FAIL ();
10585       return FALSE;
10586     }
10587
10588   stub_entry->stub_sec->size += size;
10589
10590   if (htab->emit_stub_syms)
10591     {
10592       struct elf_link_hash_entry *h;
10593       size_t len1, len2;
10594       char *name;
10595       const char *const stub_str[] = { "long_branch",
10596                                        "long_branch_r2off",
10597                                        "plt_branch",
10598                                        "plt_branch_r2off",
10599                                        "plt_call",
10600                                        "plt_call" };
10601
10602       len1 = strlen (stub_str[stub_entry->stub_type - 1]);
10603       len2 = strlen (stub_entry->root.string);
10604       name = bfd_malloc (len1 + len2 + 2);
10605       if (name == NULL)
10606         return FALSE;
10607       memcpy (name, stub_entry->root.string, 9);
10608       memcpy (name + 9, stub_str[stub_entry->stub_type - 1], len1);
10609       memcpy (name + len1 + 9, stub_entry->root.string + 8, len2 - 8 + 1);
10610       h = elf_link_hash_lookup (&htab->elf, name, TRUE, FALSE, FALSE);
10611       if (h == NULL)
10612         return FALSE;
10613       if (h->root.type == bfd_link_hash_new)
10614         {
10615           h->root.type = bfd_link_hash_defined;
10616           h->root.u.def.section = stub_entry->stub_sec;
10617           h->root.u.def.value = stub_entry->stub_offset;
10618           h->ref_regular = 1;
10619           h->def_regular = 1;
10620           h->ref_regular_nonweak = 1;
10621           h->forced_local = 1;
10622           h->non_elf = 0;
10623         }
10624     }
10625
10626   return TRUE;
10627 }
10628
10629 /* As above, but don't actually build the stub.  Just bump offset so
10630    we know stub section sizes, and select plt_branch stubs where
10631    long_branch stubs won't do.  */
10632
10633 static bfd_boolean
10634 ppc_size_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg)
10635 {
10636   struct ppc_stub_hash_entry *stub_entry;
10637   struct bfd_link_info *info;
10638   struct ppc_link_hash_table *htab;
10639   bfd_vma off;
10640   int size;
10641
10642   /* Massage our args to the form they really have.  */
10643   stub_entry = (struct ppc_stub_hash_entry *) gen_entry;
10644   info = in_arg;
10645
10646   htab = ppc_hash_table (info);
10647   if (htab == NULL)
10648     return FALSE;
10649
10650   if (stub_entry->stub_type == ppc_stub_plt_call
10651       || stub_entry->stub_type == ppc_stub_plt_call_r2save)
10652     {
10653       asection *plt;
10654       off = stub_entry->plt_ent->plt.offset & ~(bfd_vma) 1;
10655       if (off >= (bfd_vma) -2)
10656         abort ();
10657       plt = htab->plt;
10658       if (!htab->elf.dynamic_sections_created
10659           || stub_entry->h == NULL
10660           || stub_entry->h->elf.dynindx == -1)
10661         plt = htab->iplt;
10662       off += (plt->output_offset
10663               + plt->output_section->vma
10664               - elf_gp (plt->output_section->owner)
10665               - htab->stub_group[stub_entry->id_sec->id].toc_off);
10666
10667       size = plt_stub_size (htab, stub_entry, off);
10668       if (htab->plt_stub_align)
10669         size += plt_stub_pad (htab, stub_entry, off);
10670       if (info->emitrelocations)
10671         {
10672           stub_entry->stub_sec->reloc_count
10673             += (2
10674                 + (PPC_HA (off) != 0)
10675                 + (htab->plt_static_chain
10676                    && PPC_HA (off + 16) == PPC_HA (off)));
10677           stub_entry->stub_sec->flags |= SEC_RELOC;
10678         }
10679     }
10680   else
10681     {
10682       /* ppc_stub_long_branch or ppc_stub_plt_branch, or their r2off
10683          variants.  */
10684       bfd_vma r2off = 0;
10685
10686       off = (stub_entry->target_value
10687              + stub_entry->target_section->output_offset
10688              + stub_entry->target_section->output_section->vma);
10689       off -= (stub_entry->stub_sec->size
10690               + stub_entry->stub_sec->output_offset
10691               + stub_entry->stub_sec->output_section->vma);
10692
10693       /* Reset the stub type from the plt variant in case we now
10694          can reach with a shorter stub.  */
10695       if (stub_entry->stub_type >= ppc_stub_plt_branch)
10696         stub_entry->stub_type += ppc_stub_long_branch - ppc_stub_plt_branch;
10697
10698       size = 4;
10699       if (stub_entry->stub_type == ppc_stub_long_branch_r2off)
10700         {
10701           r2off = get_r2off (info, stub_entry);
10702           if (r2off == 0)
10703             {
10704               htab->stub_error = TRUE;
10705               return FALSE;
10706             }
10707           size = 12;
10708           if (PPC_HA (r2off) != 0)
10709             size = 16;
10710           off -= size - 4;
10711         }
10712
10713       /* If the branch offset if too big, use a ppc_stub_plt_branch.  */
10714       if (off + (1 << 25) >= (bfd_vma) (1 << 26))
10715         {
10716           struct ppc_branch_hash_entry *br_entry;
10717
10718           br_entry = ppc_branch_hash_lookup (&htab->branch_hash_table,
10719                                              stub_entry->root.string + 9,
10720                                              TRUE, FALSE);
10721           if (br_entry == NULL)
10722             {
10723               info->callbacks->einfo (_("%P: can't build branch stub `%s'\n"),
10724                                       stub_entry->root.string);
10725               htab->stub_error = TRUE;
10726               return FALSE;
10727             }
10728
10729           if (br_entry->iter != htab->stub_iteration)
10730             {
10731               br_entry->iter = htab->stub_iteration;
10732               br_entry->offset = htab->brlt->size;
10733               htab->brlt->size += 8;
10734
10735               if (htab->relbrlt != NULL)
10736                 htab->relbrlt->size += sizeof (Elf64_External_Rela);
10737               else if (info->emitrelocations)
10738                 {
10739                   htab->brlt->reloc_count += 1;
10740                   htab->brlt->flags |= SEC_RELOC;
10741                 }
10742             }
10743
10744           stub_entry->stub_type += ppc_stub_plt_branch - ppc_stub_long_branch;
10745           off = (br_entry->offset
10746                  + htab->brlt->output_offset
10747                  + htab->brlt->output_section->vma
10748                  - elf_gp (htab->brlt->output_section->owner)
10749                  - htab->stub_group[stub_entry->id_sec->id].toc_off);
10750
10751           if (info->emitrelocations)
10752             {
10753               stub_entry->stub_sec->reloc_count += 1 + (PPC_HA (off) != 0);
10754               stub_entry->stub_sec->flags |= SEC_RELOC;
10755             }
10756
10757           if (stub_entry->stub_type != ppc_stub_plt_branch_r2off)
10758             {
10759               size = 12;
10760               if (PPC_HA (off) != 0)
10761                 size = 16;
10762             }
10763           else
10764             {
10765               size = 20;
10766               if (PPC_HA (off) != 0)
10767                 size += 4;
10768
10769               if (PPC_HA (r2off) != 0)
10770                 size += 4;
10771             }
10772         }
10773       else if (info->emitrelocations)
10774         {
10775           stub_entry->stub_sec->reloc_count += 1;
10776           stub_entry->stub_sec->flags |= SEC_RELOC;
10777         }
10778     }
10779
10780   stub_entry->stub_sec->size += size;
10781   return TRUE;
10782 }
10783
10784 /* Set up various things so that we can make a list of input sections
10785    for each output section included in the link.  Returns -1 on error,
10786    0 when no stubs will be needed, and 1 on success.  */
10787
10788 int
10789 ppc64_elf_setup_section_lists
10790   (struct bfd_link_info *info,
10791    asection *(*add_stub_section) (const char *, asection *),
10792    void (*layout_sections_again) (void))
10793 {
10794   bfd *input_bfd;
10795   int top_id, top_index, id;
10796   asection *section;
10797   asection **input_list;
10798   bfd_size_type amt;
10799   struct ppc_link_hash_table *htab = ppc_hash_table (info);
10800
10801   if (htab == NULL)
10802     return -1;
10803   /* Stash our params away.  */
10804   htab->add_stub_section = add_stub_section;
10805   htab->layout_sections_again = layout_sections_again;
10806
10807   /* Find the top input section id.  */
10808   for (input_bfd = info->input_bfds, top_id = 3;
10809        input_bfd != NULL;
10810        input_bfd = input_bfd->link_next)
10811     {
10812       for (section = input_bfd->sections;
10813            section != NULL;
10814            section = section->next)
10815         {
10816           if (top_id < section->id)
10817             top_id = section->id;
10818         }
10819     }
10820
10821   htab->top_id = top_id;
10822   amt = sizeof (struct map_stub) * (top_id + 1);
10823   htab->stub_group = bfd_zmalloc (amt);
10824   if (htab->stub_group == NULL)
10825     return -1;
10826
10827   /* Set toc_off for com, und, abs and ind sections.  */
10828   for (id = 0; id < 3; id++)
10829     htab->stub_group[id].toc_off = TOC_BASE_OFF;
10830
10831   /* We can't use output_bfd->section_count here to find the top output
10832      section index as some sections may have been removed, and
10833      strip_excluded_output_sections doesn't renumber the indices.  */
10834   for (section = info->output_bfd->sections, top_index = 0;
10835        section != NULL;
10836        section = section->next)
10837     {
10838       if (top_index < section->index)
10839         top_index = section->index;
10840     }
10841
10842   htab->top_index = top_index;
10843   amt = sizeof (asection *) * (top_index + 1);
10844   input_list = bfd_zmalloc (amt);
10845   htab->input_list = input_list;
10846   if (input_list == NULL)
10847     return -1;
10848
10849   return 1;
10850 }
10851
10852 /* Set up for first pass at multitoc partitioning.  */
10853
10854 void
10855 ppc64_elf_start_multitoc_partition (struct bfd_link_info *info)
10856 {
10857   struct ppc_link_hash_table *htab = ppc_hash_table (info);
10858
10859   htab->toc_curr = ppc64_elf_set_toc (info, info->output_bfd);
10860   htab->toc_bfd = NULL;
10861   htab->toc_first_sec = NULL;
10862 }
10863
10864 /* The linker repeatedly calls this function for each TOC input section
10865    and linker generated GOT section.  Group input bfds such that the toc
10866    within a group is less than 64k in size.  */
10867
10868 bfd_boolean
10869 ppc64_elf_next_toc_section (struct bfd_link_info *info, asection *isec)
10870 {
10871   struct ppc_link_hash_table *htab = ppc_hash_table (info);
10872   bfd_vma addr, off, limit;
10873
10874   if (htab == NULL)
10875     return FALSE;
10876
10877   if (!htab->second_toc_pass)
10878     {
10879       /* Keep track of the first .toc or .got section for this input bfd.  */
10880       bfd_boolean new_bfd = htab->toc_bfd != isec->owner;
10881
10882       if (new_bfd)
10883         {
10884           htab->toc_bfd = isec->owner;
10885           htab->toc_first_sec = isec;
10886         }
10887
10888       addr = isec->output_offset + isec->output_section->vma;
10889       off = addr - htab->toc_curr;
10890       limit = 0x80008000;
10891       if (ppc64_elf_tdata (isec->owner)->has_small_toc_reloc)
10892         limit = 0x10000;
10893       if (off + isec->size > limit)
10894         {
10895           addr = (htab->toc_first_sec->output_offset
10896                   + htab->toc_first_sec->output_section->vma);
10897           htab->toc_curr = addr;
10898         }
10899
10900       /* toc_curr is the base address of this toc group.  Set elf_gp
10901          for the input section to be the offset relative to the
10902          output toc base plus 0x8000.  Making the input elf_gp an
10903          offset allows us to move the toc as a whole without
10904          recalculating input elf_gp.  */
10905       off = htab->toc_curr - elf_gp (isec->output_section->owner);
10906       off += TOC_BASE_OFF;
10907
10908       /* Die if someone uses a linker script that doesn't keep input
10909          file .toc and .got together.  */
10910       if (new_bfd
10911           && elf_gp (isec->owner) != 0
10912           && elf_gp (isec->owner) != off)
10913         return FALSE;
10914
10915       elf_gp (isec->owner) = off;
10916       return TRUE;
10917     }
10918
10919   /* During the second pass toc_first_sec points to the start of
10920      a toc group, and toc_curr is used to track the old elf_gp.
10921      We use toc_bfd to ensure we only look at each bfd once.  */
10922   if (htab->toc_bfd == isec->owner)
10923     return TRUE;
10924   htab->toc_bfd = isec->owner;
10925
10926   if (htab->toc_first_sec == NULL
10927       || htab->toc_curr != elf_gp (isec->owner))
10928     {
10929       htab->toc_curr = elf_gp (isec->owner);
10930       htab->toc_first_sec = isec;
10931     }
10932   addr = (htab->toc_first_sec->output_offset
10933           + htab->toc_first_sec->output_section->vma);
10934   off = addr - elf_gp (isec->output_section->owner) + TOC_BASE_OFF;
10935   elf_gp (isec->owner) = off;
10936
10937   return TRUE;
10938 }
10939
10940 /* Called via elf_link_hash_traverse to merge GOT entries for global
10941    symbol H.  */
10942
10943 static bfd_boolean
10944 merge_global_got (struct elf_link_hash_entry *h, void *inf ATTRIBUTE_UNUSED)
10945 {
10946   if (h->root.type == bfd_link_hash_indirect)
10947     return TRUE;
10948
10949   merge_got_entries (&h->got.glist);
10950
10951   return TRUE;
10952 }
10953
10954 /* Called via elf_link_hash_traverse to allocate GOT entries for global
10955    symbol H.  */
10956
10957 static bfd_boolean
10958 reallocate_got (struct elf_link_hash_entry *h, void *inf)
10959 {
10960   struct got_entry *gent;
10961
10962   if (h->root.type == bfd_link_hash_indirect)
10963     return TRUE;
10964
10965   for (gent = h->got.glist; gent != NULL; gent = gent->next)
10966     if (!gent->is_indirect)
10967       allocate_got (h, (struct bfd_link_info *) inf, gent);
10968   return TRUE;
10969 }
10970
10971 /* Called on the first multitoc pass after the last call to
10972    ppc64_elf_next_toc_section.  This function removes duplicate GOT
10973    entries.  */
10974
10975 bfd_boolean
10976 ppc64_elf_layout_multitoc (struct bfd_link_info *info)
10977 {
10978   struct ppc_link_hash_table *htab = ppc_hash_table (info);
10979   struct bfd *ibfd, *ibfd2;
10980   bfd_boolean done_something;
10981
10982   htab->multi_toc_needed = htab->toc_curr != elf_gp (info->output_bfd);
10983
10984   if (!htab->do_multi_toc)
10985     return FALSE;
10986
10987   /* Merge global sym got entries within a toc group.  */
10988   elf_link_hash_traverse (&htab->elf, merge_global_got, info);
10989
10990   /* And tlsld_got.  */
10991   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link_next)
10992     {
10993       struct got_entry *ent, *ent2;
10994
10995       if (!is_ppc64_elf (ibfd))
10996         continue;
10997
10998       ent = ppc64_tlsld_got (ibfd);
10999       if (!ent->is_indirect
11000           && ent->got.offset != (bfd_vma) -1)
11001         {
11002           for (ibfd2 = ibfd->link_next; ibfd2 != NULL; ibfd2 = ibfd2->link_next)
11003             {
11004               if (!is_ppc64_elf (ibfd2))
11005                 continue;
11006
11007               ent2 = ppc64_tlsld_got (ibfd2);
11008               if (!ent2->is_indirect
11009                   && ent2->got.offset != (bfd_vma) -1
11010                   && elf_gp (ibfd2) == elf_gp (ibfd))
11011                 {
11012                   ent2->is_indirect = TRUE;
11013                   ent2->got.ent = ent;
11014                 }
11015             }
11016         }
11017     }
11018
11019   /* Zap sizes of got sections.  */
11020   htab->reliplt->rawsize = htab->reliplt->size;
11021   htab->reliplt->size -= htab->got_reli_size;
11022   htab->got_reli_size = 0;
11023
11024   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link_next)
11025     {
11026       asection *got, *relgot;
11027
11028       if (!is_ppc64_elf (ibfd))
11029         continue;
11030
11031       got = ppc64_elf_tdata (ibfd)->got;
11032       if (got != NULL)
11033         {
11034           got->rawsize = got->size;
11035           got->size = 0;
11036           relgot = ppc64_elf_tdata (ibfd)->relgot;
11037           relgot->rawsize = relgot->size;
11038           relgot->size = 0;
11039         }
11040     }
11041
11042   /* Now reallocate the got, local syms first.  We don't need to
11043      allocate section contents again since we never increase size.  */
11044   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link_next)
11045     {
11046       struct got_entry **lgot_ents;
11047       struct got_entry **end_lgot_ents;
11048       struct plt_entry **local_plt;
11049       struct plt_entry **end_local_plt;
11050       unsigned char *lgot_masks;
11051       bfd_size_type locsymcount;
11052       Elf_Internal_Shdr *symtab_hdr;
11053       asection *s;
11054
11055       if (!is_ppc64_elf (ibfd))
11056         continue;
11057
11058       lgot_ents = elf_local_got_ents (ibfd);
11059       if (!lgot_ents)
11060         continue;
11061
11062       symtab_hdr = &elf_symtab_hdr (ibfd);
11063       locsymcount = symtab_hdr->sh_info;
11064       end_lgot_ents = lgot_ents + locsymcount;
11065       local_plt = (struct plt_entry **) end_lgot_ents;
11066       end_local_plt = local_plt + locsymcount;
11067       lgot_masks = (unsigned char *) end_local_plt;
11068       s = ppc64_elf_tdata (ibfd)->got;
11069       for (; lgot_ents < end_lgot_ents; ++lgot_ents, ++lgot_masks)
11070         {
11071           struct got_entry *ent;
11072
11073           for (ent = *lgot_ents; ent != NULL; ent = ent->next)
11074             {
11075               unsigned int ent_size = 8;
11076               unsigned int rel_size = sizeof (Elf64_External_Rela);
11077
11078               ent->got.offset = s->size;
11079               if ((ent->tls_type & *lgot_masks & TLS_GD) != 0)
11080                 {
11081                   ent_size *= 2;
11082                   rel_size *= 2;
11083                 }
11084               s->size += ent_size;
11085               if ((*lgot_masks & PLT_IFUNC) != 0)
11086                 {
11087                   htab->reliplt->size += rel_size;
11088                   htab->got_reli_size += rel_size;
11089                 }
11090               else if (info->shared)
11091                 {
11092                   asection *srel = ppc64_elf_tdata (ibfd)->relgot;
11093                   srel->size += rel_size;
11094                 }
11095             }
11096         }
11097     }
11098
11099   elf_link_hash_traverse (&htab->elf, reallocate_got, info);
11100
11101   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link_next)
11102     {
11103       struct got_entry *ent;
11104
11105       if (!is_ppc64_elf (ibfd))
11106         continue;
11107
11108       ent = ppc64_tlsld_got (ibfd);
11109       if (!ent->is_indirect
11110           && ent->got.offset != (bfd_vma) -1)
11111         {
11112           asection *s = ppc64_elf_tdata (ibfd)->got;
11113           ent->got.offset = s->size;
11114           s->size += 16;
11115           if (info->shared)
11116             {
11117               asection *srel = ppc64_elf_tdata (ibfd)->relgot;
11118               srel->size += sizeof (Elf64_External_Rela);
11119             }
11120         }
11121     }
11122
11123   done_something = htab->reliplt->rawsize != htab->reliplt->size;
11124   if (!done_something)
11125     for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link_next)
11126       {
11127         asection *got;
11128
11129         if (!is_ppc64_elf (ibfd))
11130           continue;
11131
11132         got = ppc64_elf_tdata (ibfd)->got;
11133         if (got != NULL)
11134           {
11135             done_something = got->rawsize != got->size;
11136             if (done_something)
11137               break;
11138           }
11139       }
11140
11141   if (done_something)
11142     (*htab->layout_sections_again) ();
11143
11144   /* Set up for second pass over toc sections to recalculate elf_gp
11145      on input sections.  */
11146   htab->toc_bfd = NULL;
11147   htab->toc_first_sec = NULL;
11148   htab->second_toc_pass = TRUE;
11149   return done_something;
11150 }
11151
11152 /* Called after second pass of multitoc partitioning.  */
11153
11154 void
11155 ppc64_elf_finish_multitoc_partition (struct bfd_link_info *info)
11156 {
11157   struct ppc_link_hash_table *htab = ppc_hash_table (info);
11158
11159   /* After the second pass, toc_curr tracks the TOC offset used
11160      for code sections below in ppc64_elf_next_input_section.  */
11161   htab->toc_curr = TOC_BASE_OFF;
11162 }
11163
11164 /* No toc references were found in ISEC.  If the code in ISEC makes no
11165    calls, then there's no need to use toc adjusting stubs when branching
11166    into ISEC.  Actually, indirect calls from ISEC are OK as they will
11167    load r2.  Returns -1 on error, 0 for no stub needed, 1 for stub
11168    needed, and 2 if a cyclical call-graph was found but no other reason
11169    for a stub was detected.  If called from the top level, a return of
11170    2 means the same as a return of 0.  */
11171
11172 static int
11173 toc_adjusting_stub_needed (struct bfd_link_info *info, asection *isec)
11174 {
11175   int ret;
11176
11177   /* Mark this section as checked.  */
11178   isec->call_check_done = 1;
11179
11180   /* We know none of our code bearing sections will need toc stubs.  */
11181   if ((isec->flags & SEC_LINKER_CREATED) != 0)
11182     return 0;
11183
11184   if (isec->size == 0)
11185     return 0;
11186
11187   if (isec->output_section == NULL)
11188     return 0;
11189
11190   ret = 0;
11191   if (isec->reloc_count != 0)
11192     {
11193       Elf_Internal_Rela *relstart, *rel;
11194       Elf_Internal_Sym *local_syms;
11195       struct ppc_link_hash_table *htab;
11196
11197       relstart = _bfd_elf_link_read_relocs (isec->owner, isec, NULL, NULL,
11198                                             info->keep_memory);
11199       if (relstart == NULL)
11200         return -1;
11201
11202       /* Look for branches to outside of this section.  */
11203       local_syms = NULL;
11204       htab = ppc_hash_table (info);
11205       if (htab == NULL)
11206         return -1;
11207
11208       for (rel = relstart; rel < relstart + isec->reloc_count; ++rel)
11209         {
11210           enum elf_ppc64_reloc_type r_type;
11211           unsigned long r_symndx;
11212           struct elf_link_hash_entry *h;
11213           struct ppc_link_hash_entry *eh;
11214           Elf_Internal_Sym *sym;
11215           asection *sym_sec;
11216           struct _opd_sec_data *opd;
11217           bfd_vma sym_value;
11218           bfd_vma dest;
11219
11220           r_type = ELF64_R_TYPE (rel->r_info);
11221           if (r_type != R_PPC64_REL24
11222               && r_type != R_PPC64_REL14
11223               && r_type != R_PPC64_REL14_BRTAKEN
11224               && r_type != R_PPC64_REL14_BRNTAKEN)
11225             continue;
11226
11227           r_symndx = ELF64_R_SYM (rel->r_info);
11228           if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms, r_symndx,
11229                           isec->owner))
11230             {
11231               ret = -1;
11232               break;
11233             }
11234
11235           /* Calls to dynamic lib functions go through a plt call stub
11236              that uses r2.  */
11237           eh = (struct ppc_link_hash_entry *) h;
11238           if (eh != NULL
11239               && (eh->elf.plt.plist != NULL
11240                   || (eh->oh != NULL
11241                       && ppc_follow_link (eh->oh)->elf.plt.plist != NULL)))
11242             {
11243               ret = 1;
11244               break;
11245             }
11246
11247           if (sym_sec == NULL)
11248             /* Ignore other undefined symbols.  */
11249             continue;
11250
11251           /* Assume branches to other sections not included in the
11252              link need stubs too, to cover -R and absolute syms.  */
11253           if (sym_sec->output_section == NULL)
11254             {
11255               ret = 1;
11256               break;
11257             }
11258
11259           if (h == NULL)
11260             sym_value = sym->st_value;
11261           else
11262             {
11263               if (h->root.type != bfd_link_hash_defined
11264                   && h->root.type != bfd_link_hash_defweak)
11265                 abort ();
11266               sym_value = h->root.u.def.value;
11267             }
11268           sym_value += rel->r_addend;
11269
11270           /* If this branch reloc uses an opd sym, find the code section.  */
11271           opd = get_opd_info (sym_sec);
11272           if (opd != NULL)
11273             {
11274               if (h == NULL && opd->adjust != NULL)
11275                 {
11276                   long adjust;
11277
11278                   adjust = opd->adjust[sym->st_value / 8];
11279                   if (adjust == -1)
11280                     /* Assume deleted functions won't ever be called.  */
11281                     continue;
11282                   sym_value += adjust;
11283                 }
11284
11285               dest = opd_entry_value (sym_sec, sym_value,
11286                                       &sym_sec, NULL, FALSE);
11287               if (dest == (bfd_vma) -1)
11288                 continue;
11289             }
11290           else
11291             dest = (sym_value
11292                     + sym_sec->output_offset
11293                     + sym_sec->output_section->vma);
11294
11295           /* Ignore branch to self.  */
11296           if (sym_sec == isec)
11297             continue;
11298
11299           /* If the called function uses the toc, we need a stub.  */
11300           if (sym_sec->has_toc_reloc
11301               || sym_sec->makes_toc_func_call)
11302             {
11303               ret = 1;
11304               break;
11305             }
11306
11307           /* Assume any branch that needs a long branch stub might in fact
11308              need a plt_branch stub.  A plt_branch stub uses r2.  */
11309           else if (dest - (isec->output_offset
11310                            + isec->output_section->vma
11311                            + rel->r_offset) + (1 << 25) >= (2 << 25))
11312             {
11313               ret = 1;
11314               break;
11315             }
11316
11317           /* If calling back to a section in the process of being
11318              tested, we can't say for sure that no toc adjusting stubs
11319              are needed, so don't return zero.  */
11320           else if (sym_sec->call_check_in_progress)
11321             ret = 2;
11322
11323           /* Branches to another section that itself doesn't have any TOC
11324              references are OK.  Recursively call ourselves to check.  */
11325           else if (!sym_sec->call_check_done)
11326             {
11327               int recur;
11328
11329               /* Mark current section as indeterminate, so that other
11330                  sections that call back to current won't be marked as
11331                  known.  */
11332               isec->call_check_in_progress = 1;
11333               recur = toc_adjusting_stub_needed (info, sym_sec);
11334               isec->call_check_in_progress = 0;
11335
11336               if (recur != 0)
11337                 {
11338                   ret = recur;
11339                   if (recur != 2)
11340                     break;
11341                 }
11342             }
11343         }
11344
11345       if (local_syms != NULL
11346           && (elf_symtab_hdr (isec->owner).contents
11347               != (unsigned char *) local_syms))
11348         free (local_syms);
11349       if (elf_section_data (isec)->relocs != relstart)
11350         free (relstart);
11351     }
11352
11353   if ((ret & 1) == 0
11354       && isec->map_head.s != NULL
11355       && (strcmp (isec->output_section->name, ".init") == 0
11356           || strcmp (isec->output_section->name, ".fini") == 0))
11357     {
11358       if (isec->map_head.s->has_toc_reloc
11359           || isec->map_head.s->makes_toc_func_call)
11360         ret = 1;
11361       else if (!isec->map_head.s->call_check_done)
11362         {
11363           int recur;
11364           isec->call_check_in_progress = 1;
11365           recur = toc_adjusting_stub_needed (info, isec->map_head.s);
11366           isec->call_check_in_progress = 0;
11367           if (recur != 0)
11368             ret = recur;
11369         }
11370     }
11371
11372   if (ret == 1)
11373     isec->makes_toc_func_call = 1;
11374
11375   return ret;
11376 }
11377
11378 /* The linker repeatedly calls this function for each input section,
11379    in the order that input sections are linked into output sections.
11380    Build lists of input sections to determine groupings between which
11381    we may insert linker stubs.  */
11382
11383 bfd_boolean
11384 ppc64_elf_next_input_section (struct bfd_link_info *info, asection *isec)
11385 {
11386   struct ppc_link_hash_table *htab = ppc_hash_table (info);
11387
11388   if (htab == NULL)
11389     return FALSE;
11390
11391   if ((isec->output_section->flags & SEC_CODE) != 0
11392       && isec->output_section->index <= htab->top_index)
11393     {
11394       asection **list = htab->input_list + isec->output_section->index;
11395       /* Steal the link_sec pointer for our list.  */
11396 #define PREV_SEC(sec) (htab->stub_group[(sec)->id].link_sec)
11397       /* This happens to make the list in reverse order,
11398          which is what we want.  */
11399       PREV_SEC (isec) = *list;
11400       *list = isec;
11401     }
11402
11403   if (htab->multi_toc_needed)
11404     {
11405       /* If a code section has a function that uses the TOC then we need
11406          to use the right TOC (obviously).  Also, make sure that .opd gets
11407          the correct TOC value for R_PPC64_TOC relocs that don't have or
11408          can't find their function symbol (shouldn't ever happen now).
11409          Also specially treat .fixup for the linux kernel.  .fixup
11410          contains branches, but only back to the function that hit an
11411          exception.  */
11412       if (isec->has_toc_reloc
11413           || (isec->flags & SEC_CODE) == 0
11414           || strcmp (isec->name, ".fixup") == 0)
11415         {
11416           if (elf_gp (isec->owner) != 0)
11417             htab->toc_curr = elf_gp (isec->owner);
11418         }
11419       else
11420         {
11421           if (!isec->call_check_done
11422               && toc_adjusting_stub_needed (info, isec) < 0)
11423             return FALSE;
11424           /* If we make a local call from this section, ie. a branch
11425              without a following nop, then we have no place to put a
11426              toc restoring insn.  We must use the same toc group as
11427              the callee.
11428              Testing makes_toc_func_call actually tests for *any*
11429              calls to functions that need a good toc pointer.  A more
11430              precise test would be better, as this one will set
11431              incorrect values for pasted .init/.fini fragments.
11432              (Fixed later in check_pasted_section.)  */
11433           if (isec->makes_toc_func_call
11434               && elf_gp (isec->owner) != 0)
11435             htab->toc_curr = elf_gp (isec->owner);
11436         }
11437     }
11438
11439   /* Functions that don't use the TOC can belong in any TOC group.
11440      Use the last TOC base.  */
11441   htab->stub_group[isec->id].toc_off = htab->toc_curr;
11442   return TRUE;
11443 }
11444
11445 /* Check that all .init and .fini sections use the same toc, if they
11446    have toc relocs.  */
11447
11448 static bfd_boolean
11449 check_pasted_section (struct bfd_link_info *info, const char *name)
11450 {
11451   asection *o = bfd_get_section_by_name (info->output_bfd, name);
11452
11453   if (o != NULL)
11454     {
11455       struct ppc_link_hash_table *htab = ppc_hash_table (info);
11456       bfd_vma toc_off = 0;
11457       asection *i;
11458
11459       for (i = o->map_head.s; i != NULL; i = i->map_head.s)
11460         if (i->has_toc_reloc)
11461           {
11462             if (toc_off == 0)
11463               toc_off = htab->stub_group[i->id].toc_off;
11464             else if (toc_off != htab->stub_group[i->id].toc_off)
11465               return FALSE;
11466           }
11467
11468       if (toc_off == 0)
11469         for (i = o->map_head.s; i != NULL; i = i->map_head.s)
11470           if (i->makes_toc_func_call)
11471             {
11472               toc_off = htab->stub_group[i->id].toc_off;
11473               break;
11474             }
11475
11476       /* Make sure the whole pasted function uses the same toc offset.  */
11477       if (toc_off != 0)
11478         for (i = o->map_head.s; i != NULL; i = i->map_head.s)
11479           htab->stub_group[i->id].toc_off = toc_off;
11480     }
11481   return TRUE;
11482 }
11483
11484 bfd_boolean
11485 ppc64_elf_check_init_fini (struct bfd_link_info *info)
11486 {
11487   return (check_pasted_section (info, ".init")
11488           & check_pasted_section (info, ".fini"));
11489 }
11490
11491 /* See whether we can group stub sections together.  Grouping stub
11492    sections may result in fewer stubs.  More importantly, we need to
11493    put all .init* and .fini* stubs at the beginning of the .init or
11494    .fini output sections respectively, because glibc splits the
11495    _init and _fini functions into multiple parts.  Putting a stub in
11496    the middle of a function is not a good idea.  */
11497
11498 static void
11499 group_sections (struct ppc_link_hash_table *htab,
11500                 bfd_size_type stub_group_size,
11501                 bfd_boolean stubs_always_before_branch)
11502 {
11503   asection **list;
11504   bfd_size_type stub14_group_size;
11505   bfd_boolean suppress_size_errors;
11506
11507   suppress_size_errors = FALSE;
11508   stub14_group_size = stub_group_size;
11509   if (stub_group_size == 1)
11510     {
11511       /* Default values.  */
11512       if (stubs_always_before_branch)
11513         {
11514           stub_group_size = 0x1e00000;
11515           stub14_group_size = 0x7800;
11516         }
11517       else
11518         {
11519           stub_group_size = 0x1c00000;
11520           stub14_group_size = 0x7000;
11521         }
11522       suppress_size_errors = TRUE;
11523     }
11524
11525   list = htab->input_list + htab->top_index;
11526   do
11527     {
11528       asection *tail = *list;
11529       while (tail != NULL)
11530         {
11531           asection *curr;
11532           asection *prev;
11533           bfd_size_type total;
11534           bfd_boolean big_sec;
11535           bfd_vma curr_toc;
11536
11537           curr = tail;
11538           total = tail->size;
11539           big_sec = total > (ppc64_elf_section_data (tail) != NULL
11540                              && ppc64_elf_section_data (tail)->has_14bit_branch
11541                              ? stub14_group_size : stub_group_size);
11542           if (big_sec && !suppress_size_errors)
11543             (*_bfd_error_handler) (_("%B section %A exceeds stub group size"),
11544                                      tail->owner, tail);
11545           curr_toc = htab->stub_group[tail->id].toc_off;
11546
11547           while ((prev = PREV_SEC (curr)) != NULL
11548                  && ((total += curr->output_offset - prev->output_offset)
11549                      < (ppc64_elf_section_data (prev) != NULL
11550                         && ppc64_elf_section_data (prev)->has_14bit_branch
11551                         ? stub14_group_size : stub_group_size))
11552                  && htab->stub_group[prev->id].toc_off == curr_toc)
11553             curr = prev;
11554
11555           /* OK, the size from the start of CURR to the end is less
11556              than stub_group_size and thus can be handled by one stub
11557              section.  (or the tail section is itself larger than
11558              stub_group_size, in which case we may be toast.)  We
11559              should really be keeping track of the total size of stubs
11560              added here, as stubs contribute to the final output
11561              section size.  That's a little tricky, and this way will
11562              only break if stubs added make the total size more than
11563              2^25, ie. for the default stub_group_size, if stubs total
11564              more than 2097152 bytes, or nearly 75000 plt call stubs.  */
11565           do
11566             {
11567               prev = PREV_SEC (tail);
11568               /* Set up this stub group.  */
11569               htab->stub_group[tail->id].link_sec = curr;
11570             }
11571           while (tail != curr && (tail = prev) != NULL);
11572
11573           /* But wait, there's more!  Input sections up to stub_group_size
11574              bytes before the stub section can be handled by it too.
11575              Don't do this if we have a really large section after the
11576              stubs, as adding more stubs increases the chance that
11577              branches may not reach into the stub section.  */
11578           if (!stubs_always_before_branch && !big_sec)
11579             {
11580               total = 0;
11581               while (prev != NULL
11582                      && ((total += tail->output_offset - prev->output_offset)
11583                          < (ppc64_elf_section_data (prev) != NULL
11584                             && ppc64_elf_section_data (prev)->has_14bit_branch
11585                             ? stub14_group_size : stub_group_size))
11586                      && htab->stub_group[prev->id].toc_off == curr_toc)
11587                 {
11588                   tail = prev;
11589                   prev = PREV_SEC (tail);
11590                   htab->stub_group[tail->id].link_sec = curr;
11591                 }
11592             }
11593           tail = prev;
11594         }
11595     }
11596   while (list-- != htab->input_list);
11597   free (htab->input_list);
11598 #undef PREV_SEC
11599 }
11600
11601 static const unsigned char glink_eh_frame_cie[] =
11602 {
11603   0, 0, 0, 16,                          /* length.  */
11604   0, 0, 0, 0,                           /* id.  */
11605   1,                                    /* CIE version.  */
11606   'z', 'R', 0,                          /* Augmentation string.  */
11607   4,                                    /* Code alignment.  */
11608   0x78,                                 /* Data alignment.  */
11609   65,                                   /* RA reg.  */
11610   1,                                    /* Augmentation size.  */
11611   DW_EH_PE_pcrel | DW_EH_PE_sdata4,     /* FDE encoding.  */
11612   DW_CFA_def_cfa, 1, 0                  /* def_cfa: r1 offset 0.  */
11613 };
11614
11615 /* Stripping output sections is normally done before dynamic section
11616    symbols have been allocated.  This function is called later, and
11617    handles cases like htab->brlt which is mapped to its own output
11618    section.  */
11619
11620 static void
11621 maybe_strip_output (struct bfd_link_info *info, asection *isec)
11622 {
11623   if (isec->size == 0
11624       && isec->output_section->size == 0
11625       && !(isec->output_section->flags & SEC_KEEP)
11626       && !bfd_section_removed_from_list (info->output_bfd,
11627                                          isec->output_section)
11628       && elf_section_data (isec->output_section)->dynindx == 0)
11629     {
11630       isec->output_section->flags |= SEC_EXCLUDE;
11631       bfd_section_list_remove (info->output_bfd, isec->output_section);
11632       info->output_bfd->section_count--;
11633     }
11634 }
11635
11636 /* Determine and set the size of the stub section for a final link.
11637
11638    The basic idea here is to examine all the relocations looking for
11639    PC-relative calls to a target that is unreachable with a "bl"
11640    instruction.  */
11641
11642 bfd_boolean
11643 ppc64_elf_size_stubs (struct bfd_link_info *info, bfd_signed_vma group_size,
11644                       bfd_boolean plt_static_chain, int plt_thread_safe,
11645                       int plt_stub_align)
11646 {
11647   bfd_size_type stub_group_size;
11648   bfd_boolean stubs_always_before_branch;
11649   struct ppc_link_hash_table *htab = ppc_hash_table (info);
11650
11651   if (htab == NULL)
11652     return FALSE;
11653
11654   htab->plt_static_chain = plt_static_chain;
11655   htab->plt_stub_align = plt_stub_align;
11656   if (plt_thread_safe == -1 && !info->executable)
11657     plt_thread_safe = 1;
11658   if (plt_thread_safe == -1)
11659     {
11660       static const char *const thread_starter[] =
11661         {
11662           "pthread_create",
11663           /* libstdc++ */
11664           "_ZNSt6thread15_M_start_threadESt10shared_ptrINS_10_Impl_baseEE",
11665           /* librt */
11666           "aio_init", "aio_read", "aio_write", "aio_fsync", "lio_listio",
11667           "mq_notify", "create_timer",
11668           /* libanl */
11669           "getaddrinfo_a",
11670           /* libgomp */
11671           "GOMP_parallel_start",
11672           "GOMP_parallel_loop_static_start",
11673           "GOMP_parallel_loop_dynamic_start",
11674           "GOMP_parallel_loop_guided_start",
11675           "GOMP_parallel_loop_runtime_start",
11676           "GOMP_parallel_sections_start",
11677         };
11678       unsigned i;
11679
11680       for (i = 0; i < sizeof (thread_starter)/ sizeof (thread_starter[0]); i++)
11681         {
11682           struct elf_link_hash_entry *h;
11683           h = elf_link_hash_lookup (&htab->elf, thread_starter[i],
11684                                     FALSE, FALSE, TRUE);
11685           plt_thread_safe = h != NULL && h->ref_regular;
11686           if (plt_thread_safe)
11687             break;
11688         }
11689     }
11690   htab->plt_thread_safe = plt_thread_safe;
11691   stubs_always_before_branch = group_size < 0;
11692   if (group_size < 0)
11693     stub_group_size = -group_size;
11694   else
11695     stub_group_size = group_size;
11696
11697   group_sections (htab, stub_group_size, stubs_always_before_branch);
11698
11699   while (1)
11700     {
11701       bfd *input_bfd;
11702       unsigned int bfd_indx;
11703       asection *stub_sec;
11704
11705       htab->stub_iteration += 1;
11706
11707       for (input_bfd = info->input_bfds, bfd_indx = 0;
11708            input_bfd != NULL;
11709            input_bfd = input_bfd->link_next, bfd_indx++)
11710         {
11711           Elf_Internal_Shdr *symtab_hdr;
11712           asection *section;
11713           Elf_Internal_Sym *local_syms = NULL;
11714
11715           if (!is_ppc64_elf (input_bfd))
11716             continue;
11717
11718           /* We'll need the symbol table in a second.  */
11719           symtab_hdr = &elf_symtab_hdr (input_bfd);
11720           if (symtab_hdr->sh_info == 0)
11721             continue;
11722
11723           /* Walk over each section attached to the input bfd.  */
11724           for (section = input_bfd->sections;
11725                section != NULL;
11726                section = section->next)
11727             {
11728               Elf_Internal_Rela *internal_relocs, *irelaend, *irela;
11729
11730               /* If there aren't any relocs, then there's nothing more
11731                  to do.  */
11732               if ((section->flags & SEC_RELOC) == 0
11733                   || (section->flags & SEC_ALLOC) == 0
11734                   || (section->flags & SEC_LOAD) == 0
11735                   || (section->flags & SEC_CODE) == 0
11736                   || section->reloc_count == 0)
11737                 continue;
11738
11739               /* If this section is a link-once section that will be
11740                  discarded, then don't create any stubs.  */
11741               if (section->output_section == NULL
11742                   || section->output_section->owner != info->output_bfd)
11743                 continue;
11744
11745               /* Get the relocs.  */
11746               internal_relocs
11747                 = _bfd_elf_link_read_relocs (input_bfd, section, NULL, NULL,
11748                                              info->keep_memory);
11749               if (internal_relocs == NULL)
11750                 goto error_ret_free_local;
11751
11752               /* Now examine each relocation.  */
11753               irela = internal_relocs;
11754               irelaend = irela + section->reloc_count;
11755               for (; irela < irelaend; irela++)
11756                 {
11757                   enum elf_ppc64_reloc_type r_type;
11758                   unsigned int r_indx;
11759                   enum ppc_stub_type stub_type;
11760                   struct ppc_stub_hash_entry *stub_entry;
11761                   asection *sym_sec, *code_sec;
11762                   bfd_vma sym_value, code_value;
11763                   bfd_vma destination;
11764                   bfd_boolean ok_dest;
11765                   struct ppc_link_hash_entry *hash;
11766                   struct ppc_link_hash_entry *fdh;
11767                   struct elf_link_hash_entry *h;
11768                   Elf_Internal_Sym *sym;
11769                   char *stub_name;
11770                   const asection *id_sec;
11771                   struct _opd_sec_data *opd;
11772                   struct plt_entry *plt_ent;
11773
11774                   r_type = ELF64_R_TYPE (irela->r_info);
11775                   r_indx = ELF64_R_SYM (irela->r_info);
11776
11777                   if (r_type >= R_PPC64_max)
11778                     {
11779                       bfd_set_error (bfd_error_bad_value);
11780                       goto error_ret_free_internal;
11781                     }
11782
11783                   /* Only look for stubs on branch instructions.  */
11784                   if (r_type != R_PPC64_REL24
11785                       && r_type != R_PPC64_REL14
11786                       && r_type != R_PPC64_REL14_BRTAKEN
11787                       && r_type != R_PPC64_REL14_BRNTAKEN)
11788                     continue;
11789
11790                   /* Now determine the call target, its name, value,
11791                      section.  */
11792                   if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms,
11793                                   r_indx, input_bfd))
11794                     goto error_ret_free_internal;
11795                   hash = (struct ppc_link_hash_entry *) h;
11796
11797                   ok_dest = FALSE;
11798                   fdh = NULL;
11799                   sym_value = 0;
11800                   if (hash == NULL)
11801                     {
11802                       sym_value = sym->st_value;
11803                       ok_dest = TRUE;
11804                     }
11805                   else if (hash->elf.root.type == bfd_link_hash_defined
11806                            || hash->elf.root.type == bfd_link_hash_defweak)
11807                     {
11808                       sym_value = hash->elf.root.u.def.value;
11809                       if (sym_sec->output_section != NULL)
11810                         ok_dest = TRUE;
11811                     }
11812                   else if (hash->elf.root.type == bfd_link_hash_undefweak
11813                            || hash->elf.root.type == bfd_link_hash_undefined)
11814                     {
11815                       /* Recognise an old ABI func code entry sym, and
11816                          use the func descriptor sym instead if it is
11817                          defined.  */
11818                       if (hash->elf.root.root.string[0] == '.'
11819                           && (fdh = lookup_fdh (hash, htab)) != NULL)
11820                         {
11821                           if (fdh->elf.root.type == bfd_link_hash_defined
11822                               || fdh->elf.root.type == bfd_link_hash_defweak)
11823                             {
11824                               sym_sec = fdh->elf.root.u.def.section;
11825                               sym_value = fdh->elf.root.u.def.value;
11826                               if (sym_sec->output_section != NULL)
11827                                 ok_dest = TRUE;
11828                             }
11829                           else
11830                             fdh = NULL;
11831                         }
11832                     }
11833                   else
11834                     {
11835                       bfd_set_error (bfd_error_bad_value);
11836                       goto error_ret_free_internal;
11837                     }
11838
11839                   destination = 0;
11840                   if (ok_dest)
11841                     {
11842                       sym_value += irela->r_addend;
11843                       destination = (sym_value
11844                                      + sym_sec->output_offset
11845                                      + sym_sec->output_section->vma);
11846                     }
11847
11848                   code_sec = sym_sec;
11849                   code_value = sym_value;
11850                   opd = get_opd_info (sym_sec);
11851                   if (opd != NULL)
11852                     {
11853                       bfd_vma dest;
11854
11855                       if (hash == NULL && opd->adjust != NULL)
11856                         {
11857                           long adjust = opd->adjust[sym_value / 8];
11858                           if (adjust == -1)
11859                             continue;
11860                           code_value += adjust;
11861                           sym_value += adjust;
11862                         }
11863                       dest = opd_entry_value (sym_sec, sym_value,
11864                                               &code_sec, &code_value, FALSE);
11865                       if (dest != (bfd_vma) -1)
11866                         {
11867                           destination = dest;
11868                           if (fdh != NULL)
11869                             {
11870                               /* Fixup old ABI sym to point at code
11871                                  entry.  */
11872                               hash->elf.root.type = bfd_link_hash_defweak;
11873                               hash->elf.root.u.def.section = code_sec;
11874                               hash->elf.root.u.def.value = code_value;
11875                             }
11876                         }
11877                     }
11878
11879                   /* Determine what (if any) linker stub is needed.  */
11880                   plt_ent = NULL;
11881                   stub_type = ppc_type_of_stub (section, irela, &hash,
11882                                                 &plt_ent, destination);
11883
11884                   if (stub_type != ppc_stub_plt_call)
11885                     {
11886                       /* Check whether we need a TOC adjusting stub.
11887                          Since the linker pastes together pieces from
11888                          different object files when creating the
11889                          _init and _fini functions, it may be that a
11890                          call to what looks like a local sym is in
11891                          fact a call needing a TOC adjustment.  */
11892                       if (code_sec != NULL
11893                           && code_sec->output_section != NULL
11894                           && (htab->stub_group[code_sec->id].toc_off
11895                               != htab->stub_group[section->id].toc_off)
11896                           && (code_sec->has_toc_reloc
11897                               || code_sec->makes_toc_func_call))
11898                         stub_type = ppc_stub_long_branch_r2off;
11899                     }
11900
11901                   if (stub_type == ppc_stub_none)
11902                     continue;
11903
11904                   /* __tls_get_addr calls might be eliminated.  */
11905                   if (stub_type != ppc_stub_plt_call
11906                       && hash != NULL
11907                       && (hash == htab->tls_get_addr
11908                           || hash == htab->tls_get_addr_fd)
11909                       && section->has_tls_reloc
11910                       && irela != internal_relocs)
11911                     {
11912                       /* Get tls info.  */
11913                       unsigned char *tls_mask;
11914
11915                       if (!get_tls_mask (&tls_mask, NULL, NULL, &local_syms,
11916                                          irela - 1, input_bfd))
11917                         goto error_ret_free_internal;
11918                       if (*tls_mask != 0)
11919                         continue;
11920                     }
11921
11922                   if (stub_type == ppc_stub_plt_call
11923                       && irela + 1 < irelaend
11924                       && irela[1].r_offset == irela->r_offset + 4
11925                       && ELF64_R_TYPE (irela[1].r_info) == R_PPC64_TOCSAVE)
11926                     {
11927                       if (!tocsave_find (htab, INSERT,
11928                                          &local_syms, irela + 1, input_bfd))
11929                         goto error_ret_free_internal;
11930                     }
11931                   else if (stub_type == ppc_stub_plt_call)
11932                     stub_type = ppc_stub_plt_call_r2save;
11933
11934                   /* Support for grouping stub sections.  */
11935                   id_sec = htab->stub_group[section->id].link_sec;
11936
11937                   /* Get the name of this stub.  */
11938                   stub_name = ppc_stub_name (id_sec, sym_sec, hash, irela);
11939                   if (!stub_name)
11940                     goto error_ret_free_internal;
11941
11942                   stub_entry = ppc_stub_hash_lookup (&htab->stub_hash_table,
11943                                                      stub_name, FALSE, FALSE);
11944                   if (stub_entry != NULL)
11945                     {
11946                       /* The proper stub has already been created.  */
11947                       free (stub_name);
11948                       if (stub_type == ppc_stub_plt_call_r2save)
11949                         stub_entry->stub_type = stub_type;
11950                       continue;
11951                     }
11952
11953                   stub_entry = ppc_add_stub (stub_name, section, info);
11954                   if (stub_entry == NULL)
11955                     {
11956                       free (stub_name);
11957                     error_ret_free_internal:
11958                       if (elf_section_data (section)->relocs == NULL)
11959                         free (internal_relocs);
11960                     error_ret_free_local:
11961                       if (local_syms != NULL
11962                           && (symtab_hdr->contents
11963                               != (unsigned char *) local_syms))
11964                         free (local_syms);
11965                       return FALSE;
11966                     }
11967
11968                   stub_entry->stub_type = stub_type;
11969                   if (stub_type != ppc_stub_plt_call
11970                       && stub_type != ppc_stub_plt_call_r2save)
11971                     {
11972                       stub_entry->target_value = code_value;
11973                       stub_entry->target_section = code_sec;
11974                     }
11975                   else
11976                     {
11977                       stub_entry->target_value = sym_value;
11978                       stub_entry->target_section = sym_sec;
11979                     }
11980                   stub_entry->h = hash;
11981                   stub_entry->plt_ent = plt_ent;
11982
11983                   if (stub_entry->h != NULL)
11984                     htab->stub_globals += 1;
11985                 }
11986
11987               /* We're done with the internal relocs, free them.  */
11988               if (elf_section_data (section)->relocs != internal_relocs)
11989                 free (internal_relocs);
11990             }
11991
11992           if (local_syms != NULL
11993               && symtab_hdr->contents != (unsigned char *) local_syms)
11994             {
11995               if (!info->keep_memory)
11996                 free (local_syms);
11997               else
11998                 symtab_hdr->contents = (unsigned char *) local_syms;
11999             }
12000         }
12001
12002       /* We may have added some stubs.  Find out the new size of the
12003          stub sections.  */
12004       for (stub_sec = htab->stub_bfd->sections;
12005            stub_sec != NULL;
12006            stub_sec = stub_sec->next)
12007         if ((stub_sec->flags & SEC_LINKER_CREATED) == 0)
12008           {
12009             stub_sec->rawsize = stub_sec->size;
12010             stub_sec->size = 0;
12011             stub_sec->reloc_count = 0;
12012             stub_sec->flags &= ~SEC_RELOC;
12013           }
12014
12015       htab->brlt->size = 0;
12016       htab->brlt->reloc_count = 0;
12017       htab->brlt->flags &= ~SEC_RELOC;
12018       if (htab->relbrlt != NULL)
12019         htab->relbrlt->size = 0;
12020
12021       bfd_hash_traverse (&htab->stub_hash_table, ppc_size_one_stub, info);
12022
12023       if (info->emitrelocations
12024           && htab->glink != NULL && htab->glink->size != 0)
12025         {
12026           htab->glink->reloc_count = 1;
12027           htab->glink->flags |= SEC_RELOC;
12028         }
12029
12030       if (htab->glink_eh_frame != NULL
12031           && !bfd_is_abs_section (htab->glink_eh_frame->output_section)
12032           && htab->glink_eh_frame->output_section->size != 0)
12033         {
12034           size_t size = 0, align;
12035
12036           for (stub_sec = htab->stub_bfd->sections;
12037                stub_sec != NULL;
12038                stub_sec = stub_sec->next)
12039             if ((stub_sec->flags & SEC_LINKER_CREATED) == 0)
12040               size += 20;
12041           if (htab->glink != NULL && htab->glink->size != 0)
12042             size += 24;
12043           if (size != 0)
12044             size += sizeof (glink_eh_frame_cie);
12045           align = 1;
12046           align <<= htab->glink_eh_frame->output_section->alignment_power;
12047           align -= 1;
12048           size = (size + align) & ~align;
12049           htab->glink_eh_frame->rawsize = htab->glink_eh_frame->size;
12050           htab->glink_eh_frame->size = size;
12051         }
12052
12053       if (htab->plt_stub_align != 0)
12054         for (stub_sec = htab->stub_bfd->sections;
12055              stub_sec != NULL;
12056              stub_sec = stub_sec->next)
12057           if ((stub_sec->flags & SEC_LINKER_CREATED) == 0)
12058             stub_sec->size = ((stub_sec->size + (1 << htab->plt_stub_align) - 1)
12059                               & (-1 << htab->plt_stub_align));
12060
12061       for (stub_sec = htab->stub_bfd->sections;
12062            stub_sec != NULL;
12063            stub_sec = stub_sec->next)
12064         if ((stub_sec->flags & SEC_LINKER_CREATED) == 0
12065             && stub_sec->rawsize != stub_sec->size)
12066           break;
12067
12068       /* Exit from this loop when no stubs have been added, and no stubs
12069          have changed size.  */
12070       if (stub_sec == NULL
12071           && (htab->glink_eh_frame == NULL
12072               || htab->glink_eh_frame->rawsize == htab->glink_eh_frame->size))
12073         break;
12074
12075       /* Ask the linker to do its stuff.  */
12076       (*htab->layout_sections_again) ();
12077     }
12078
12079   maybe_strip_output (info, htab->brlt);
12080   if (htab->glink_eh_frame != NULL)
12081     maybe_strip_output (info, htab->glink_eh_frame);
12082
12083   return TRUE;
12084 }
12085
12086 /* Called after we have determined section placement.  If sections
12087    move, we'll be called again.  Provide a value for TOCstart.  */
12088
12089 bfd_vma
12090 ppc64_elf_set_toc (struct bfd_link_info *info, bfd *obfd)
12091 {
12092   asection *s;
12093   bfd_vma TOCstart;
12094
12095   /* The TOC consists of sections .got, .toc, .tocbss, .plt in that
12096      order.  The TOC starts where the first of these sections starts.  */
12097   s = bfd_get_section_by_name (obfd, ".got");
12098   if (s == NULL || (s->flags & SEC_EXCLUDE) != 0)
12099     s = bfd_get_section_by_name (obfd, ".toc");
12100   if (s == NULL || (s->flags & SEC_EXCLUDE) != 0)
12101     s = bfd_get_section_by_name (obfd, ".tocbss");
12102   if (s == NULL || (s->flags & SEC_EXCLUDE) != 0)
12103     s = bfd_get_section_by_name (obfd, ".plt");
12104   if (s == NULL || (s->flags & SEC_EXCLUDE) != 0)
12105     {
12106       /* This may happen for
12107          o  references to TOC base (SYM@toc / TOC[tc0]) without a
12108          .toc directive
12109          o  bad linker script
12110          o --gc-sections and empty TOC sections
12111
12112          FIXME: Warn user?  */
12113
12114       /* Look for a likely section.  We probably won't even be
12115          using TOCstart.  */
12116       for (s = obfd->sections; s != NULL; s = s->next)
12117         if ((s->flags & (SEC_ALLOC | SEC_SMALL_DATA | SEC_READONLY
12118                          | SEC_EXCLUDE))
12119             == (SEC_ALLOC | SEC_SMALL_DATA))
12120           break;
12121       if (s == NULL)
12122         for (s = obfd->sections; s != NULL; s = s->next)
12123           if ((s->flags & (SEC_ALLOC | SEC_SMALL_DATA | SEC_EXCLUDE))
12124               == (SEC_ALLOC | SEC_SMALL_DATA))
12125             break;
12126       if (s == NULL)
12127         for (s = obfd->sections; s != NULL; s = s->next)
12128           if ((s->flags & (SEC_ALLOC | SEC_READONLY | SEC_EXCLUDE))
12129               == SEC_ALLOC)
12130             break;
12131       if (s == NULL)
12132         for (s = obfd->sections; s != NULL; s = s->next)
12133           if ((s->flags & (SEC_ALLOC | SEC_EXCLUDE)) == SEC_ALLOC)
12134             break;
12135     }
12136
12137   TOCstart = 0;
12138   if (s != NULL)
12139     TOCstart = s->output_section->vma + s->output_offset;
12140
12141   _bfd_set_gp_value (obfd, TOCstart);
12142
12143   if (info != NULL && s != NULL && is_ppc64_elf (obfd))
12144     {
12145       struct ppc_link_hash_table *htab = ppc_hash_table (info);
12146
12147       if (htab != NULL
12148           && htab->elf.hgot != NULL)
12149         {
12150           htab->elf.hgot->type = STT_OBJECT;
12151           htab->elf.hgot->root.type = bfd_link_hash_defined;
12152           htab->elf.hgot->root.u.def.value = TOC_BASE_OFF;
12153           htab->elf.hgot->root.u.def.section = s;
12154         }
12155     }
12156   return TOCstart;
12157 }
12158
12159 /* Build all the stubs associated with the current output file.
12160    The stubs are kept in a hash table attached to the main linker
12161    hash table.  This function is called via gldelf64ppc_finish.  */
12162
12163 bfd_boolean
12164 ppc64_elf_build_stubs (bfd_boolean emit_stub_syms,
12165                        struct bfd_link_info *info,
12166                        char **stats)
12167 {
12168   struct ppc_link_hash_table *htab = ppc_hash_table (info);
12169   asection *stub_sec;
12170   bfd_byte *p;
12171   int stub_sec_count = 0;
12172
12173   if (htab == NULL)
12174     return FALSE;
12175
12176   htab->emit_stub_syms = emit_stub_syms;
12177
12178   /* Allocate memory to hold the linker stubs.  */
12179   for (stub_sec = htab->stub_bfd->sections;
12180        stub_sec != NULL;
12181        stub_sec = stub_sec->next)
12182     if ((stub_sec->flags & SEC_LINKER_CREATED) == 0
12183         && stub_sec->size != 0)
12184       {
12185         stub_sec->contents = bfd_zalloc (htab->stub_bfd, stub_sec->size);
12186         if (stub_sec->contents == NULL)
12187           return FALSE;
12188         /* We want to check that built size is the same as calculated
12189            size.  rawsize is a convenient location to use.  */
12190         stub_sec->rawsize = stub_sec->size;
12191         stub_sec->size = 0;
12192       }
12193
12194   if (htab->glink != NULL && htab->glink->size != 0)
12195     {
12196       unsigned int indx;
12197       bfd_vma plt0;
12198
12199       /* Build the .glink plt call stub.  */
12200       if (htab->emit_stub_syms)
12201         {
12202           struct elf_link_hash_entry *h;
12203           h = elf_link_hash_lookup (&htab->elf, "__glink_PLTresolve",
12204                                     TRUE, FALSE, FALSE);
12205           if (h == NULL)
12206             return FALSE;
12207           if (h->root.type == bfd_link_hash_new)
12208             {
12209               h->root.type = bfd_link_hash_defined;
12210               h->root.u.def.section = htab->glink;
12211               h->root.u.def.value = 8;
12212               h->ref_regular = 1;
12213               h->def_regular = 1;
12214               h->ref_regular_nonweak = 1;
12215               h->forced_local = 1;
12216               h->non_elf = 0;
12217             }
12218         }
12219       plt0 = htab->plt->output_section->vma + htab->plt->output_offset - 16;
12220       if (info->emitrelocations)
12221         {
12222           Elf_Internal_Rela *r = get_relocs (htab->glink, 1);
12223           if (r == NULL)
12224             return FALSE;
12225           r->r_offset = (htab->glink->output_offset
12226                          + htab->glink->output_section->vma);
12227           r->r_info = ELF64_R_INFO (0, R_PPC64_REL64);
12228           r->r_addend = plt0;
12229         }
12230       p = htab->glink->contents;
12231       plt0 -= htab->glink->output_section->vma + htab->glink->output_offset;
12232       bfd_put_64 (htab->glink->owner, plt0, p);
12233       p += 8;
12234       bfd_put_32 (htab->glink->owner, MFLR_R12, p);
12235       p += 4;
12236       bfd_put_32 (htab->glink->owner, BCL_20_31, p);
12237       p += 4;
12238       bfd_put_32 (htab->glink->owner, MFLR_R11, p);
12239       p += 4;
12240       bfd_put_32 (htab->glink->owner, LD_R2_0R11 | (-16 & 0xfffc), p);
12241       p += 4;
12242       bfd_put_32 (htab->glink->owner, MTLR_R12, p);
12243       p += 4;
12244       bfd_put_32 (htab->glink->owner, ADD_R11_R2_R11, p);
12245       p += 4;
12246       bfd_put_32 (htab->glink->owner, LD_R12_0R11, p);
12247       p += 4;
12248       bfd_put_32 (htab->glink->owner, LD_R2_0R11 | 8, p);
12249       p += 4;
12250       bfd_put_32 (htab->glink->owner, MTCTR_R12, p);
12251       p += 4;
12252       bfd_put_32 (htab->glink->owner, LD_R11_0R11 | 16, p);
12253       p += 4;
12254       bfd_put_32 (htab->glink->owner, BCTR, p);
12255       p += 4;
12256       while (p - htab->glink->contents < GLINK_CALL_STUB_SIZE)
12257         {
12258           bfd_put_32 (htab->glink->owner, NOP, p);
12259           p += 4;
12260         }
12261
12262       /* Build the .glink lazy link call stubs.  */
12263       indx = 0;
12264       while (p < htab->glink->contents + htab->glink->size)
12265         {
12266           if (indx < 0x8000)
12267             {
12268               bfd_put_32 (htab->glink->owner, LI_R0_0 | indx, p);
12269               p += 4;
12270             }
12271           else
12272             {
12273               bfd_put_32 (htab->glink->owner, LIS_R0_0 | PPC_HI (indx), p);
12274               p += 4;
12275               bfd_put_32 (htab->glink->owner, ORI_R0_R0_0 | PPC_LO (indx), p);
12276               p += 4;
12277             }
12278           bfd_put_32 (htab->glink->owner,
12279                       B_DOT | ((htab->glink->contents - p + 8) & 0x3fffffc), p);
12280           indx++;
12281           p += 4;
12282         }
12283       htab->glink->rawsize = p - htab->glink->contents;
12284     }
12285
12286   if (htab->brlt->size != 0)
12287     {
12288       htab->brlt->contents = bfd_zalloc (htab->brlt->owner,
12289                                          htab->brlt->size);
12290       if (htab->brlt->contents == NULL)
12291         return FALSE;
12292     }
12293   if (htab->relbrlt != NULL && htab->relbrlt->size != 0)
12294     {
12295       htab->relbrlt->contents = bfd_zalloc (htab->relbrlt->owner,
12296                                             htab->relbrlt->size);
12297       if (htab->relbrlt->contents == NULL)
12298         return FALSE;
12299     }
12300
12301   if (htab->glink_eh_frame != NULL
12302       && htab->glink_eh_frame->size != 0)
12303     {
12304       bfd_vma val;
12305       bfd_byte *last_fde;
12306       size_t last_fde_len, size, align, pad;
12307
12308       p = bfd_zalloc (htab->glink_eh_frame->owner, htab->glink_eh_frame->size);
12309       if (p == NULL)
12310         return FALSE;
12311       htab->glink_eh_frame->contents = p;
12312       last_fde = p;
12313
12314       htab->glink_eh_frame->rawsize = htab->glink_eh_frame->size;
12315
12316       memcpy (p, glink_eh_frame_cie, sizeof (glink_eh_frame_cie));
12317       /* CIE length (rewrite in case little-endian).  */
12318       last_fde_len = sizeof (glink_eh_frame_cie) - 4;
12319       bfd_put_32 (htab->elf.dynobj, last_fde_len, p);
12320       p += sizeof (glink_eh_frame_cie);
12321
12322       for (stub_sec = htab->stub_bfd->sections;
12323            stub_sec != NULL;
12324            stub_sec = stub_sec->next)
12325         if ((stub_sec->flags & SEC_LINKER_CREATED) == 0)
12326           {
12327             last_fde = p;
12328             last_fde_len = 16;
12329             /* FDE length.  */
12330             bfd_put_32 (htab->elf.dynobj, 16, p);
12331             p += 4;
12332             /* CIE pointer.  */
12333             val = p - htab->glink_eh_frame->contents;
12334             bfd_put_32 (htab->elf.dynobj, val, p);
12335             p += 4;
12336             /* Offset to stub section.  */
12337             val = (stub_sec->output_section->vma
12338                    + stub_sec->output_offset);
12339             val -= (htab->glink_eh_frame->output_section->vma
12340                     + htab->glink_eh_frame->output_offset);
12341             val -= p - htab->glink_eh_frame->contents;
12342             if (val + 0x80000000 > 0xffffffff)
12343               {
12344                 info->callbacks->einfo
12345                   (_("%P: %s offset too large for .eh_frame sdata4 encoding"),
12346                    stub_sec->name);
12347                 return FALSE;
12348               }
12349             bfd_put_32 (htab->elf.dynobj, val, p);
12350             p += 4;
12351             /* stub section size.  */
12352             bfd_put_32 (htab->elf.dynobj, stub_sec->rawsize, p);
12353             p += 4;
12354             /* Augmentation.  */
12355             p += 1;
12356             /* Pad.  */
12357             p += 3;
12358           }
12359       if (htab->glink != NULL && htab->glink->size != 0)
12360         {
12361           last_fde = p;
12362           last_fde_len = 20;
12363           /* FDE length.  */
12364           bfd_put_32 (htab->elf.dynobj, 20, p);
12365           p += 4;
12366           /* CIE pointer.  */
12367           val = p - htab->glink_eh_frame->contents;
12368           bfd_put_32 (htab->elf.dynobj, val, p);
12369           p += 4;
12370           /* Offset to .glink.  */
12371           val = (htab->glink->output_section->vma
12372                  + htab->glink->output_offset
12373                  + 8);
12374           val -= (htab->glink_eh_frame->output_section->vma
12375                   + htab->glink_eh_frame->output_offset);
12376           val -= p - htab->glink_eh_frame->contents;
12377           if (val + 0x80000000 > 0xffffffff)
12378             {
12379               info->callbacks->einfo
12380                 (_("%P: %s offset too large for .eh_frame sdata4 encoding"),
12381                  htab->glink->name);
12382               return FALSE;
12383             }
12384           bfd_put_32 (htab->elf.dynobj, val, p);
12385           p += 4;
12386           /* .glink size.  */
12387           bfd_put_32 (htab->elf.dynobj, htab->glink->rawsize - 8, p);
12388           p += 4;
12389           /* Augmentation.  */
12390           p += 1;
12391
12392           *p++ = DW_CFA_advance_loc + 1;
12393           *p++ = DW_CFA_register;
12394           *p++ = 65;
12395           *p++ = 12;
12396           *p++ = DW_CFA_advance_loc + 4;
12397           *p++ = DW_CFA_restore_extended;
12398           *p++ = 65;
12399         }
12400       /* Subsume any padding into the last FDE if user .eh_frame
12401          sections are aligned more than glink_eh_frame.  Otherwise any
12402          zero padding will be seen as a terminator.  */
12403       size = p - htab->glink_eh_frame->contents;
12404       align = 1;
12405       align <<= htab->glink_eh_frame->output_section->alignment_power;
12406       align -= 1;
12407       pad = ((size + align) & ~align) - size;
12408       htab->glink_eh_frame->size = size + pad;
12409       bfd_put_32 (htab->elf.dynobj, last_fde_len + pad, last_fde);
12410     }
12411
12412   /* Build the stubs as directed by the stub hash table.  */
12413   bfd_hash_traverse (&htab->stub_hash_table, ppc_build_one_stub, info);
12414
12415   if (htab->relbrlt != NULL)
12416     htab->relbrlt->reloc_count = 0;
12417
12418   if (htab->plt_stub_align != 0)
12419     for (stub_sec = htab->stub_bfd->sections;
12420          stub_sec != NULL;
12421          stub_sec = stub_sec->next)
12422       if ((stub_sec->flags & SEC_LINKER_CREATED) == 0)
12423         stub_sec->size = ((stub_sec->size + (1 << htab->plt_stub_align) - 1)
12424                           & (-1 << htab->plt_stub_align));
12425
12426   for (stub_sec = htab->stub_bfd->sections;
12427        stub_sec != NULL;
12428        stub_sec = stub_sec->next)
12429     if ((stub_sec->flags & SEC_LINKER_CREATED) == 0)
12430       {
12431         stub_sec_count += 1;
12432         if (stub_sec->rawsize != stub_sec->size)
12433           break;
12434       }
12435
12436   if (stub_sec != NULL
12437       || htab->glink->rawsize != htab->glink->size
12438       || (htab->glink_eh_frame != NULL
12439           && htab->glink_eh_frame->rawsize != htab->glink_eh_frame->size))
12440     {
12441       htab->stub_error = TRUE;
12442       info->callbacks->einfo (_("%P: stubs don't match calculated size\n"));
12443     }
12444
12445   if (htab->stub_error)
12446     return FALSE;
12447
12448   if (stats != NULL)
12449     {
12450       *stats = bfd_malloc (500);
12451       if (*stats == NULL)
12452         return FALSE;
12453
12454       sprintf (*stats, _("linker stubs in %u group%s\n"
12455                          "  branch       %lu\n"
12456                          "  toc adjust   %lu\n"
12457                          "  long branch  %lu\n"
12458                          "  long toc adj %lu\n"
12459                          "  plt call     %lu\n"
12460                          "  plt call toc %lu"),
12461                stub_sec_count,
12462                stub_sec_count == 1 ? "" : "s",
12463                htab->stub_count[ppc_stub_long_branch - 1],
12464                htab->stub_count[ppc_stub_long_branch_r2off - 1],
12465                htab->stub_count[ppc_stub_plt_branch - 1],
12466                htab->stub_count[ppc_stub_plt_branch_r2off - 1],
12467                htab->stub_count[ppc_stub_plt_call - 1],
12468                htab->stub_count[ppc_stub_plt_call_r2save - 1]);
12469     }
12470   return TRUE;
12471 }
12472
12473 /* This function undoes the changes made by add_symbol_adjust.  */
12474
12475 static bfd_boolean
12476 undo_symbol_twiddle (struct elf_link_hash_entry *h, void *inf ATTRIBUTE_UNUSED)
12477 {
12478   struct ppc_link_hash_entry *eh;
12479
12480   if (h->root.type == bfd_link_hash_indirect)
12481     return TRUE;
12482
12483   eh = (struct ppc_link_hash_entry *) h;
12484   if (eh->elf.root.type != bfd_link_hash_undefweak || !eh->was_undefined)
12485     return TRUE;
12486
12487   eh->elf.root.type = bfd_link_hash_undefined;
12488   return TRUE;
12489 }
12490
12491 void
12492 ppc64_elf_restore_symbols (struct bfd_link_info *info)
12493 {
12494   struct ppc_link_hash_table *htab = ppc_hash_table (info);
12495
12496   if (htab != NULL)
12497     elf_link_hash_traverse (&htab->elf, undo_symbol_twiddle, info);
12498 }
12499
12500 /* What to do when ld finds relocations against symbols defined in
12501    discarded sections.  */
12502
12503 static unsigned int
12504 ppc64_elf_action_discarded (asection *sec)
12505 {
12506   if (strcmp (".opd", sec->name) == 0)
12507     return 0;
12508
12509   if (strcmp (".toc", sec->name) == 0)
12510     return 0;
12511
12512   if (strcmp (".toc1", sec->name) == 0)
12513     return 0;
12514
12515   return _bfd_elf_default_action_discarded (sec);
12516 }
12517
12518 /* The RELOCATE_SECTION function is called by the ELF backend linker
12519    to handle the relocations for a section.
12520
12521    The relocs are always passed as Rela structures; if the section
12522    actually uses Rel structures, the r_addend field will always be
12523    zero.
12524
12525    This function is responsible for adjust the section contents as
12526    necessary, and (if using Rela relocs and generating a
12527    relocatable output file) adjusting the reloc addend as
12528    necessary.
12529
12530    This function does not have to worry about setting the reloc
12531    address or the reloc symbol index.
12532
12533    LOCAL_SYMS is a pointer to the swapped in local symbols.
12534
12535    LOCAL_SECTIONS is an array giving the section in the input file
12536    corresponding to the st_shndx field of each local symbol.
12537
12538    The global hash table entry for the global symbols can be found
12539    via elf_sym_hashes (input_bfd).
12540
12541    When generating relocatable output, this function must handle
12542    STB_LOCAL/STT_SECTION symbols specially.  The output symbol is
12543    going to be the section symbol corresponding to the output
12544    section, which means that the addend must be adjusted
12545    accordingly.  */
12546
12547 static bfd_boolean
12548 ppc64_elf_relocate_section (bfd *output_bfd,
12549                             struct bfd_link_info *info,
12550                             bfd *input_bfd,
12551                             asection *input_section,
12552                             bfd_byte *contents,
12553                             Elf_Internal_Rela *relocs,
12554                             Elf_Internal_Sym *local_syms,
12555                             asection **local_sections)
12556 {
12557   struct ppc_link_hash_table *htab;
12558   Elf_Internal_Shdr *symtab_hdr;
12559   struct elf_link_hash_entry **sym_hashes;
12560   Elf_Internal_Rela *rel;
12561   Elf_Internal_Rela *relend;
12562   Elf_Internal_Rela outrel;
12563   bfd_byte *loc;
12564   struct got_entry **local_got_ents;
12565   bfd_vma TOCstart;
12566   bfd_boolean ret = TRUE;
12567   bfd_boolean is_opd;
12568   /* Assume 'at' branch hints.  */
12569   bfd_boolean is_isa_v2 = TRUE;
12570   bfd_vma d_offset = (bfd_big_endian (output_bfd) ? 2 : 0);
12571
12572   /* Initialize howto table if needed.  */
12573   if (!ppc64_elf_howto_table[R_PPC64_ADDR32])
12574     ppc_howto_init ();
12575
12576   htab = ppc_hash_table (info);
12577   if (htab == NULL)
12578     return FALSE;
12579
12580   /* Don't relocate stub sections.  */
12581   if (input_section->owner == htab->stub_bfd)
12582     return TRUE;
12583
12584   BFD_ASSERT (is_ppc64_elf (input_bfd));
12585
12586   local_got_ents = elf_local_got_ents (input_bfd);
12587   TOCstart = elf_gp (output_bfd);
12588   symtab_hdr = &elf_symtab_hdr (input_bfd);
12589   sym_hashes = elf_sym_hashes (input_bfd);
12590   is_opd = ppc64_elf_section_data (input_section)->sec_type == sec_opd;
12591
12592   rel = relocs;
12593   relend = relocs + input_section->reloc_count;
12594   for (; rel < relend; rel++)
12595     {
12596       enum elf_ppc64_reloc_type r_type;
12597       bfd_vma addend;
12598       bfd_reloc_status_type r;
12599       Elf_Internal_Sym *sym;
12600       asection *sec;
12601       struct elf_link_hash_entry *h_elf;
12602       struct ppc_link_hash_entry *h;
12603       struct ppc_link_hash_entry *fdh;
12604       const char *sym_name;
12605       unsigned long r_symndx, toc_symndx;
12606       bfd_vma toc_addend;
12607       unsigned char tls_mask, tls_gd, tls_type;
12608       unsigned char sym_type;
12609       bfd_vma relocation;
12610       bfd_boolean unresolved_reloc;
12611       bfd_boolean warned;
12612       enum { DEST_NORMAL, DEST_OPD, DEST_STUB } reloc_dest;
12613       unsigned int insn;
12614       unsigned int mask;
12615       struct ppc_stub_hash_entry *stub_entry;
12616       bfd_vma max_br_offset;
12617       bfd_vma from;
12618       const Elf_Internal_Rela orig_rel = *rel;
12619
12620       r_type = ELF64_R_TYPE (rel->r_info);
12621       r_symndx = ELF64_R_SYM (rel->r_info);
12622
12623       /* For old style R_PPC64_TOC relocs with a zero symbol, use the
12624          symbol of the previous ADDR64 reloc.  The symbol gives us the
12625          proper TOC base to use.  */
12626       if (rel->r_info == ELF64_R_INFO (0, R_PPC64_TOC)
12627           && rel != relocs
12628           && ELF64_R_TYPE (rel[-1].r_info) == R_PPC64_ADDR64
12629           && is_opd)
12630         r_symndx = ELF64_R_SYM (rel[-1].r_info);
12631
12632       sym = NULL;
12633       sec = NULL;
12634       h_elf = NULL;
12635       sym_name = NULL;
12636       unresolved_reloc = FALSE;
12637       warned = FALSE;
12638
12639       if (r_symndx < symtab_hdr->sh_info)
12640         {
12641           /* It's a local symbol.  */
12642           struct _opd_sec_data *opd;
12643
12644           sym = local_syms + r_symndx;
12645           sec = local_sections[r_symndx];
12646           sym_name = bfd_elf_sym_name (input_bfd, symtab_hdr, sym, sec);
12647           sym_type = ELF64_ST_TYPE (sym->st_info);
12648           relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
12649           opd = get_opd_info (sec);
12650           if (opd != NULL && opd->adjust != NULL)
12651             {
12652               long adjust = opd->adjust[(sym->st_value + rel->r_addend) / 8];
12653               if (adjust == -1)
12654                 relocation = 0;
12655               else
12656                 {
12657                   /* If this is a relocation against the opd section sym
12658                      and we have edited .opd, adjust the reloc addend so
12659                      that ld -r and ld --emit-relocs output is correct.
12660                      If it is a reloc against some other .opd symbol,
12661                      then the symbol value will be adjusted later.  */
12662                   if (ELF_ST_TYPE (sym->st_info) == STT_SECTION)
12663                     rel->r_addend += adjust;
12664                   else
12665                     relocation += adjust;
12666                 }
12667             }
12668         }
12669       else
12670         {
12671           RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
12672                                    r_symndx, symtab_hdr, sym_hashes,
12673                                    h_elf, sec, relocation,
12674                                    unresolved_reloc, warned);
12675           sym_name = h_elf->root.root.string;
12676           sym_type = h_elf->type;
12677           if (sec != NULL
12678               && sec->owner == output_bfd
12679               && strcmp (sec->name, ".opd") == 0)
12680             {
12681               /* This is a symbol defined in a linker script.  All
12682                  such are defined in output sections, even those
12683                  defined by simple assignment from a symbol defined in
12684                  an input section.  Transfer the symbol to an
12685                  appropriate input .opd section, so that a branch to
12686                  this symbol will be mapped to the location specified
12687                  by the opd entry.  */
12688               struct bfd_link_order *lo;
12689               for (lo = sec->map_head.link_order; lo != NULL; lo = lo->next)
12690                 if (lo->type == bfd_indirect_link_order)
12691                   {
12692                     asection *isec = lo->u.indirect.section;
12693                     if (h_elf->root.u.def.value >= isec->output_offset
12694                         && h_elf->root.u.def.value < (isec->output_offset
12695                                                       + isec->size))
12696                       {
12697                         h_elf->root.u.def.value -= isec->output_offset;
12698                         h_elf->root.u.def.section = isec;
12699                         sec = isec;
12700                         break;
12701                       }
12702                   }
12703             }
12704         }
12705       h = (struct ppc_link_hash_entry *) h_elf;
12706
12707       if (sec != NULL && discarded_section (sec))
12708         RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
12709                                          rel, 1, relend,
12710                                          ppc64_elf_howto_table[r_type], 0,
12711                                          contents);
12712
12713       if (info->relocatable)
12714         continue;
12715
12716       if (h != NULL && &h->elf == htab->elf.hgot)
12717         {
12718           relocation = (TOCstart
12719                         + htab->stub_group[input_section->id].toc_off);
12720           sec = bfd_abs_section_ptr;
12721           unresolved_reloc = FALSE;
12722         }
12723
12724       /* TLS optimizations.  Replace instruction sequences and relocs
12725          based on information we collected in tls_optimize.  We edit
12726          RELOCS so that --emit-relocs will output something sensible
12727          for the final instruction stream.  */
12728       tls_mask = 0;
12729       tls_gd = 0;
12730       toc_symndx = 0;
12731       if (h != NULL)
12732         tls_mask = h->tls_mask;
12733       else if (local_got_ents != NULL)
12734         {
12735           struct plt_entry **local_plt = (struct plt_entry **)
12736             (local_got_ents + symtab_hdr->sh_info);
12737           unsigned char *lgot_masks = (unsigned char *)
12738             (local_plt + symtab_hdr->sh_info);
12739           tls_mask = lgot_masks[r_symndx];
12740         }
12741       if (tls_mask == 0
12742           && (r_type == R_PPC64_TLS
12743               || r_type == R_PPC64_TLSGD
12744               || r_type == R_PPC64_TLSLD))
12745         {
12746           /* Check for toc tls entries.  */
12747           unsigned char *toc_tls;
12748
12749           if (!get_tls_mask (&toc_tls, &toc_symndx, &toc_addend,
12750                              &local_syms, rel, input_bfd))
12751             return FALSE;
12752
12753           if (toc_tls)
12754             tls_mask = *toc_tls;
12755         }
12756
12757       /* Check that tls relocs are used with tls syms, and non-tls
12758          relocs are used with non-tls syms.  */
12759       if (r_symndx != STN_UNDEF
12760           && r_type != R_PPC64_NONE
12761           && (h == NULL
12762               || h->elf.root.type == bfd_link_hash_defined
12763               || h->elf.root.type == bfd_link_hash_defweak)
12764           && (IS_PPC64_TLS_RELOC (r_type)
12765               != (sym_type == STT_TLS
12766                   || (sym_type == STT_SECTION
12767                       && (sec->flags & SEC_THREAD_LOCAL) != 0))))
12768         {
12769           if (tls_mask != 0
12770               && (r_type == R_PPC64_TLS
12771                   || r_type == R_PPC64_TLSGD
12772                   || r_type == R_PPC64_TLSLD))
12773             /* R_PPC64_TLS is OK against a symbol in the TOC.  */
12774             ;
12775           else
12776             info->callbacks->einfo
12777               (!IS_PPC64_TLS_RELOC (r_type)
12778                ? _("%P: %H: %s used with TLS symbol `%T'\n")
12779                : _("%P: %H: %s used with non-TLS symbol `%T'\n"),
12780                input_bfd, input_section, rel->r_offset,
12781                ppc64_elf_howto_table[r_type]->name,
12782                sym_name);
12783         }
12784
12785       /* Ensure reloc mapping code below stays sane.  */
12786       if (R_PPC64_TOC16_LO_DS != R_PPC64_TOC16_DS + 1
12787           || R_PPC64_TOC16_LO != R_PPC64_TOC16 + 1
12788           || (R_PPC64_GOT_TLSLD16 & 3)    != (R_PPC64_GOT_TLSGD16 & 3)
12789           || (R_PPC64_GOT_TLSLD16_LO & 3) != (R_PPC64_GOT_TLSGD16_LO & 3)
12790           || (R_PPC64_GOT_TLSLD16_HI & 3) != (R_PPC64_GOT_TLSGD16_HI & 3)
12791           || (R_PPC64_GOT_TLSLD16_HA & 3) != (R_PPC64_GOT_TLSGD16_HA & 3)
12792           || (R_PPC64_GOT_TLSLD16 & 3)    != (R_PPC64_GOT_TPREL16_DS & 3)
12793           || (R_PPC64_GOT_TLSLD16_LO & 3) != (R_PPC64_GOT_TPREL16_LO_DS & 3)
12794           || (R_PPC64_GOT_TLSLD16_HI & 3) != (R_PPC64_GOT_TPREL16_HI & 3)
12795           || (R_PPC64_GOT_TLSLD16_HA & 3) != (R_PPC64_GOT_TPREL16_HA & 3))
12796         abort ();
12797
12798       switch (r_type)
12799         {
12800         default:
12801           break;
12802
12803         case R_PPC64_LO_DS_OPT:
12804           insn = bfd_get_32 (output_bfd, contents + rel->r_offset - d_offset);
12805           if ((insn & (0x3f << 26)) != 58u << 26)
12806             abort ();
12807           insn += (14u << 26) - (58u << 26);
12808           bfd_put_32 (output_bfd, insn, contents + rel->r_offset - d_offset);
12809           r_type = R_PPC64_TOC16_LO;
12810           rel->r_info = ELF64_R_INFO (r_symndx, r_type);
12811           break;
12812
12813         case R_PPC64_TOC16:
12814         case R_PPC64_TOC16_LO:
12815         case R_PPC64_TOC16_DS:
12816         case R_PPC64_TOC16_LO_DS:
12817           {
12818             /* Check for toc tls entries.  */
12819             unsigned char *toc_tls;
12820             int retval;
12821
12822             retval = get_tls_mask (&toc_tls, &toc_symndx, &toc_addend,
12823                                    &local_syms, rel, input_bfd);
12824             if (retval == 0)
12825               return FALSE;
12826
12827             if (toc_tls)
12828               {
12829                 tls_mask = *toc_tls;
12830                 if (r_type == R_PPC64_TOC16_DS
12831                     || r_type == R_PPC64_TOC16_LO_DS)
12832                   {
12833                     if (tls_mask != 0
12834                         && (tls_mask & (TLS_DTPREL | TLS_TPREL)) == 0)
12835                       goto toctprel;
12836                   }
12837                 else
12838                   {
12839                     /* If we found a GD reloc pair, then we might be
12840                        doing a GD->IE transition.  */
12841                     if (retval == 2)
12842                       {
12843                         tls_gd = TLS_TPRELGD;
12844                         if (tls_mask != 0 && (tls_mask & TLS_GD) == 0)
12845                           goto tls_ldgd_opt;
12846                       }
12847                     else if (retval == 3)
12848                       {
12849                         if (tls_mask != 0 && (tls_mask & TLS_LD) == 0)
12850                           goto tls_ldgd_opt;
12851                       }
12852                   }
12853               }
12854           }
12855           break;
12856
12857         case R_PPC64_GOT_TPREL16_HI:
12858         case R_PPC64_GOT_TPREL16_HA:
12859           if (tls_mask != 0
12860               && (tls_mask & TLS_TPREL) == 0)
12861             {
12862               rel->r_offset -= d_offset;
12863               bfd_put_32 (output_bfd, NOP, contents + rel->r_offset);
12864               r_type = R_PPC64_NONE;
12865               rel->r_info = ELF64_R_INFO (r_symndx, r_type);
12866             }
12867           break;
12868
12869         case R_PPC64_GOT_TPREL16_DS:
12870         case R_PPC64_GOT_TPREL16_LO_DS:
12871           if (tls_mask != 0
12872               && (tls_mask & TLS_TPREL) == 0)
12873             {
12874             toctprel:
12875               insn = bfd_get_32 (output_bfd, contents + rel->r_offset - d_offset);
12876               insn &= 31 << 21;
12877               insn |= 0x3c0d0000;       /* addis 0,13,0 */
12878               bfd_put_32 (output_bfd, insn, contents + rel->r_offset - d_offset);
12879               r_type = R_PPC64_TPREL16_HA;
12880               if (toc_symndx != 0)
12881                 {
12882                   rel->r_info = ELF64_R_INFO (toc_symndx, r_type);
12883                   rel->r_addend = toc_addend;
12884                   /* We changed the symbol.  Start over in order to
12885                      get h, sym, sec etc. right.  */
12886                   rel--;
12887                   continue;
12888                 }
12889               else
12890                 rel->r_info = ELF64_R_INFO (r_symndx, r_type);
12891             }
12892           break;
12893
12894         case R_PPC64_TLS:
12895           if (tls_mask != 0
12896               && (tls_mask & TLS_TPREL) == 0)
12897             {
12898               insn = bfd_get_32 (output_bfd, contents + rel->r_offset);
12899               insn = _bfd_elf_ppc_at_tls_transform (insn, 13);
12900               if (insn == 0)
12901                 abort ();
12902               bfd_put_32 (output_bfd, insn, contents + rel->r_offset);
12903               /* Was PPC64_TLS which sits on insn boundary, now
12904                  PPC64_TPREL16_LO which is at low-order half-word.  */
12905               rel->r_offset += d_offset;
12906               r_type = R_PPC64_TPREL16_LO;
12907               if (toc_symndx != 0)
12908                 {
12909                   rel->r_info = ELF64_R_INFO (toc_symndx, r_type);
12910                   rel->r_addend = toc_addend;
12911                   /* We changed the symbol.  Start over in order to
12912                      get h, sym, sec etc. right.  */
12913                   rel--;
12914                   continue;
12915                 }
12916               else
12917                 rel->r_info = ELF64_R_INFO (r_symndx, r_type);
12918             }
12919           break;
12920
12921         case R_PPC64_GOT_TLSGD16_HI:
12922         case R_PPC64_GOT_TLSGD16_HA:
12923           tls_gd = TLS_TPRELGD;
12924           if (tls_mask != 0 && (tls_mask & TLS_GD) == 0)
12925             goto tls_gdld_hi;
12926           break;
12927
12928         case R_PPC64_GOT_TLSLD16_HI:
12929         case R_PPC64_GOT_TLSLD16_HA:
12930           if (tls_mask != 0 && (tls_mask & TLS_LD) == 0)
12931             {
12932             tls_gdld_hi:
12933               if ((tls_mask & tls_gd) != 0)
12934                 r_type = (((r_type - (R_PPC64_GOT_TLSGD16 & 3)) & 3)
12935                           + R_PPC64_GOT_TPREL16_DS);
12936               else
12937                 {
12938                   rel->r_offset -= d_offset;
12939                   bfd_put_32 (output_bfd, NOP, contents + rel->r_offset);
12940                   r_type = R_PPC64_NONE;
12941                 }
12942               rel->r_info = ELF64_R_INFO (r_symndx, r_type);
12943             }
12944           break;
12945
12946         case R_PPC64_GOT_TLSGD16:
12947         case R_PPC64_GOT_TLSGD16_LO:
12948           tls_gd = TLS_TPRELGD;
12949           if (tls_mask != 0 && (tls_mask & TLS_GD) == 0)
12950             goto tls_ldgd_opt;
12951           break;
12952
12953         case R_PPC64_GOT_TLSLD16:
12954         case R_PPC64_GOT_TLSLD16_LO:
12955           if (tls_mask != 0 && (tls_mask & TLS_LD) == 0)
12956             {
12957               unsigned int insn1, insn2, insn3;
12958               bfd_vma offset;
12959
12960             tls_ldgd_opt:
12961               offset = (bfd_vma) -1;
12962               /* If not using the newer R_PPC64_TLSGD/LD to mark
12963                  __tls_get_addr calls, we must trust that the call
12964                  stays with its arg setup insns, ie. that the next
12965                  reloc is the __tls_get_addr call associated with
12966                  the current reloc.  Edit both insns.  */
12967               if (input_section->has_tls_get_addr_call
12968                   && rel + 1 < relend
12969                   && branch_reloc_hash_match (input_bfd, rel + 1,
12970                                               htab->tls_get_addr,
12971                                               htab->tls_get_addr_fd))
12972                 offset = rel[1].r_offset;
12973               if ((tls_mask & tls_gd) != 0)
12974                 {
12975                   /* IE */
12976                   insn1 = bfd_get_32 (output_bfd,
12977                                       contents + rel->r_offset - d_offset);
12978                   insn1 &= (1 << 26) - (1 << 2);
12979                   insn1 |= 58 << 26;    /* ld */
12980                   insn2 = 0x7c636a14;   /* add 3,3,13 */
12981                   if (offset != (bfd_vma) -1)
12982                     rel[1].r_info = ELF64_R_INFO (STN_UNDEF, R_PPC64_NONE);
12983                   if ((tls_mask & TLS_EXPLICIT) == 0)
12984                     r_type = (((r_type - (R_PPC64_GOT_TLSGD16 & 3)) & 3)
12985                               + R_PPC64_GOT_TPREL16_DS);
12986                   else
12987                     r_type += R_PPC64_TOC16_DS - R_PPC64_TOC16;
12988                   rel->r_info = ELF64_R_INFO (r_symndx, r_type);
12989                 }
12990               else
12991                 {
12992                   /* LE */
12993                   insn1 = 0x3c6d0000;   /* addis 3,13,0 */
12994                   insn2 = 0x38630000;   /* addi 3,3,0 */
12995                   if (tls_gd == 0)
12996                     {
12997                       /* Was an LD reloc.  */
12998                       if (toc_symndx)
12999                         sec = local_sections[toc_symndx];
13000                       for (r_symndx = 0;
13001                            r_symndx < symtab_hdr->sh_info;
13002                            r_symndx++)
13003                         if (local_sections[r_symndx] == sec)
13004                           break;
13005                       if (r_symndx >= symtab_hdr->sh_info)
13006                         r_symndx = STN_UNDEF;
13007                       rel->r_addend = htab->elf.tls_sec->vma + DTP_OFFSET;
13008                       if (r_symndx != STN_UNDEF)
13009                         rel->r_addend -= (local_syms[r_symndx].st_value
13010                                           + sec->output_offset
13011                                           + sec->output_section->vma);
13012                     }
13013                   else if (toc_symndx != 0)
13014                     {
13015                       r_symndx = toc_symndx;
13016                       rel->r_addend = toc_addend;
13017                     }
13018                   r_type = R_PPC64_TPREL16_HA;
13019                   rel->r_info = ELF64_R_INFO (r_symndx, r_type);
13020                   if (offset != (bfd_vma) -1)
13021                     {
13022                       rel[1].r_info = ELF64_R_INFO (r_symndx,
13023                                                     R_PPC64_TPREL16_LO);
13024                       rel[1].r_offset = offset + d_offset;
13025                       rel[1].r_addend = rel->r_addend;
13026                     }
13027                 }
13028               bfd_put_32 (output_bfd, insn1,
13029                           contents + rel->r_offset - d_offset);
13030               if (offset != (bfd_vma) -1)
13031                 {
13032                   insn3 = bfd_get_32 (output_bfd,
13033                                       contents + offset + 4);
13034                   if (insn3 == NOP
13035                       || insn3 == CROR_151515 || insn3 == CROR_313131)
13036                     {
13037                       rel[1].r_offset += 4;
13038                       bfd_put_32 (output_bfd, insn2, contents + offset + 4);
13039                       insn2 = NOP;
13040                     }
13041                   bfd_put_32 (output_bfd, insn2, contents + offset);
13042                 }
13043               if ((tls_mask & tls_gd) == 0
13044                   && (tls_gd == 0 || toc_symndx != 0))
13045                 {
13046                   /* We changed the symbol.  Start over in order
13047                      to get h, sym, sec etc. right.  */
13048                   rel--;
13049                   continue;
13050                 }
13051             }
13052           break;
13053
13054         case R_PPC64_TLSGD:
13055           if (tls_mask != 0 && (tls_mask & TLS_GD) == 0)
13056             {
13057               unsigned int insn2, insn3;
13058               bfd_vma offset = rel->r_offset;
13059
13060               if ((tls_mask & TLS_TPRELGD) != 0)
13061                 {
13062                   /* IE */
13063                   r_type = R_PPC64_NONE;
13064                   insn2 = 0x7c636a14;   /* add 3,3,13 */
13065                 }
13066               else
13067                 {
13068                   /* LE */
13069                   if (toc_symndx != 0)
13070                     {
13071                       r_symndx = toc_symndx;
13072                       rel->r_addend = toc_addend;
13073                     }
13074                   r_type = R_PPC64_TPREL16_LO;
13075                   rel->r_offset = offset + d_offset;
13076                   insn2 = 0x38630000;   /* addi 3,3,0 */
13077                 }
13078               rel->r_info = ELF64_R_INFO (r_symndx, r_type);
13079               /* Zap the reloc on the _tls_get_addr call too.  */
13080               BFD_ASSERT (offset == rel[1].r_offset);
13081               rel[1].r_info = ELF64_R_INFO (STN_UNDEF, R_PPC64_NONE);
13082               insn3 = bfd_get_32 (output_bfd,
13083                                   contents + offset + 4);
13084               if (insn3 == NOP
13085                   || insn3 == CROR_151515 || insn3 == CROR_313131)
13086                 {
13087                   rel->r_offset += 4;
13088                   bfd_put_32 (output_bfd, insn2, contents + offset + 4);
13089                   insn2 = NOP;
13090                 }
13091               bfd_put_32 (output_bfd, insn2, contents + offset);
13092               if ((tls_mask & TLS_TPRELGD) == 0 && toc_symndx != 0)
13093                 {
13094                   rel--;
13095                   continue;
13096                 }
13097             }
13098           break;
13099
13100         case R_PPC64_TLSLD:
13101           if (tls_mask != 0 && (tls_mask & TLS_LD) == 0)
13102             {
13103               unsigned int insn2, insn3;
13104               bfd_vma offset = rel->r_offset;
13105
13106               if (toc_symndx)
13107                 sec = local_sections[toc_symndx];
13108               for (r_symndx = 0;
13109                    r_symndx < symtab_hdr->sh_info;
13110                    r_symndx++)
13111                 if (local_sections[r_symndx] == sec)
13112                   break;
13113               if (r_symndx >= symtab_hdr->sh_info)
13114                 r_symndx = STN_UNDEF;
13115               rel->r_addend = htab->elf.tls_sec->vma + DTP_OFFSET;
13116               if (r_symndx != STN_UNDEF)
13117                 rel->r_addend -= (local_syms[r_symndx].st_value
13118                                   + sec->output_offset
13119                                   + sec->output_section->vma);
13120
13121               r_type = R_PPC64_TPREL16_LO;
13122               rel->r_info = ELF64_R_INFO (r_symndx, r_type);
13123               rel->r_offset = offset + d_offset;
13124               /* Zap the reloc on the _tls_get_addr call too.  */
13125               BFD_ASSERT (offset == rel[1].r_offset);
13126               rel[1].r_info = ELF64_R_INFO (STN_UNDEF, R_PPC64_NONE);
13127               insn2 = 0x38630000;       /* addi 3,3,0 */
13128               insn3 = bfd_get_32 (output_bfd,
13129                                   contents + offset + 4);
13130               if (insn3 == NOP
13131                   || insn3 == CROR_151515 || insn3 == CROR_313131)
13132                 {
13133                   rel->r_offset += 4;
13134                   bfd_put_32 (output_bfd, insn2, contents + offset + 4);
13135                   insn2 = NOP;
13136                 }
13137               bfd_put_32 (output_bfd, insn2, contents + offset);
13138               rel--;
13139               continue;
13140             }
13141           break;
13142
13143         case R_PPC64_DTPMOD64:
13144           if (rel + 1 < relend
13145               && rel[1].r_info == ELF64_R_INFO (r_symndx, R_PPC64_DTPREL64)
13146               && rel[1].r_offset == rel->r_offset + 8)
13147             {
13148               if ((tls_mask & TLS_GD) == 0)
13149                 {
13150                   rel[1].r_info = ELF64_R_INFO (r_symndx, R_PPC64_NONE);
13151                   if ((tls_mask & TLS_TPRELGD) != 0)
13152                     r_type = R_PPC64_TPREL64;
13153                   else
13154                     {
13155                       bfd_put_64 (output_bfd, 1, contents + rel->r_offset);
13156                       r_type = R_PPC64_NONE;
13157                     }
13158                   rel->r_info = ELF64_R_INFO (r_symndx, r_type);
13159                 }
13160             }
13161           else
13162             {
13163               if ((tls_mask & TLS_LD) == 0)
13164                 {
13165                   bfd_put_64 (output_bfd, 1, contents + rel->r_offset);
13166                   r_type = R_PPC64_NONE;
13167                   rel->r_info = ELF64_R_INFO (r_symndx, r_type);
13168                 }
13169             }
13170           break;
13171
13172         case R_PPC64_TPREL64:
13173           if ((tls_mask & TLS_TPREL) == 0)
13174             {
13175               r_type = R_PPC64_NONE;
13176               rel->r_info = ELF64_R_INFO (r_symndx, r_type);
13177             }
13178           break;
13179         }
13180
13181       /* Handle other relocations that tweak non-addend part of insn.  */
13182       insn = 0;
13183       max_br_offset = 1 << 25;
13184       addend = rel->r_addend;
13185       reloc_dest = DEST_NORMAL;
13186       switch (r_type)
13187         {
13188         default:
13189           break;
13190
13191         case R_PPC64_TOCSAVE:
13192           if (relocation + addend == (rel->r_offset
13193                                       + input_section->output_offset
13194                                       + input_section->output_section->vma)
13195               && tocsave_find (htab, NO_INSERT,
13196                                &local_syms, rel, input_bfd))
13197             {
13198               insn = bfd_get_32 (input_bfd, contents + rel->r_offset);
13199               if (insn == NOP
13200                   || insn == CROR_151515 || insn == CROR_313131)
13201                 bfd_put_32 (input_bfd, STD_R2_40R1,
13202                             contents + rel->r_offset);
13203             }
13204           break;
13205
13206           /* Branch taken prediction relocations.  */
13207         case R_PPC64_ADDR14_BRTAKEN:
13208         case R_PPC64_REL14_BRTAKEN:
13209           insn = 0x01 << 21; /* 'y' or 't' bit, lowest bit of BO field.  */
13210           /* Fall thru.  */
13211
13212           /* Branch not taken prediction relocations.  */
13213         case R_PPC64_ADDR14_BRNTAKEN:
13214         case R_PPC64_REL14_BRNTAKEN:
13215           insn |= bfd_get_32 (output_bfd,
13216                               contents + rel->r_offset) & ~(0x01 << 21);
13217           /* Fall thru.  */
13218
13219         case R_PPC64_REL14:
13220           max_br_offset = 1 << 15;
13221           /* Fall thru.  */
13222
13223         case R_PPC64_REL24:
13224           /* Calls to functions with a different TOC, such as calls to
13225              shared objects, need to alter the TOC pointer.  This is
13226              done using a linkage stub.  A REL24 branching to these
13227              linkage stubs needs to be followed by a nop, as the nop
13228              will be replaced with an instruction to restore the TOC
13229              base pointer.  */
13230           fdh = h;
13231           if (h != NULL
13232               && h->oh != NULL
13233               && h->oh->is_func_descriptor)
13234             fdh = ppc_follow_link (h->oh);
13235           stub_entry = ppc_get_stub_entry (input_section, sec, fdh, &orig_rel,
13236                                            htab);
13237           if (stub_entry != NULL
13238               && (stub_entry->stub_type == ppc_stub_plt_call
13239                   || stub_entry->stub_type == ppc_stub_plt_call_r2save
13240                   || stub_entry->stub_type == ppc_stub_plt_branch_r2off
13241                   || stub_entry->stub_type == ppc_stub_long_branch_r2off))
13242             {
13243               bfd_boolean can_plt_call = FALSE;
13244
13245               /* All of these stubs will modify r2, so there must be a
13246                  branch and link followed by a nop.  The nop is
13247                  replaced by an insn to restore r2.  */
13248               if (rel->r_offset + 8 <= input_section->size)
13249                 {
13250                   unsigned long br;
13251
13252                   br = bfd_get_32 (input_bfd,
13253                                    contents + rel->r_offset);
13254                   if ((br & 1) != 0)
13255                     {
13256                       unsigned long nop;
13257
13258                       nop = bfd_get_32 (input_bfd,
13259                                         contents + rel->r_offset + 4);
13260                       if (nop == NOP
13261                           || nop == CROR_151515 || nop == CROR_313131)
13262                         {
13263                           if (h != NULL
13264                               && (h == htab->tls_get_addr_fd
13265                                   || h == htab->tls_get_addr)
13266                               && !htab->no_tls_get_addr_opt)
13267                             {
13268                               /* Special stub used, leave nop alone.  */
13269                             }
13270                           else
13271                             bfd_put_32 (input_bfd, LD_R2_40R1,
13272                                         contents + rel->r_offset + 4);
13273                           can_plt_call = TRUE;
13274                         }
13275                     }
13276                 }
13277
13278               if (!can_plt_call && h != NULL)
13279                 {
13280                   const char *name = h->elf.root.root.string;
13281
13282                   if (*name == '.')
13283                     ++name;
13284
13285                   if (strncmp (name, "__libc_start_main", 17) == 0
13286                       && (name[17] == 0 || name[17] == '@'))
13287                     {
13288                       /* Allow crt1 branch to go via a toc adjusting
13289                          stub.  Other calls that never return could do
13290                          the same, if we could detect such.  */
13291                       can_plt_call = TRUE;
13292                     }
13293                 }
13294
13295               if (!can_plt_call)
13296                 {
13297                   /* g++ as of 20130507 emits self-calls without a
13298                      following nop.  This is arguably wrong since we
13299                      have conflicting information.  On the one hand a
13300                      global symbol and on the other a local call
13301                      sequence, but don't error for this special case.
13302                      It isn't possible to cheaply verify we have
13303                      exactly such a call.  Allow all calls to the same
13304                      section.  */
13305                   asection *code_sec = sec;
13306
13307                   if (get_opd_info (sec) != NULL)
13308                     {
13309                       bfd_vma off = (relocation + addend
13310                                      - sec->output_section->vma
13311                                      - sec->output_offset);
13312
13313                       opd_entry_value (sec, off, &code_sec, NULL, FALSE);
13314                     }
13315                   if (code_sec == input_section)
13316                     can_plt_call = TRUE;
13317                 }
13318
13319               if (!can_plt_call)
13320                 {
13321                   info->callbacks->einfo
13322                     (_("%P: %H: call to `%T' lacks nop, can't restore toc; "
13323                        "recompile with -fPIC"),
13324                      input_bfd, input_section, rel->r_offset, sym_name);
13325
13326                   bfd_set_error (bfd_error_bad_value);
13327                   ret = FALSE;
13328                 }
13329
13330               if (can_plt_call
13331                   && (stub_entry->stub_type == ppc_stub_plt_call
13332                       || stub_entry->stub_type == ppc_stub_plt_call_r2save))
13333                 unresolved_reloc = FALSE;
13334             }
13335
13336           if ((stub_entry == NULL
13337                || stub_entry->stub_type == ppc_stub_long_branch
13338                || stub_entry->stub_type == ppc_stub_plt_branch)
13339               && get_opd_info (sec) != NULL)
13340             {
13341               /* The branch destination is the value of the opd entry. */
13342               bfd_vma off = (relocation + addend
13343                              - sec->output_section->vma
13344                              - sec->output_offset);
13345               bfd_vma dest = opd_entry_value (sec, off, NULL, NULL, FALSE);
13346               if (dest != (bfd_vma) -1)
13347                 {
13348                   relocation = dest;
13349                   addend = 0;
13350                   reloc_dest = DEST_OPD;
13351                 }
13352             }
13353
13354           /* If the branch is out of reach we ought to have a long
13355              branch stub.  */
13356           from = (rel->r_offset
13357                   + input_section->output_offset
13358                   + input_section->output_section->vma);
13359
13360           if (stub_entry != NULL
13361               && (stub_entry->stub_type == ppc_stub_long_branch
13362                   || stub_entry->stub_type == ppc_stub_plt_branch)
13363               && (r_type == R_PPC64_ADDR14_BRTAKEN
13364                   || r_type == R_PPC64_ADDR14_BRNTAKEN
13365                   || (relocation + addend - from + max_br_offset
13366                       < 2 * max_br_offset)))
13367             /* Don't use the stub if this branch is in range.  */
13368             stub_entry = NULL;
13369
13370           if (stub_entry != NULL)
13371             {
13372               /* Munge up the value and addend so that we call the stub
13373                  rather than the procedure directly.  */
13374               relocation = (stub_entry->stub_offset
13375                             + stub_entry->stub_sec->output_offset
13376                             + stub_entry->stub_sec->output_section->vma);
13377               addend = 0;
13378               reloc_dest = DEST_STUB;
13379
13380               if ((stub_entry->stub_type == ppc_stub_plt_call
13381                    || stub_entry->stub_type == ppc_stub_plt_call_r2save)
13382                   && (ALWAYS_EMIT_R2SAVE
13383                       || stub_entry->stub_type == ppc_stub_plt_call_r2save)
13384                   && rel + 1 < relend
13385                   && rel[1].r_offset == rel->r_offset + 4
13386                   && ELF64_R_TYPE (rel[1].r_info) == R_PPC64_TOCSAVE)
13387                 relocation += 4;
13388             }
13389
13390           if (insn != 0)
13391             {
13392               if (is_isa_v2)
13393                 {
13394                   /* Set 'a' bit.  This is 0b00010 in BO field for branch
13395                      on CR(BI) insns (BO == 001at or 011at), and 0b01000
13396                      for branch on CTR insns (BO == 1a00t or 1a01t).  */
13397                   if ((insn & (0x14 << 21)) == (0x04 << 21))
13398                     insn |= 0x02 << 21;
13399                   else if ((insn & (0x14 << 21)) == (0x10 << 21))
13400                     insn |= 0x08 << 21;
13401                   else
13402                     break;
13403                 }
13404               else
13405                 {
13406                   /* Invert 'y' bit if not the default.  */
13407                   if ((bfd_signed_vma) (relocation + addend - from) < 0)
13408                     insn ^= 0x01 << 21;
13409                 }
13410
13411               bfd_put_32 (output_bfd, insn, contents + rel->r_offset);
13412             }
13413
13414           /* NOP out calls to undefined weak functions.
13415              We can thus call a weak function without first
13416              checking whether the function is defined.  */
13417           else if (h != NULL
13418                    && h->elf.root.type == bfd_link_hash_undefweak
13419                    && h->elf.dynindx == -1
13420                    && r_type == R_PPC64_REL24
13421                    && relocation == 0
13422                    && addend == 0)
13423             {
13424               bfd_put_32 (output_bfd, NOP, contents + rel->r_offset);
13425               continue;
13426             }
13427           break;
13428         }
13429
13430       /* Set `addend'.  */
13431       tls_type = 0;
13432       switch (r_type)
13433         {
13434         default:
13435           info->callbacks->einfo
13436             (_("%P: %B: unknown relocation type %d for `%T'\n"),
13437              input_bfd, (int) r_type, sym_name);
13438
13439           bfd_set_error (bfd_error_bad_value);
13440           ret = FALSE;
13441           continue;
13442
13443         case R_PPC64_NONE:
13444         case R_PPC64_TLS:
13445         case R_PPC64_TLSGD:
13446         case R_PPC64_TLSLD:
13447         case R_PPC64_TOCSAVE:
13448         case R_PPC64_GNU_VTINHERIT:
13449         case R_PPC64_GNU_VTENTRY:
13450           continue;
13451
13452           /* GOT16 relocations.  Like an ADDR16 using the symbol's
13453              address in the GOT as relocation value instead of the
13454              symbol's value itself.  Also, create a GOT entry for the
13455              symbol and put the symbol value there.  */
13456         case R_PPC64_GOT_TLSGD16:
13457         case R_PPC64_GOT_TLSGD16_LO:
13458         case R_PPC64_GOT_TLSGD16_HI:
13459         case R_PPC64_GOT_TLSGD16_HA:
13460           tls_type = TLS_TLS | TLS_GD;
13461           goto dogot;
13462
13463         case R_PPC64_GOT_TLSLD16:
13464         case R_PPC64_GOT_TLSLD16_LO:
13465         case R_PPC64_GOT_TLSLD16_HI:
13466         case R_PPC64_GOT_TLSLD16_HA:
13467           tls_type = TLS_TLS | TLS_LD;
13468           goto dogot;
13469
13470         case R_PPC64_GOT_TPREL16_DS:
13471         case R_PPC64_GOT_TPREL16_LO_DS:
13472         case R_PPC64_GOT_TPREL16_HI:
13473         case R_PPC64_GOT_TPREL16_HA:
13474           tls_type = TLS_TLS | TLS_TPREL;
13475           goto dogot;
13476
13477         case R_PPC64_GOT_DTPREL16_DS:
13478         case R_PPC64_GOT_DTPREL16_LO_DS:
13479         case R_PPC64_GOT_DTPREL16_HI:
13480         case R_PPC64_GOT_DTPREL16_HA:
13481           tls_type = TLS_TLS | TLS_DTPREL;
13482           goto dogot;
13483
13484         case R_PPC64_GOT16:
13485         case R_PPC64_GOT16_LO:
13486         case R_PPC64_GOT16_HI:
13487         case R_PPC64_GOT16_HA:
13488         case R_PPC64_GOT16_DS:
13489         case R_PPC64_GOT16_LO_DS:
13490         dogot:
13491           {
13492             /* Relocation is to the entry for this symbol in the global
13493                offset table.  */
13494             asection *got;
13495             bfd_vma *offp;
13496             bfd_vma off;
13497             unsigned long indx = 0;
13498             struct got_entry *ent;
13499
13500             if (tls_type == (TLS_TLS | TLS_LD)
13501                 && (h == NULL
13502                     || !h->elf.def_dynamic))
13503               ent = ppc64_tlsld_got (input_bfd);
13504             else
13505               {
13506
13507                 if (h != NULL)
13508                   {
13509                     bfd_boolean dyn = htab->elf.dynamic_sections_created;
13510                     if (!WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared,
13511                                                           &h->elf)
13512                         || (info->shared
13513                             && SYMBOL_CALLS_LOCAL (info, &h->elf)))
13514                       /* This is actually a static link, or it is a
13515                          -Bsymbolic link and the symbol is defined
13516                          locally, or the symbol was forced to be local
13517                          because of a version file.  */
13518                       ;
13519                     else
13520                       {
13521                         BFD_ASSERT (h->elf.dynindx != -1);
13522                         indx = h->elf.dynindx;
13523                         unresolved_reloc = FALSE;
13524                       }
13525                     ent = h->elf.got.glist;
13526                   }
13527                 else
13528                   {
13529                     if (local_got_ents == NULL)
13530                       abort ();
13531                     ent = local_got_ents[r_symndx];
13532                   }
13533
13534                 for (; ent != NULL; ent = ent->next)
13535                   if (ent->addend == orig_rel.r_addend
13536                       && ent->owner == input_bfd
13537                       && ent->tls_type == tls_type)
13538                     break;
13539               }
13540
13541             if (ent == NULL)
13542               abort ();
13543             if (ent->is_indirect)
13544               ent = ent->got.ent;
13545             offp = &ent->got.offset;
13546             got = ppc64_elf_tdata (ent->owner)->got;
13547             if (got == NULL)
13548               abort ();
13549
13550             /* The offset must always be a multiple of 8.  We use the
13551                least significant bit to record whether we have already
13552                processed this entry.  */
13553             off = *offp;
13554             if ((off & 1) != 0)
13555               off &= ~1;
13556             else
13557               {
13558                 /* Generate relocs for the dynamic linker, except in
13559                    the case of TLSLD where we'll use one entry per
13560                    module.  */
13561                 asection *relgot;
13562                 bfd_boolean ifunc;
13563
13564                 *offp = off | 1;
13565                 relgot = NULL;
13566                 ifunc = (h != NULL
13567                          ? h->elf.type == STT_GNU_IFUNC
13568                          : ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC);
13569                 if (ifunc)
13570                   relgot = htab->reliplt;
13571                 else if ((info->shared || indx != 0)
13572                          && (h == NULL
13573                              || (tls_type == (TLS_TLS | TLS_LD)
13574                                  && !h->elf.def_dynamic)
13575                              || ELF_ST_VISIBILITY (h->elf.other) == STV_DEFAULT
13576                              || h->elf.root.type != bfd_link_hash_undefweak))
13577                   relgot = ppc64_elf_tdata (ent->owner)->relgot;
13578                 if (relgot != NULL)
13579                   {
13580                     outrel.r_offset = (got->output_section->vma
13581                                        + got->output_offset
13582                                        + off);
13583                     outrel.r_addend = addend;
13584                     if (tls_type & (TLS_LD | TLS_GD))
13585                       {
13586                         outrel.r_addend = 0;
13587                         outrel.r_info = ELF64_R_INFO (indx, R_PPC64_DTPMOD64);
13588                         if (tls_type == (TLS_TLS | TLS_GD))
13589                           {
13590                             loc = relgot->contents;
13591                             loc += (relgot->reloc_count++
13592                                     * sizeof (Elf64_External_Rela));
13593                             bfd_elf64_swap_reloca_out (output_bfd,
13594                                                        &outrel, loc);
13595                             outrel.r_offset += 8;
13596                             outrel.r_addend = addend;
13597                             outrel.r_info
13598                               = ELF64_R_INFO (indx, R_PPC64_DTPREL64);
13599                           }
13600                       }
13601                     else if (tls_type == (TLS_TLS | TLS_DTPREL))
13602                       outrel.r_info = ELF64_R_INFO (indx, R_PPC64_DTPREL64);
13603                     else if (tls_type == (TLS_TLS | TLS_TPREL))
13604                       outrel.r_info = ELF64_R_INFO (indx, R_PPC64_TPREL64);
13605                     else if (indx != 0)
13606                       outrel.r_info = ELF64_R_INFO (indx, R_PPC64_GLOB_DAT);
13607                     else
13608                       {
13609                         if (ifunc)
13610                           outrel.r_info = ELF64_R_INFO (0, R_PPC64_IRELATIVE);
13611                         else
13612                           outrel.r_info = ELF64_R_INFO (0, R_PPC64_RELATIVE);
13613
13614                         /* Write the .got section contents for the sake
13615                            of prelink.  */
13616                         loc = got->contents + off;
13617                         bfd_put_64 (output_bfd, outrel.r_addend + relocation,
13618                                     loc);
13619                       }
13620
13621                     if (indx == 0 && tls_type != (TLS_TLS | TLS_LD))
13622                       {
13623                         outrel.r_addend += relocation;
13624                         if (tls_type & (TLS_GD | TLS_DTPREL | TLS_TPREL))
13625                           outrel.r_addend -= htab->elf.tls_sec->vma;
13626                       }
13627                     loc = relgot->contents;
13628                     loc += (relgot->reloc_count++
13629                             * sizeof (Elf64_External_Rela));
13630                     bfd_elf64_swap_reloca_out (output_bfd, &outrel, loc);
13631                   }
13632
13633                 /* Init the .got section contents here if we're not
13634                    emitting a reloc.  */
13635                 else
13636                   {
13637                     relocation += addend;
13638                     if (tls_type == (TLS_TLS | TLS_LD))
13639                       relocation = 1;
13640                     else if (tls_type != 0)
13641                       {
13642                         relocation -= htab->elf.tls_sec->vma + DTP_OFFSET;
13643                         if (tls_type == (TLS_TLS | TLS_TPREL))
13644                           relocation += DTP_OFFSET - TP_OFFSET;
13645
13646                         if (tls_type == (TLS_TLS | TLS_GD))
13647                           {
13648                             bfd_put_64 (output_bfd, relocation,
13649                                         got->contents + off + 8);
13650                             relocation = 1;
13651                           }
13652                       }
13653
13654                     bfd_put_64 (output_bfd, relocation,
13655                                 got->contents + off);
13656                   }
13657               }
13658
13659             if (off >= (bfd_vma) -2)
13660               abort ();
13661
13662             relocation = got->output_section->vma + got->output_offset + off;
13663             addend = -(TOCstart + htab->stub_group[input_section->id].toc_off);
13664           }
13665           break;
13666
13667         case R_PPC64_PLT16_HA:
13668         case R_PPC64_PLT16_HI:
13669         case R_PPC64_PLT16_LO:
13670         case R_PPC64_PLT32:
13671         case R_PPC64_PLT64:
13672           /* Relocation is to the entry for this symbol in the
13673              procedure linkage table.  */
13674
13675           /* Resolve a PLT reloc against a local symbol directly,
13676              without using the procedure linkage table.  */
13677           if (h == NULL)
13678             break;
13679
13680           /* It's possible that we didn't make a PLT entry for this
13681              symbol.  This happens when statically linking PIC code,
13682              or when using -Bsymbolic.  Go find a match if there is a
13683              PLT entry.  */
13684           if (htab->plt != NULL)
13685             {
13686               struct plt_entry *ent;
13687               for (ent = h->elf.plt.plist; ent != NULL; ent = ent->next)
13688                 if (ent->addend == orig_rel.r_addend
13689                     && ent->plt.offset != (bfd_vma) -1)
13690                   {
13691                     relocation = (htab->plt->output_section->vma
13692                                   + htab->plt->output_offset
13693                                   + ent->plt.offset);
13694                     unresolved_reloc = FALSE;
13695                   }
13696             }
13697           break;
13698
13699         case R_PPC64_TOC:
13700           /* Relocation value is TOC base.  */
13701           relocation = TOCstart;
13702           if (r_symndx == STN_UNDEF)
13703             relocation += htab->stub_group[input_section->id].toc_off;
13704           else if (unresolved_reloc)
13705             ;
13706           else if (sec != NULL && sec->id <= htab->top_id)
13707             relocation += htab->stub_group[sec->id].toc_off;
13708           else
13709             unresolved_reloc = TRUE;
13710           goto dodyn;
13711
13712           /* TOC16 relocs.  We want the offset relative to the TOC base,
13713              which is the address of the start of the TOC plus 0x8000.
13714              The TOC consists of sections .got, .toc, .tocbss, and .plt,
13715              in this order.  */
13716         case R_PPC64_TOC16:
13717         case R_PPC64_TOC16_LO:
13718         case R_PPC64_TOC16_HI:
13719         case R_PPC64_TOC16_DS:
13720         case R_PPC64_TOC16_LO_DS:
13721         case R_PPC64_TOC16_HA:
13722           addend -= TOCstart + htab->stub_group[input_section->id].toc_off;
13723           break;
13724
13725           /* Relocate against the beginning of the section.  */
13726         case R_PPC64_SECTOFF:
13727         case R_PPC64_SECTOFF_LO:
13728         case R_PPC64_SECTOFF_HI:
13729         case R_PPC64_SECTOFF_DS:
13730         case R_PPC64_SECTOFF_LO_DS:
13731         case R_PPC64_SECTOFF_HA:
13732           if (sec != NULL)
13733             addend -= sec->output_section->vma;
13734           break;
13735
13736         case R_PPC64_REL16:
13737         case R_PPC64_REL16_LO:
13738         case R_PPC64_REL16_HI:
13739         case R_PPC64_REL16_HA:
13740           break;
13741
13742         case R_PPC64_REL14:
13743         case R_PPC64_REL14_BRNTAKEN:
13744         case R_PPC64_REL14_BRTAKEN:
13745         case R_PPC64_REL24:
13746           break;
13747
13748         case R_PPC64_TPREL16:
13749         case R_PPC64_TPREL16_LO:
13750         case R_PPC64_TPREL16_HI:
13751         case R_PPC64_TPREL16_HA:
13752         case R_PPC64_TPREL16_DS:
13753         case R_PPC64_TPREL16_LO_DS:
13754         case R_PPC64_TPREL16_HIGH:
13755         case R_PPC64_TPREL16_HIGHA:
13756         case R_PPC64_TPREL16_HIGHER:
13757         case R_PPC64_TPREL16_HIGHERA:
13758         case R_PPC64_TPREL16_HIGHEST:
13759         case R_PPC64_TPREL16_HIGHESTA:
13760           if (h != NULL
13761               && h->elf.root.type == bfd_link_hash_undefweak
13762               && h->elf.dynindx == -1)
13763             {
13764               /* Make this relocation against an undefined weak symbol
13765                  resolve to zero.  This is really just a tweak, since
13766                  code using weak externs ought to check that they are
13767                  defined before using them.  */
13768               bfd_byte *p = contents + rel->r_offset - d_offset;
13769
13770               insn = bfd_get_32 (output_bfd, p);
13771               insn = _bfd_elf_ppc_at_tprel_transform (insn, 13);
13772               if (insn != 0)
13773                 bfd_put_32 (output_bfd, insn, p);
13774               break;
13775             }
13776           addend -= htab->elf.tls_sec->vma + TP_OFFSET;
13777           if (info->shared)
13778             /* The TPREL16 relocs shouldn't really be used in shared
13779                libs as they will result in DT_TEXTREL being set, but
13780                support them anyway.  */
13781             goto dodyn;
13782           break;
13783
13784         case R_PPC64_DTPREL16:
13785         case R_PPC64_DTPREL16_LO:
13786         case R_PPC64_DTPREL16_HI:
13787         case R_PPC64_DTPREL16_HA:
13788         case R_PPC64_DTPREL16_DS:
13789         case R_PPC64_DTPREL16_LO_DS:
13790         case R_PPC64_DTPREL16_HIGH:
13791         case R_PPC64_DTPREL16_HIGHA:
13792         case R_PPC64_DTPREL16_HIGHER:
13793         case R_PPC64_DTPREL16_HIGHERA:
13794         case R_PPC64_DTPREL16_HIGHEST:
13795         case R_PPC64_DTPREL16_HIGHESTA:
13796           addend -= htab->elf.tls_sec->vma + DTP_OFFSET;
13797           break;
13798
13799         case R_PPC64_DTPMOD64:
13800           relocation = 1;
13801           addend = 0;
13802           goto dodyn;
13803
13804         case R_PPC64_TPREL64:
13805           addend -= htab->elf.tls_sec->vma + TP_OFFSET;
13806           goto dodyn;
13807
13808         case R_PPC64_DTPREL64:
13809           addend -= htab->elf.tls_sec->vma + DTP_OFFSET;
13810           /* Fall thru */
13811
13812           /* Relocations that may need to be propagated if this is a
13813              dynamic object.  */
13814         case R_PPC64_REL30:
13815         case R_PPC64_REL32:
13816         case R_PPC64_REL64:
13817         case R_PPC64_ADDR14:
13818         case R_PPC64_ADDR14_BRNTAKEN:
13819         case R_PPC64_ADDR14_BRTAKEN:
13820         case R_PPC64_ADDR16:
13821         case R_PPC64_ADDR16_DS:
13822         case R_PPC64_ADDR16_HA:
13823         case R_PPC64_ADDR16_HI:
13824         case R_PPC64_ADDR16_HIGH:
13825         case R_PPC64_ADDR16_HIGHA:
13826         case R_PPC64_ADDR16_HIGHER:
13827         case R_PPC64_ADDR16_HIGHERA:
13828         case R_PPC64_ADDR16_HIGHEST:
13829         case R_PPC64_ADDR16_HIGHESTA:
13830         case R_PPC64_ADDR16_LO:
13831         case R_PPC64_ADDR16_LO_DS:
13832         case R_PPC64_ADDR24:
13833         case R_PPC64_ADDR32:
13834         case R_PPC64_ADDR64:
13835         case R_PPC64_UADDR16:
13836         case R_PPC64_UADDR32:
13837         case R_PPC64_UADDR64:
13838         dodyn:
13839           if ((input_section->flags & SEC_ALLOC) == 0)
13840             break;
13841
13842           if (NO_OPD_RELOCS && is_opd)
13843             break;
13844
13845           if ((info->shared
13846                && (h == NULL
13847                    || ELF_ST_VISIBILITY (h->elf.other) == STV_DEFAULT
13848                    || h->elf.root.type != bfd_link_hash_undefweak)
13849                && (must_be_dyn_reloc (info, r_type)
13850                    || !SYMBOL_CALLS_LOCAL (info, &h->elf)))
13851               || (ELIMINATE_COPY_RELOCS
13852                   && !info->shared
13853                   && h != NULL
13854                   && h->elf.dynindx != -1
13855                   && !h->elf.non_got_ref
13856                   && !h->elf.def_regular)
13857               || (!info->shared
13858                   && (h != NULL
13859                       ? h->elf.type == STT_GNU_IFUNC
13860                       : ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC)))
13861             {
13862               bfd_boolean skip, relocate;
13863               asection *sreloc;
13864               bfd_vma out_off;
13865
13866               /* When generating a dynamic object, these relocations
13867                  are copied into the output file to be resolved at run
13868                  time.  */
13869
13870               skip = FALSE;
13871               relocate = FALSE;
13872
13873               out_off = _bfd_elf_section_offset (output_bfd, info,
13874                                                  input_section, rel->r_offset);
13875               if (out_off == (bfd_vma) -1)
13876                 skip = TRUE;
13877               else if (out_off == (bfd_vma) -2)
13878                 skip = TRUE, relocate = TRUE;
13879               out_off += (input_section->output_section->vma
13880                           + input_section->output_offset);
13881               outrel.r_offset = out_off;
13882               outrel.r_addend = rel->r_addend;
13883
13884               /* Optimize unaligned reloc use.  */
13885               if ((r_type == R_PPC64_ADDR64 && (out_off & 7) != 0)
13886                   || (r_type == R_PPC64_UADDR64 && (out_off & 7) == 0))
13887                 r_type ^= R_PPC64_ADDR64 ^ R_PPC64_UADDR64;
13888               else if ((r_type == R_PPC64_ADDR32 && (out_off & 3) != 0)
13889                        || (r_type == R_PPC64_UADDR32 && (out_off & 3) == 0))
13890                 r_type ^= R_PPC64_ADDR32 ^ R_PPC64_UADDR32;
13891               else if ((r_type == R_PPC64_ADDR16 && (out_off & 1) != 0)
13892                        || (r_type == R_PPC64_UADDR16 && (out_off & 1) == 0))
13893                 r_type ^= R_PPC64_ADDR16 ^ R_PPC64_UADDR16;
13894
13895               if (skip)
13896                 memset (&outrel, 0, sizeof outrel);
13897               else if (!SYMBOL_CALLS_LOCAL (info, &h->elf)
13898                        && !is_opd
13899                        && r_type != R_PPC64_TOC)
13900                 {
13901                   BFD_ASSERT (h->elf.dynindx != -1);
13902                   outrel.r_info = ELF64_R_INFO (h->elf.dynindx, r_type);
13903                 }
13904               else
13905                 {
13906                   /* This symbol is local, or marked to become local,
13907                      or this is an opd section reloc which must point
13908                      at a local function.  */
13909                   outrel.r_addend += relocation;
13910                   if (r_type == R_PPC64_ADDR64 || r_type == R_PPC64_TOC)
13911                     {
13912                       if (is_opd && h != NULL)
13913                         {
13914                           /* Lie about opd entries.  This case occurs
13915                              when building shared libraries and we
13916                              reference a function in another shared
13917                              lib.  The same thing happens for a weak
13918                              definition in an application that's
13919                              overridden by a strong definition in a
13920                              shared lib.  (I believe this is a generic
13921                              bug in binutils handling of weak syms.)
13922                              In these cases we won't use the opd
13923                              entry in this lib.  */
13924                           unresolved_reloc = FALSE;
13925                         }
13926                       if (!is_opd
13927                           && r_type == R_PPC64_ADDR64
13928                           && (h != NULL
13929                               ? h->elf.type == STT_GNU_IFUNC
13930                               : ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC))
13931                         outrel.r_info = ELF64_R_INFO (0, R_PPC64_IRELATIVE);
13932                       else
13933                         {
13934                           outrel.r_info = ELF64_R_INFO (0, R_PPC64_RELATIVE);
13935
13936                           /* We need to relocate .opd contents for ld.so.
13937                              Prelink also wants simple and consistent rules
13938                              for relocs.  This make all RELATIVE relocs have
13939                              *r_offset equal to r_addend.  */
13940                           relocate = TRUE;
13941                         }
13942                     }
13943                   else
13944                     {
13945                       long indx = 0;
13946
13947                       if (h != NULL
13948                           ? h->elf.type == STT_GNU_IFUNC
13949                           : ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC)
13950                         {
13951                           info->callbacks->einfo
13952                             (_("%P: %H: %s for indirect "
13953                                "function `%T' unsupported\n"),
13954                              input_bfd, input_section, rel->r_offset,
13955                              ppc64_elf_howto_table[r_type]->name,
13956                              sym_name);
13957                           ret = FALSE;
13958                         }
13959                       else if (r_symndx == STN_UNDEF || bfd_is_abs_section (sec))
13960                         ;
13961                       else if (sec == NULL || sec->owner == NULL)
13962                         {
13963                           bfd_set_error (bfd_error_bad_value);
13964                           return FALSE;
13965                         }
13966                       else
13967                         {
13968                           asection *osec;
13969
13970                           osec = sec->output_section;
13971                           indx = elf_section_data (osec)->dynindx;
13972
13973                           if (indx == 0)
13974                             {
13975                               if ((osec->flags & SEC_READONLY) == 0
13976                                   && htab->elf.data_index_section != NULL)
13977                                 osec = htab->elf.data_index_section;
13978                               else
13979                                 osec = htab->elf.text_index_section;
13980                               indx = elf_section_data (osec)->dynindx;
13981                             }
13982                           BFD_ASSERT (indx != 0);
13983
13984                           /* We are turning this relocation into one
13985                              against a section symbol, so subtract out
13986                              the output section's address but not the
13987                              offset of the input section in the output
13988                              section.  */
13989                           outrel.r_addend -= osec->vma;
13990                         }
13991
13992                       outrel.r_info = ELF64_R_INFO (indx, r_type);
13993                     }
13994                 }
13995
13996               sreloc = elf_section_data (input_section)->sreloc;
13997               if (h != NULL
13998                   ? h->elf.type == STT_GNU_IFUNC
13999                   : ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC)
14000                 sreloc = htab->reliplt;
14001               if (sreloc == NULL)
14002                 abort ();
14003
14004               if (sreloc->reloc_count * sizeof (Elf64_External_Rela)
14005                   >= sreloc->size)
14006                 abort ();
14007               loc = sreloc->contents;
14008               loc += sreloc->reloc_count++ * sizeof (Elf64_External_Rela);
14009               bfd_elf64_swap_reloca_out (output_bfd, &outrel, loc);
14010
14011               /* If this reloc is against an external symbol, it will
14012                  be computed at runtime, so there's no need to do
14013                  anything now.  However, for the sake of prelink ensure
14014                  that the section contents are a known value.  */
14015               if (! relocate)
14016                 {
14017                   unresolved_reloc = FALSE;
14018                   /* The value chosen here is quite arbitrary as ld.so
14019                      ignores section contents except for the special
14020                      case of .opd where the contents might be accessed
14021                      before relocation.  Choose zero, as that won't
14022                      cause reloc overflow.  */
14023                   relocation = 0;
14024                   addend = 0;
14025                   /* Use *r_offset == r_addend for R_PPC64_ADDR64 relocs
14026                      to improve backward compatibility with older
14027                      versions of ld.  */
14028                   if (r_type == R_PPC64_ADDR64)
14029                     addend = outrel.r_addend;
14030                   /* Adjust pc_relative relocs to have zero in *r_offset.  */
14031                   else if (ppc64_elf_howto_table[r_type]->pc_relative)
14032                     addend = (input_section->output_section->vma
14033                               + input_section->output_offset
14034                               + rel->r_offset);
14035                 }
14036             }
14037           break;
14038
14039         case R_PPC64_COPY:
14040         case R_PPC64_GLOB_DAT:
14041         case R_PPC64_JMP_SLOT:
14042         case R_PPC64_JMP_IREL:
14043         case R_PPC64_RELATIVE:
14044           /* We shouldn't ever see these dynamic relocs in relocatable
14045              files.  */
14046           /* Fall through.  */
14047
14048         case R_PPC64_PLTGOT16:
14049         case R_PPC64_PLTGOT16_DS:
14050         case R_PPC64_PLTGOT16_HA:
14051         case R_PPC64_PLTGOT16_HI:
14052         case R_PPC64_PLTGOT16_LO:
14053         case R_PPC64_PLTGOT16_LO_DS:
14054         case R_PPC64_PLTREL32:
14055         case R_PPC64_PLTREL64:
14056           /* These ones haven't been implemented yet.  */
14057
14058           info->callbacks->einfo
14059             (_("%P: %B: %s is not supported for `%T'\n"),
14060              input_bfd,
14061              ppc64_elf_howto_table[r_type]->name, sym_name);
14062
14063           bfd_set_error (bfd_error_invalid_operation);
14064           ret = FALSE;
14065           continue;
14066         }
14067
14068       /* Multi-instruction sequences that access the TOC can be
14069          optimized, eg. addis ra,r2,0; addi rb,ra,x;
14070          to             nop;           addi rb,r2,x;  */
14071       switch (r_type)
14072         {
14073         default:
14074           break;
14075
14076         case R_PPC64_GOT_TLSLD16_HI:
14077         case R_PPC64_GOT_TLSGD16_HI:
14078         case R_PPC64_GOT_TPREL16_HI:
14079         case R_PPC64_GOT_DTPREL16_HI:
14080         case R_PPC64_GOT16_HI:
14081         case R_PPC64_TOC16_HI:
14082           /* These relocs would only be useful if building up an
14083              offset to later add to r2, perhaps in an indexed
14084              addressing mode instruction.  Don't try to optimize.
14085              Unfortunately, the possibility of someone building up an
14086              offset like this or even with the HA relocs, means that
14087              we need to check the high insn when optimizing the low
14088              insn.  */
14089           break;
14090
14091         case R_PPC64_GOT_TLSLD16_HA:
14092         case R_PPC64_GOT_TLSGD16_HA:
14093         case R_PPC64_GOT_TPREL16_HA:
14094         case R_PPC64_GOT_DTPREL16_HA:
14095         case R_PPC64_GOT16_HA:
14096         case R_PPC64_TOC16_HA:
14097           if (htab->do_toc_opt && relocation + addend + 0x8000 < 0x10000
14098               && !ppc64_elf_tdata (input_bfd)->unexpected_toc_insn)
14099             {
14100               bfd_byte *p = contents + (rel->r_offset & ~3);
14101               bfd_put_32 (input_bfd, NOP, p);
14102             }
14103           break;
14104
14105         case R_PPC64_GOT_TLSLD16_LO:
14106         case R_PPC64_GOT_TLSGD16_LO:
14107         case R_PPC64_GOT_TPREL16_LO_DS:
14108         case R_PPC64_GOT_DTPREL16_LO_DS:
14109         case R_PPC64_GOT16_LO:
14110         case R_PPC64_GOT16_LO_DS:
14111         case R_PPC64_TOC16_LO:
14112         case R_PPC64_TOC16_LO_DS:
14113           if (htab->do_toc_opt && relocation + addend + 0x8000 < 0x10000
14114               && !ppc64_elf_tdata (input_bfd)->unexpected_toc_insn)
14115             {
14116               bfd_byte *p = contents + (rel->r_offset & ~3);
14117               insn = bfd_get_32 (input_bfd, p);
14118               if ((insn & (0x3f << 26)) == 12u << 26 /* addic */)
14119                 {
14120                   /* Transform addic to addi when we change reg.  */
14121                   insn &= ~((0x3f << 26) | (0x1f << 16));
14122                   insn |= (14u << 26) | (2 << 16);
14123                 }
14124               else
14125                 {
14126                   insn &= ~(0x1f << 16);
14127                   insn |= 2 << 16;
14128                 }
14129               bfd_put_32 (input_bfd, insn, p);
14130             }
14131           break;
14132         }
14133
14134       /* Do any further special processing.  */
14135       switch (r_type)
14136         {
14137         default:
14138           break;
14139
14140         case R_PPC64_REL16_HA:
14141         case R_PPC64_ADDR16_HA:
14142         case R_PPC64_ADDR16_HIGHA:
14143         case R_PPC64_ADDR16_HIGHERA:
14144         case R_PPC64_ADDR16_HIGHESTA:
14145         case R_PPC64_TOC16_HA:
14146         case R_PPC64_SECTOFF_HA:
14147         case R_PPC64_TPREL16_HA:
14148         case R_PPC64_TPREL16_HIGHA:
14149         case R_PPC64_TPREL16_HIGHERA:
14150         case R_PPC64_TPREL16_HIGHESTA:
14151         case R_PPC64_DTPREL16_HA:
14152         case R_PPC64_DTPREL16_HIGHA:
14153         case R_PPC64_DTPREL16_HIGHERA:
14154         case R_PPC64_DTPREL16_HIGHESTA:
14155           /* It's just possible that this symbol is a weak symbol
14156              that's not actually defined anywhere. In that case,
14157              'sec' would be NULL, and we should leave the symbol
14158              alone (it will be set to zero elsewhere in the link).  */
14159           if (sec == NULL)
14160             break;
14161           /* Fall thru */
14162
14163         case R_PPC64_GOT16_HA:
14164         case R_PPC64_PLTGOT16_HA:
14165         case R_PPC64_PLT16_HA:
14166         case R_PPC64_GOT_TLSGD16_HA:
14167         case R_PPC64_GOT_TLSLD16_HA:
14168         case R_PPC64_GOT_TPREL16_HA:
14169         case R_PPC64_GOT_DTPREL16_HA:
14170           /* Add 0x10000 if sign bit in 0:15 is set.
14171              Bits 0:15 are not used.  */
14172           addend += 0x8000;
14173           break;
14174
14175         case R_PPC64_ADDR16_DS:
14176         case R_PPC64_ADDR16_LO_DS:
14177         case R_PPC64_GOT16_DS:
14178         case R_PPC64_GOT16_LO_DS:
14179         case R_PPC64_PLT16_LO_DS:
14180         case R_PPC64_SECTOFF_DS:
14181         case R_PPC64_SECTOFF_LO_DS:
14182         case R_PPC64_TOC16_DS:
14183         case R_PPC64_TOC16_LO_DS:
14184         case R_PPC64_PLTGOT16_DS:
14185         case R_PPC64_PLTGOT16_LO_DS:
14186         case R_PPC64_GOT_TPREL16_DS:
14187         case R_PPC64_GOT_TPREL16_LO_DS:
14188         case R_PPC64_GOT_DTPREL16_DS:
14189         case R_PPC64_GOT_DTPREL16_LO_DS:
14190         case R_PPC64_TPREL16_DS:
14191         case R_PPC64_TPREL16_LO_DS:
14192         case R_PPC64_DTPREL16_DS:
14193         case R_PPC64_DTPREL16_LO_DS:
14194           insn = bfd_get_32 (input_bfd, contents + (rel->r_offset & ~3));
14195           mask = 3;
14196           /* If this reloc is against an lq insn, then the value must be
14197              a multiple of 16.  This is somewhat of a hack, but the
14198              "correct" way to do this by defining _DQ forms of all the
14199              _DS relocs bloats all reloc switches in this file.  It
14200              doesn't seem to make much sense to use any of these relocs
14201              in data, so testing the insn should be safe.  */
14202           if ((insn & (0x3f << 26)) == (56u << 26))
14203             mask = 15;
14204           if (((relocation + addend) & mask) != 0)
14205             {
14206               info->callbacks->einfo
14207                 (_("%P: %H: error: %s not a multiple of %u\n"),
14208                  input_bfd, input_section, rel->r_offset,
14209                  ppc64_elf_howto_table[r_type]->name,
14210                  mask + 1);
14211               bfd_set_error (bfd_error_bad_value);
14212               ret = FALSE;
14213               continue;
14214             }
14215           break;
14216         }
14217
14218       /* Dynamic relocs are not propagated for SEC_DEBUGGING sections
14219          because such sections are not SEC_ALLOC and thus ld.so will
14220          not process them.  */
14221       if (unresolved_reloc
14222           && !((input_section->flags & SEC_DEBUGGING) != 0
14223                && h->elf.def_dynamic)
14224           && _bfd_elf_section_offset (output_bfd, info, input_section,
14225                                       rel->r_offset) != (bfd_vma) -1)
14226         {
14227           info->callbacks->einfo
14228             (_("%P: %H: unresolvable %s against `%T'\n"),
14229              input_bfd, input_section, rel->r_offset,
14230              ppc64_elf_howto_table[(int) r_type]->name,
14231              h->elf.root.root.string);
14232           ret = FALSE;
14233         }
14234
14235       r = _bfd_final_link_relocate (ppc64_elf_howto_table[(int) r_type],
14236                                     input_bfd,
14237                                     input_section,
14238                                     contents,
14239                                     rel->r_offset,
14240                                     relocation,
14241                                     addend);
14242
14243       if (r != bfd_reloc_ok)
14244         {
14245           char *more_info = NULL;
14246           const char *reloc_name = ppc64_elf_howto_table[r_type]->name;
14247
14248           if (reloc_dest != DEST_NORMAL)
14249             {
14250               more_info = bfd_malloc (strlen (reloc_name) + 8);
14251               if (more_info != NULL)
14252                 {
14253                   strcpy (more_info, reloc_name);
14254                   strcat (more_info, (reloc_dest == DEST_OPD
14255                                       ? " (OPD)" : " (stub)"));
14256                   reloc_name = more_info;
14257                 }
14258             }
14259
14260           if (r == bfd_reloc_overflow)
14261             {
14262               if (warned)
14263                 continue;
14264               if (h != NULL
14265                   && h->elf.root.type == bfd_link_hash_undefweak
14266                   && ppc64_elf_howto_table[r_type]->pc_relative)
14267                 {
14268                   /* Assume this is a call protected by other code that
14269                      detects the symbol is undefined.  If this is the case,
14270                      we can safely ignore the overflow.  If not, the
14271                      program is hosed anyway, and a little warning isn't
14272                      going to help.  */
14273
14274                   continue;
14275                 }
14276
14277               if (!((*info->callbacks->reloc_overflow)
14278                     (info, &h->elf.root, sym_name,
14279                      reloc_name, orig_rel.r_addend,
14280                      input_bfd, input_section, rel->r_offset)))
14281                 return FALSE;
14282             }
14283           else
14284             {
14285               info->callbacks->einfo
14286                 (_("%P: %H: %s against `%T': error %d\n"),
14287                  input_bfd, input_section, rel->r_offset,
14288                  reloc_name, sym_name, (int) r);
14289               ret = FALSE;
14290             }
14291           if (more_info != NULL)
14292             free (more_info);
14293         }
14294     }
14295
14296   /* If we're emitting relocations, then shortly after this function
14297      returns, reloc offsets and addends for this section will be
14298      adjusted.  Worse, reloc symbol indices will be for the output
14299      file rather than the input.  Save a copy of the relocs for
14300      opd_entry_value.  */
14301   if (is_opd && (info->emitrelocations || info->relocatable))
14302     {
14303       bfd_size_type amt;
14304       amt = input_section->reloc_count * sizeof (Elf_Internal_Rela);
14305       rel = bfd_alloc (input_bfd, amt);
14306       BFD_ASSERT (ppc64_elf_tdata (input_bfd)->opd.relocs == NULL);
14307       ppc64_elf_tdata (input_bfd)->opd.relocs = rel;
14308       if (rel == NULL)
14309         return FALSE;
14310       memcpy (rel, relocs, amt);
14311     }
14312   return ret;
14313 }
14314
14315 /* Adjust the value of any local symbols in opd sections.  */
14316
14317 static int
14318 ppc64_elf_output_symbol_hook (struct bfd_link_info *info,
14319                               const char *name ATTRIBUTE_UNUSED,
14320                               Elf_Internal_Sym *elfsym,
14321                               asection *input_sec,
14322                               struct elf_link_hash_entry *h)
14323 {
14324   struct _opd_sec_data *opd;
14325   long adjust;
14326   bfd_vma value;
14327
14328   if (h != NULL)
14329     return 1;
14330
14331   opd = get_opd_info (input_sec);
14332   if (opd == NULL || opd->adjust == NULL)
14333     return 1;
14334
14335   value = elfsym->st_value - input_sec->output_offset;
14336   if (!info->relocatable)
14337     value -= input_sec->output_section->vma;
14338
14339   adjust = opd->adjust[value / 8];
14340   if (adjust == -1)
14341     return 2;
14342
14343   elfsym->st_value += adjust;
14344   return 1;
14345 }
14346
14347 /* Finish up dynamic symbol handling.  We set the contents of various
14348    dynamic sections here.  */
14349
14350 static bfd_boolean
14351 ppc64_elf_finish_dynamic_symbol (bfd *output_bfd,
14352                                  struct bfd_link_info *info,
14353                                  struct elf_link_hash_entry *h,
14354                                  Elf_Internal_Sym *sym ATTRIBUTE_UNUSED)
14355 {
14356   struct ppc_link_hash_table *htab;
14357   struct plt_entry *ent;
14358   Elf_Internal_Rela rela;
14359   bfd_byte *loc;
14360
14361   htab = ppc_hash_table (info);
14362   if (htab == NULL)
14363     return FALSE;
14364
14365   for (ent = h->plt.plist; ent != NULL; ent = ent->next)
14366     if (ent->plt.offset != (bfd_vma) -1)
14367       {
14368         /* This symbol has an entry in the procedure linkage
14369            table.  Set it up.  */
14370         if (!htab->elf.dynamic_sections_created
14371             || h->dynindx == -1)
14372           {
14373             BFD_ASSERT (h->type == STT_GNU_IFUNC
14374                         && h->def_regular
14375                         && (h->root.type == bfd_link_hash_defined
14376                             || h->root.type == bfd_link_hash_defweak));
14377             rela.r_offset = (htab->iplt->output_section->vma
14378                              + htab->iplt->output_offset
14379                              + ent->plt.offset);
14380             if (htab->opd_abi)
14381               rela.r_info = ELF64_R_INFO (0, R_PPC64_JMP_IREL);
14382             else
14383               rela.r_info = ELF64_R_INFO (0, R_PPC64_IRELATIVE);
14384             rela.r_addend = (h->root.u.def.value
14385                              + h->root.u.def.section->output_offset
14386                              + h->root.u.def.section->output_section->vma
14387                              + ent->addend);
14388             loc = (htab->reliplt->contents
14389                    + (htab->reliplt->reloc_count++
14390                       * sizeof (Elf64_External_Rela)));
14391           }
14392         else
14393           {
14394             rela.r_offset = (htab->plt->output_section->vma
14395                              + htab->plt->output_offset
14396                              + ent->plt.offset);
14397             rela.r_info = ELF64_R_INFO (h->dynindx, R_PPC64_JMP_SLOT);
14398             rela.r_addend = ent->addend;
14399             loc = (htab->relplt->contents
14400                    + ((ent->plt.offset - PLT_INITIAL_ENTRY_SIZE)
14401                       / (PLT_ENTRY_SIZE / sizeof (Elf64_External_Rela))));
14402           }
14403         bfd_elf64_swap_reloca_out (output_bfd, &rela, loc);
14404       }
14405
14406   if (h->needs_copy)
14407     {
14408       /* This symbol needs a copy reloc.  Set it up.  */
14409
14410       if (h->dynindx == -1
14411           || (h->root.type != bfd_link_hash_defined
14412               && h->root.type != bfd_link_hash_defweak)
14413           || htab->relbss == NULL)
14414         abort ();
14415
14416       rela.r_offset = (h->root.u.def.value
14417                        + h->root.u.def.section->output_section->vma
14418                        + h->root.u.def.section->output_offset);
14419       rela.r_info = ELF64_R_INFO (h->dynindx, R_PPC64_COPY);
14420       rela.r_addend = 0;
14421       loc = htab->relbss->contents;
14422       loc += htab->relbss->reloc_count++ * sizeof (Elf64_External_Rela);
14423       bfd_elf64_swap_reloca_out (output_bfd, &rela, loc);
14424     }
14425
14426   return TRUE;
14427 }
14428
14429 /* Used to decide how to sort relocs in an optimal manner for the
14430    dynamic linker, before writing them out.  */
14431
14432 static enum elf_reloc_type_class
14433 ppc64_elf_reloc_type_class (const struct bfd_link_info *info,
14434                             const asection *rel_sec,
14435                             const Elf_Internal_Rela *rela)
14436 {
14437   enum elf_ppc64_reloc_type r_type;
14438   struct ppc_link_hash_table *htab = ppc_hash_table (info);
14439
14440   if (rel_sec == htab->reliplt)
14441     return reloc_class_ifunc;
14442
14443   r_type = ELF64_R_TYPE (rela->r_info);
14444   switch (r_type)
14445     {
14446     case R_PPC64_RELATIVE:
14447       return reloc_class_relative;
14448     case R_PPC64_JMP_SLOT:
14449       return reloc_class_plt;
14450     case R_PPC64_COPY:
14451       return reloc_class_copy;
14452     default:
14453       return reloc_class_normal;
14454     }
14455 }
14456
14457 /* Finish up the dynamic sections.  */
14458
14459 static bfd_boolean
14460 ppc64_elf_finish_dynamic_sections (bfd *output_bfd,
14461                                    struct bfd_link_info *info)
14462 {
14463   struct ppc_link_hash_table *htab;
14464   bfd *dynobj;
14465   asection *sdyn;
14466
14467   htab = ppc_hash_table (info);
14468   if (htab == NULL)
14469     return FALSE;
14470
14471   dynobj = htab->elf.dynobj;
14472   sdyn = bfd_get_linker_section (dynobj, ".dynamic");
14473
14474   if (htab->elf.dynamic_sections_created)
14475     {
14476       Elf64_External_Dyn *dyncon, *dynconend;
14477
14478       if (sdyn == NULL || htab->got == NULL)
14479         abort ();
14480
14481       dyncon = (Elf64_External_Dyn *) sdyn->contents;
14482       dynconend = (Elf64_External_Dyn *) (sdyn->contents + sdyn->size);
14483       for (; dyncon < dynconend; dyncon++)
14484         {
14485           Elf_Internal_Dyn dyn;
14486           asection *s;
14487
14488           bfd_elf64_swap_dyn_in (dynobj, dyncon, &dyn);
14489
14490           switch (dyn.d_tag)
14491             {
14492             default:
14493               continue;
14494
14495             case DT_PPC64_GLINK:
14496               s = htab->glink;
14497               dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
14498               /* We stupidly defined DT_PPC64_GLINK to be the start
14499                  of glink rather than the first entry point, which is
14500                  what ld.so needs, and now have a bigger stub to
14501                  support automatic multiple TOCs.  */
14502               dyn.d_un.d_ptr += GLINK_CALL_STUB_SIZE - 32;
14503               break;
14504
14505             case DT_PPC64_OPD:
14506               s = bfd_get_section_by_name (output_bfd, ".opd");
14507               if (s == NULL)
14508                 continue;
14509               dyn.d_un.d_ptr = s->vma;
14510               break;
14511
14512             case DT_PPC64_OPDSZ:
14513               s = bfd_get_section_by_name (output_bfd, ".opd");
14514               if (s == NULL)
14515                 continue;
14516               dyn.d_un.d_val = s->size;
14517               break;
14518
14519             case DT_PLTGOT:
14520               s = htab->plt;
14521               dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
14522               break;
14523
14524             case DT_JMPREL:
14525               s = htab->relplt;
14526               dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
14527               break;
14528
14529             case DT_PLTRELSZ:
14530               dyn.d_un.d_val = htab->relplt->size;
14531               break;
14532
14533             case DT_RELASZ:
14534               /* Don't count procedure linkage table relocs in the
14535                  overall reloc count.  */
14536               s = htab->relplt;
14537               if (s == NULL)
14538                 continue;
14539               dyn.d_un.d_val -= s->size;
14540               break;
14541
14542             case DT_RELA:
14543               /* We may not be using the standard ELF linker script.
14544                  If .rela.plt is the first .rela section, we adjust
14545                  DT_RELA to not include it.  */
14546               s = htab->relplt;
14547               if (s == NULL)
14548                 continue;
14549               if (dyn.d_un.d_ptr != s->output_section->vma + s->output_offset)
14550                 continue;
14551               dyn.d_un.d_ptr += s->size;
14552               break;
14553             }
14554
14555           bfd_elf64_swap_dyn_out (output_bfd, &dyn, dyncon);
14556         }
14557     }
14558
14559   if (htab->got != NULL && htab->got->size != 0)
14560     {
14561       /* Fill in the first entry in the global offset table.
14562          We use it to hold the link-time TOCbase.  */
14563       bfd_put_64 (output_bfd,
14564                   elf_gp (output_bfd) + TOC_BASE_OFF,
14565                   htab->got->contents);
14566
14567       /* Set .got entry size.  */
14568       elf_section_data (htab->got->output_section)->this_hdr.sh_entsize = 8;
14569     }
14570
14571   if (htab->plt != NULL && htab->plt->size != 0)
14572     {
14573       /* Set .plt entry size.  */
14574       elf_section_data (htab->plt->output_section)->this_hdr.sh_entsize
14575         = PLT_ENTRY_SIZE;
14576     }
14577
14578   /* brlt is SEC_LINKER_CREATED, so we need to write out relocs for
14579      brlt ourselves if emitrelocations.  */
14580   if (htab->brlt != NULL
14581       && htab->brlt->reloc_count != 0
14582       && !_bfd_elf_link_output_relocs (output_bfd,
14583                                        htab->brlt,
14584                                        elf_section_data (htab->brlt)->rela.hdr,
14585                                        elf_section_data (htab->brlt)->relocs,
14586                                        NULL))
14587     return FALSE;
14588
14589   if (htab->glink != NULL
14590       && htab->glink->reloc_count != 0
14591       && !_bfd_elf_link_output_relocs (output_bfd,
14592                                        htab->glink,
14593                                        elf_section_data (htab->glink)->rela.hdr,
14594                                        elf_section_data (htab->glink)->relocs,
14595                                        NULL))
14596     return FALSE;
14597
14598
14599   if (htab->glink_eh_frame != NULL
14600       && htab->glink_eh_frame->sec_info_type == SEC_INFO_TYPE_EH_FRAME
14601       && !_bfd_elf_write_section_eh_frame (output_bfd, info,
14602                                            htab->glink_eh_frame,
14603                                            htab->glink_eh_frame->contents))
14604     return FALSE;
14605
14606   /* We need to handle writing out multiple GOT sections ourselves,
14607      since we didn't add them to DYNOBJ.  We know dynobj is the first
14608      bfd.  */
14609   while ((dynobj = dynobj->link_next) != NULL)
14610     {
14611       asection *s;
14612
14613       if (!is_ppc64_elf (dynobj))
14614         continue;
14615
14616       s = ppc64_elf_tdata (dynobj)->got;
14617       if (s != NULL
14618           && s->size != 0
14619           && s->output_section != bfd_abs_section_ptr
14620           && !bfd_set_section_contents (output_bfd, s->output_section,
14621                                         s->contents, s->output_offset,
14622                                         s->size))
14623         return FALSE;
14624       s = ppc64_elf_tdata (dynobj)->relgot;
14625       if (s != NULL
14626           && s->size != 0
14627           && s->output_section != bfd_abs_section_ptr
14628           && !bfd_set_section_contents (output_bfd, s->output_section,
14629                                         s->contents, s->output_offset,
14630                                         s->size))
14631         return FALSE;
14632     }
14633
14634   return TRUE;
14635 }
14636
14637 #include "elf64-target.h"
14638
14639 /* FreeBSD support */
14640
14641 #undef  TARGET_LITTLE_SYM
14642 #undef  TARGET_LITTLE_NAME
14643
14644 #undef  TARGET_BIG_SYM
14645 #define TARGET_BIG_SYM  bfd_elf64_powerpc_freebsd_vec
14646 #undef  TARGET_BIG_NAME
14647 #define TARGET_BIG_NAME "elf64-powerpc-freebsd"
14648
14649 #undef  ELF_OSABI
14650 #define ELF_OSABI       ELFOSABI_FREEBSD
14651
14652 #undef  elf64_bed
14653 #define elf64_bed       elf64_powerpc_fbsd_bed
14654
14655 #include "elf64-target.h"
14656