1aad33f12d2580346a985937017cc0d6738e8848
[external/binutils.git] / bfd / elfxx-x86.c
1 /* x86 specific support for ELF
2    Copyright (C) 2017 Free Software Foundation, Inc.
3
4    This file is part of BFD, the Binary File Descriptor library.
5
6    This program is free software; you can redistribute it and/or modify
7    it under the terms of the GNU General Public License as published by
8    the Free Software Foundation; either version 3 of the License, or
9    (at your option) any later version.
10
11    This program is distributed in the hope that it will be useful,
12    but WITHOUT ANY WARRANTY; without even the implied warranty of
13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14    GNU General Public License for more details.
15
16    You should have received a copy of the GNU General Public License
17    along with this program; if not, write to the Free Software
18    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
19    MA 02110-1301, USA.  */
20
21 #include "elfxx-x86.h"
22 #include "elf-vxworks.h"
23 #include "objalloc.h"
24 #include "elf/i386.h"
25 #include "elf/x86-64.h"
26
27 /* The name of the dynamic interpreter.  This is put in the .interp
28    section.  */
29
30 #define ELF32_DYNAMIC_INTERPRETER "/usr/lib/libc.so.1"
31 #define ELF64_DYNAMIC_INTERPRETER "/lib/ld64.so.1"
32 #define ELFX32_DYNAMIC_INTERPRETER "/lib/ldx32.so.1"
33
34 bfd_boolean
35 _bfd_x86_elf_mkobject (bfd *abfd)
36 {
37   return bfd_elf_allocate_object (abfd,
38                                   sizeof (struct elf_x86_obj_tdata),
39                                   get_elf_backend_data (abfd)->target_id);
40 }
41
42 /* _TLS_MODULE_BASE_ needs to be treated especially when linking
43    executables.  Rather than setting it to the beginning of the TLS
44    section, we have to set it to the end.    This function may be called
45    multiple times, it is idempotent.  */
46
47 void
48 _bfd_x86_elf_set_tls_module_base (struct bfd_link_info *info)
49 {
50   struct elf_x86_link_hash_table *htab;
51   struct bfd_link_hash_entry *base;
52   const struct elf_backend_data *bed;
53
54   if (!bfd_link_executable (info))
55     return;
56
57   bed = get_elf_backend_data (info->output_bfd);
58   htab = elf_x86_hash_table (info, bed->target_id);
59   if (htab == NULL)
60     return;
61
62   base = htab->tls_module_base;
63   if (base == NULL)
64     return;
65
66   base->u.def.value = htab->elf.tls_size;
67 }
68
69 /* Return the base VMA address which should be subtracted from real addresses
70    when resolving @dtpoff relocation.
71    This is PT_TLS segment p_vaddr.  */
72
73 bfd_vma
74 _bfd_x86_elf_dtpoff_base (struct bfd_link_info *info)
75 {
76   /* If tls_sec is NULL, we should have signalled an error already.  */
77   if (elf_hash_table (info)->tls_sec == NULL)
78     return 0;
79   return elf_hash_table (info)->tls_sec->vma;
80 }
81
82 /* Allocate space in .plt, .got and associated reloc sections for
83    dynamic relocs.  */
84
85 static bfd_boolean
86 elf_x86_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
87 {
88   struct bfd_link_info *info;
89   struct elf_x86_link_hash_table *htab;
90   struct elf_x86_link_hash_entry *eh;
91   struct elf_dyn_relocs *p;
92   unsigned int plt_entry_size;
93   bfd_boolean resolved_to_zero;
94   const struct elf_backend_data *bed;
95
96   if (h->root.type == bfd_link_hash_indirect)
97     return TRUE;
98
99   eh = (struct elf_x86_link_hash_entry *) h;
100
101   info = (struct bfd_link_info *) inf;
102   bed = get_elf_backend_data (info->output_bfd);
103   htab = elf_x86_hash_table (info, bed->target_id);
104   if (htab == NULL)
105     return FALSE;
106
107   plt_entry_size = htab->plt.plt_entry_size;
108
109   resolved_to_zero = UNDEFINED_WEAK_RESOLVED_TO_ZERO (info, eh);
110
111   /* Clear the reference count of function pointer relocations if
112      symbol isn't a normal function.  */
113   if (h->type != STT_FUNC)
114     eh->func_pointer_refcount = 0;
115
116   /* We can't use the GOT PLT if pointer equality is needed since
117      finish_dynamic_symbol won't clear symbol value and the dynamic
118      linker won't update the GOT slot.  We will get into an infinite
119      loop at run-time.  */
120   if (htab->plt_got != NULL
121       && h->type != STT_GNU_IFUNC
122       && !h->pointer_equality_needed
123       && h->plt.refcount > 0
124       && h->got.refcount > 0)
125     {
126       /* Don't use the regular PLT if there are both GOT and GOTPLT
127          reloctions.  */
128       h->plt.offset = (bfd_vma) -1;
129
130       /* Use the GOT PLT.  */
131       eh->plt_got.refcount = 1;
132     }
133
134   /* Since STT_GNU_IFUNC symbol must go through PLT, we handle it
135      here if it is defined and referenced in a non-shared object.  */
136   if (h->type == STT_GNU_IFUNC
137       && h->def_regular)
138     {
139       if (_bfd_elf_allocate_ifunc_dyn_relocs (info, h, &eh->dyn_relocs,
140                                               &htab->readonly_dynrelocs_against_ifunc,
141                                               plt_entry_size,
142                                               (htab->plt.has_plt0
143                                                * plt_entry_size),
144                                                htab->got_entry_size,
145                                                TRUE))
146         {
147           asection *s = htab->plt_second;
148           if (h->plt.offset != (bfd_vma) -1 && s != NULL)
149             {
150               /* Use the second PLT section if it is created.  */
151               eh->plt_second.offset = s->size;
152
153               /* Make room for this entry in the second PLT section.  */
154               s->size += htab->non_lazy_plt->plt_entry_size;
155             }
156
157           return TRUE;
158         }
159       else
160         return FALSE;
161     }
162   /* Don't create the PLT entry if there are only function pointer
163      relocations which can be resolved at run-time.  */
164   else if (htab->elf.dynamic_sections_created
165            && (h->plt.refcount > eh->func_pointer_refcount
166                || eh->plt_got.refcount > 0))
167     {
168       bfd_boolean use_plt_got = eh->plt_got.refcount > 0;
169
170       /* Clear the reference count of function pointer relocations
171          if PLT is used.  */
172       eh->func_pointer_refcount = 0;
173
174       /* Make sure this symbol is output as a dynamic symbol.
175          Undefined weak syms won't yet be marked as dynamic.  */
176       if (h->dynindx == -1
177           && !h->forced_local
178           && !resolved_to_zero
179           && h->root.type == bfd_link_hash_undefweak)
180         {
181           if (! bfd_elf_link_record_dynamic_symbol (info, h))
182             return FALSE;
183         }
184
185       if (bfd_link_pic (info)
186           || WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, 0, h))
187         {
188           asection *s = htab->elf.splt;
189           asection *second_s = htab->plt_second;
190           asection *got_s = htab->plt_got;
191
192           /* If this is the first .plt entry, make room for the special
193              first entry.  The .plt section is used by prelink to undo
194              prelinking for dynamic relocations.  */
195           if (s->size == 0)
196             s->size = htab->plt.has_plt0 * plt_entry_size;
197
198           if (use_plt_got)
199             eh->plt_got.offset = got_s->size;
200           else
201             {
202               h->plt.offset = s->size;
203               if (second_s)
204                 eh->plt_second.offset = second_s->size;
205             }
206
207           /* If this symbol is not defined in a regular file, and we are
208              not generating a shared library, then set the symbol to this
209              location in the .plt.  This is required to make function
210              pointers compare as equal between the normal executable and
211              the shared library.  */
212           if (! bfd_link_pic (info)
213               && !h->def_regular)
214             {
215               if (use_plt_got)
216                 {
217                   /* We need to make a call to the entry of the GOT PLT
218                      instead of regular PLT entry.  */
219                   h->root.u.def.section = got_s;
220                   h->root.u.def.value = eh->plt_got.offset;
221                 }
222               else
223                 {
224                   if (second_s)
225                     {
226                       /* We need to make a call to the entry of the
227                          second PLT instead of regular PLT entry.  */
228                       h->root.u.def.section = second_s;
229                       h->root.u.def.value = eh->plt_second.offset;
230                     }
231                   else
232                     {
233                       h->root.u.def.section = s;
234                       h->root.u.def.value = h->plt.offset;
235                     }
236                 }
237             }
238
239           /* Make room for this entry.  */
240           if (use_plt_got)
241             got_s->size += htab->non_lazy_plt->plt_entry_size;
242           else
243             {
244               s->size += plt_entry_size;
245               if (second_s)
246                 second_s->size += htab->non_lazy_plt->plt_entry_size;
247
248               /* We also need to make an entry in the .got.plt section,
249                  which will be placed in the .got section by the linker
250                  script.  */
251               htab->elf.sgotplt->size += htab->got_entry_size;
252
253               /* There should be no PLT relocation against resolved
254                  undefined weak symbol in executable.  */
255               if (!resolved_to_zero)
256                 {
257                   /* We also need to make an entry in the .rel.plt
258                      section.  */
259                   htab->elf.srelplt->size += htab->sizeof_reloc;
260                   htab->elf.srelplt->reloc_count++;
261                 }
262             }
263
264           if (htab->is_vxworks && !bfd_link_pic (info))
265             {
266               /* VxWorks has a second set of relocations for each PLT entry
267                  in executables.  They go in a separate relocation section,
268                  which is processed by the kernel loader.  */
269
270               /* There are two relocations for the initial PLT entry: an
271                  R_386_32 relocation for _GLOBAL_OFFSET_TABLE_ + 4 and an
272                  R_386_32 relocation for _GLOBAL_OFFSET_TABLE_ + 8.  */
273
274               asection *srelplt2 = htab->srelplt2;
275               if (h->plt.offset == plt_entry_size)
276                 srelplt2->size += (htab->sizeof_reloc * 2);
277
278               /* There are two extra relocations for each subsequent PLT entry:
279                  an R_386_32 relocation for the GOT entry, and an R_386_32
280                  relocation for the PLT entry.  */
281
282               srelplt2->size += (htab->sizeof_reloc * 2);
283             }
284         }
285       else
286         {
287           eh->plt_got.offset = (bfd_vma) -1;
288           h->plt.offset = (bfd_vma) -1;
289           h->needs_plt = 0;
290         }
291     }
292   else
293     {
294       eh->plt_got.offset = (bfd_vma) -1;
295       h->plt.offset = (bfd_vma) -1;
296       h->needs_plt = 0;
297     }
298
299   eh->tlsdesc_got = (bfd_vma) -1;
300
301   /* For i386, if R_386_TLS_{IE_32,IE,GOTIE} symbol is now local to the
302      binary, make it a R_386_TLS_LE_32 requiring no TLS entry.  For
303      x86-64, if R_X86_64_GOTTPOFF symbol is now local to the binary,
304      make it a R_X86_64_TPOFF32 requiring no GOT entry.  */
305   if (h->got.refcount > 0
306       && bfd_link_executable (info)
307       && h->dynindx == -1
308       && (elf_x86_hash_entry (h)->tls_type & GOT_TLS_IE))
309     h->got.offset = (bfd_vma) -1;
310   else if (h->got.refcount > 0)
311     {
312       asection *s;
313       bfd_boolean dyn;
314       int tls_type = elf_x86_hash_entry (h)->tls_type;
315
316       /* Make sure this symbol is output as a dynamic symbol.
317          Undefined weak syms won't yet be marked as dynamic.  */
318       if (h->dynindx == -1
319           && !h->forced_local
320           && !resolved_to_zero
321           && h->root.type == bfd_link_hash_undefweak)
322         {
323           if (! bfd_elf_link_record_dynamic_symbol (info, h))
324             return FALSE;
325         }
326
327       s = htab->elf.sgot;
328       if (GOT_TLS_GDESC_P (tls_type))
329         {
330           eh->tlsdesc_got = htab->elf.sgotplt->size
331             - elf_x86_compute_jump_table_size (htab);
332           htab->elf.sgotplt->size += 2 * htab->got_entry_size;
333           h->got.offset = (bfd_vma) -2;
334         }
335       if (! GOT_TLS_GDESC_P (tls_type)
336           || GOT_TLS_GD_P (tls_type))
337         {
338           h->got.offset = s->size;
339           s->size += htab->got_entry_size;
340           /* R_386_TLS_GD and R_X86_64_TLSGD need 2 consecutive GOT
341              slots.  */
342           if (GOT_TLS_GD_P (tls_type) || tls_type == GOT_TLS_IE_BOTH)
343             s->size += htab->got_entry_size;
344         }
345       dyn = htab->elf.dynamic_sections_created;
346       /* R_386_TLS_IE_32 needs one dynamic relocation,
347          R_386_TLS_IE resp. R_386_TLS_GOTIE needs one dynamic relocation,
348          (but if both R_386_TLS_IE_32 and R_386_TLS_IE is present, we
349          need two), R_386_TLS_GD and R_X86_64_TLSGD need one if local
350          symbol and two if global.  No dynamic relocation against
351          resolved undefined weak symbol in executable.  */
352       if (tls_type == GOT_TLS_IE_BOTH)
353         htab->elf.srelgot->size += 2 * htab->sizeof_reloc;
354       else if ((GOT_TLS_GD_P (tls_type) && h->dynindx == -1)
355                || (tls_type & GOT_TLS_IE))
356         htab->elf.srelgot->size += htab->sizeof_reloc;
357       else if (GOT_TLS_GD_P (tls_type))
358         htab->elf.srelgot->size += 2 * htab->sizeof_reloc;
359       else if (! GOT_TLS_GDESC_P (tls_type)
360                && ((ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
361                     && !resolved_to_zero)
362                    || h->root.type != bfd_link_hash_undefweak)
363                && (bfd_link_pic (info)
364                    || WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, 0, h)))
365         htab->elf.srelgot->size += htab->sizeof_reloc;
366       if (GOT_TLS_GDESC_P (tls_type))
367         {
368           htab->elf.srelplt->size += htab->sizeof_reloc;
369           if (bed->target_id == X86_64_ELF_DATA)
370             htab->tlsdesc_plt = (bfd_vma) -1;
371         }
372     }
373   else
374     h->got.offset = (bfd_vma) -1;
375
376   if (eh->dyn_relocs == NULL)
377     return TRUE;
378
379   /* In the shared -Bsymbolic case, discard space allocated for
380      dynamic pc-relative relocs against symbols which turn out to be
381      defined in regular objects.  For the normal shared case, discard
382      space for pc-relative relocs that have become local due to symbol
383      visibility changes.  */
384
385   if (bfd_link_pic (info))
386     {
387       /* Relocs that use pc_count are those that appear on a call
388          insn, or certain REL relocs that can generated via assembly.
389          We want calls to protected symbols to resolve directly to the
390          function rather than going via the plt.  If people want
391          function pointer comparisons to work as expected then they
392          should avoid writing weird assembly.  */
393       if (SYMBOL_CALLS_LOCAL (info, h))
394         {
395           struct elf_dyn_relocs **pp;
396
397           for (pp = &eh->dyn_relocs; (p = *pp) != NULL; )
398             {
399               p->count -= p->pc_count;
400               p->pc_count = 0;
401               if (p->count == 0)
402                 *pp = p->next;
403               else
404                 pp = &p->next;
405             }
406         }
407
408       if (htab->is_vxworks)
409         {
410           struct elf_dyn_relocs **pp;
411           for (pp = &eh->dyn_relocs; (p = *pp) != NULL; )
412             {
413               if (strcmp (p->sec->output_section->name, ".tls_vars") == 0)
414                 *pp = p->next;
415               else
416                 pp = &p->next;
417             }
418         }
419
420       /* Also discard relocs on undefined weak syms with non-default
421          visibility or in PIE.  */
422       if (eh->dyn_relocs != NULL)
423         {
424           if (h->root.type == bfd_link_hash_undefweak)
425             {
426               /* Undefined weak symbol is never bound locally in shared
427                  library.  */
428               if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
429                   || resolved_to_zero)
430                 {
431                   if (bed->target_id == I386_ELF_DATA
432                       && h->non_got_ref)
433                     {
434                       /* Keep dynamic non-GOT/non-PLT relocation so
435                          that we can branch to 0 without PLT.  */
436                       struct elf_dyn_relocs **pp;
437
438                       for (pp = &eh->dyn_relocs; (p = *pp) != NULL; )
439                         if (p->pc_count == 0)
440                           *pp = p->next;
441                         else
442                           {
443                             /* Remove non-R_386_PC32 relocation.  */
444                             p->count = p->pc_count;
445                             pp = &p->next;
446                           }
447
448                       /* Make sure undefined weak symbols are output
449                          as dynamic symbols in PIEs for dynamic non-GOT
450                          non-PLT reloations.  */
451                       if (eh->dyn_relocs != NULL
452                           && !bfd_elf_link_record_dynamic_symbol (info, h))
453                         return FALSE;
454                     }
455                   else
456                     eh->dyn_relocs = NULL;
457                 }
458               else if (h->dynindx == -1
459                        && !h->forced_local
460                        && !bfd_elf_link_record_dynamic_symbol (info, h))
461                 return FALSE;
462             }
463           else if (bfd_link_executable (info)
464                    && (h->needs_copy || eh->needs_copy)
465                    && h->def_dynamic
466                    && !h->def_regular)
467             {
468               /* NB: needs_copy is set only for x86-64.  For PIE,
469                  discard space for pc-relative relocs against symbols
470                  which turn out to need copy relocs.  */
471               struct elf_dyn_relocs **pp;
472
473               for (pp = &eh->dyn_relocs; (p = *pp) != NULL; )
474                 {
475                   if (p->pc_count != 0)
476                     *pp = p->next;
477                   else
478                     pp = &p->next;
479                 }
480             }
481         }
482     }
483   else if (ELIMINATE_COPY_RELOCS)
484     {
485       /* For the non-shared case, discard space for relocs against
486          symbols which turn out to need copy relocs or are not
487          dynamic.  Keep dynamic relocations for run-time function
488          pointer initialization.  */
489
490       if ((!h->non_got_ref
491            || eh->func_pointer_refcount > 0
492            || (h->root.type == bfd_link_hash_undefweak
493                && !resolved_to_zero))
494           && ((h->def_dynamic
495                && !h->def_regular)
496               || (htab->elf.dynamic_sections_created
497                   && (h->root.type == bfd_link_hash_undefweak
498                       || h->root.type == bfd_link_hash_undefined))))
499         {
500           /* Make sure this symbol is output as a dynamic symbol.
501              Undefined weak syms won't yet be marked as dynamic.  */
502           if (h->dynindx == -1
503               && !h->forced_local
504               && !resolved_to_zero
505               && h->root.type == bfd_link_hash_undefweak
506               && ! bfd_elf_link_record_dynamic_symbol (info, h))
507             return FALSE;
508
509           /* If that succeeded, we know we'll be keeping all the
510              relocs.  */
511           if (h->dynindx != -1)
512             goto keep;
513         }
514
515       eh->dyn_relocs = NULL;
516       eh->func_pointer_refcount = 0;
517
518     keep: ;
519     }
520
521   /* Finally, allocate space.  */
522   for (p = eh->dyn_relocs; p != NULL; p = p->next)
523     {
524       asection *sreloc;
525
526       sreloc = elf_section_data (p->sec)->sreloc;
527
528       BFD_ASSERT (sreloc != NULL);
529       sreloc->size += p->count * htab->sizeof_reloc;
530     }
531
532   return TRUE;
533 }
534
535 /* Find any dynamic relocs that apply to read-only sections.  */
536
537 bfd_boolean
538 _bfd_x86_elf_readonly_dynrelocs (struct elf_link_hash_entry *h,
539                                  void *inf)
540 {
541   struct elf_x86_link_hash_entry *eh;
542   struct elf_dyn_relocs *p;
543
544   /* Skip local IFUNC symbols. */
545   if (h->forced_local && h->type == STT_GNU_IFUNC)
546     return TRUE;
547
548   eh = (struct elf_x86_link_hash_entry *) h;
549   for (p = eh->dyn_relocs; p != NULL; p = p->next)
550     {
551       asection *s = p->sec->output_section;
552
553       if (s != NULL && (s->flags & SEC_READONLY) != 0)
554         {
555           struct bfd_link_info *info = (struct bfd_link_info *) inf;
556
557           info->flags |= DF_TEXTREL;
558
559           if ((info->warn_shared_textrel && bfd_link_pic (info))
560               || info->error_textrel)
561             /* xgettext:c-format */
562             info->callbacks->einfo (_("%P: %B: warning: relocation against `%s' in readonly section `%A'\n"),
563                                     p->sec->owner, h->root.root.string,
564                                     p->sec);
565
566           /* Not an error, just cut short the traversal.  */
567           return FALSE;
568         }
569     }
570   return TRUE;
571 }
572
573 /* Allocate space in .plt, .got and associated reloc sections for
574    local dynamic relocs.  */
575
576 static bfd_boolean
577 elf_x86_allocate_local_dynreloc (void **slot, void *inf)
578 {
579   struct elf_link_hash_entry *h
580     = (struct elf_link_hash_entry *) *slot;
581
582   if (h->type != STT_GNU_IFUNC
583       || !h->def_regular
584       || !h->ref_regular
585       || !h->forced_local
586       || h->root.type != bfd_link_hash_defined)
587     abort ();
588
589   return elf_x86_allocate_dynrelocs (h, inf);
590 }
591
592 /* Find and/or create a hash entry for local symbol.  */
593
594 struct elf_link_hash_entry *
595 _bfd_elf_x86_get_local_sym_hash (struct elf_x86_link_hash_table *htab,
596                                  bfd *abfd, const Elf_Internal_Rela *rel,
597                                  bfd_boolean create)
598 {
599   struct elf_x86_link_hash_entry e, *ret;
600   asection *sec = abfd->sections;
601   hashval_t h = ELF_LOCAL_SYMBOL_HASH (sec->id,
602                                        htab->r_sym (rel->r_info));
603   void **slot;
604
605   e.elf.indx = sec->id;
606   e.elf.dynstr_index = htab->r_sym (rel->r_info);
607   slot = htab_find_slot_with_hash (htab->loc_hash_table, &e, h,
608                                    create ? INSERT : NO_INSERT);
609
610   if (!slot)
611     return NULL;
612
613   if (*slot)
614     {
615       ret = (struct elf_x86_link_hash_entry *) *slot;
616       return &ret->elf;
617     }
618
619   ret = (struct elf_x86_link_hash_entry *)
620         objalloc_alloc ((struct objalloc *) htab->loc_hash_memory,
621                         sizeof (struct elf_x86_link_hash_entry));
622   if (ret)
623     {
624       memset (ret, 0, sizeof (*ret));
625       ret->elf.indx = sec->id;
626       ret->elf.dynstr_index = htab->r_sym (rel->r_info);
627       ret->elf.dynindx = -1;
628       ret->plt_got.offset = (bfd_vma) -1;
629       *slot = ret;
630     }
631   return &ret->elf;
632 }
633
634 /* Create an entry in a x86 ELF linker hash table.  NB: THIS MUST BE IN
635    SYNC WITH _bfd_elf_link_hash_newfunc.  */
636
637 struct bfd_hash_entry *
638 _bfd_x86_elf_link_hash_newfunc (struct bfd_hash_entry *entry,
639                                 struct bfd_hash_table *table,
640                                 const char *string)
641 {
642   /* Allocate the structure if it has not already been allocated by a
643      subclass.  */
644   if (entry == NULL)
645     {
646       entry = (struct bfd_hash_entry *)
647         bfd_hash_allocate (table,
648                            sizeof (struct elf_x86_link_hash_entry));
649       if (entry == NULL)
650         return entry;
651     }
652
653   /* Call the allocation method of the superclass.  */
654   entry = _bfd_link_hash_newfunc (entry, table, string);
655   if (entry != NULL)
656     {
657       struct elf_x86_link_hash_entry *eh
658        = (struct elf_x86_link_hash_entry *) entry;
659       struct elf_link_hash_table *htab
660         = (struct elf_link_hash_table *) table;
661
662       memset (&eh->elf.size, 0,
663               (sizeof (struct elf_x86_link_hash_entry)
664                - offsetof (struct elf_link_hash_entry, size)));
665       /* Set local fields.  */
666       eh->elf.indx = -1;
667       eh->elf.dynindx = -1;
668       eh->elf.got = htab->init_got_refcount;
669       eh->elf.plt = htab->init_plt_refcount;
670       /* Assume that we have been called by a non-ELF symbol reader.
671          This flag is then reset by the code which reads an ELF input
672          file.  This ensures that a symbol created by a non-ELF symbol
673          reader will have the flag set correctly.  */
674       eh->elf.non_elf = 1;
675       eh->plt_second.offset = (bfd_vma) -1;
676       eh->plt_got.offset = (bfd_vma) -1;
677       eh->tlsdesc_got = (bfd_vma) -1;
678       eh->zero_undefweak = 1;
679     }
680
681   return entry;
682 }
683
684 /* Compute a hash of a local hash entry.  We use elf_link_hash_entry
685   for local symbol so that we can handle local STT_GNU_IFUNC symbols
686   as global symbol.  We reuse indx and dynstr_index for local symbol
687   hash since they aren't used by global symbols in this backend.  */
688
689 hashval_t
690 _bfd_x86_elf_local_htab_hash (const void *ptr)
691 {
692   struct elf_link_hash_entry *h
693     = (struct elf_link_hash_entry *) ptr;
694   return ELF_LOCAL_SYMBOL_HASH (h->indx, h->dynstr_index);
695 }
696
697 /* Compare local hash entries.  */
698
699 int
700 _bfd_x86_elf_local_htab_eq (const void *ptr1, const void *ptr2)
701 {
702   struct elf_link_hash_entry *h1
703      = (struct elf_link_hash_entry *) ptr1;
704   struct elf_link_hash_entry *h2
705     = (struct elf_link_hash_entry *) ptr2;
706
707   return h1->indx == h2->indx && h1->dynstr_index == h2->dynstr_index;
708 }
709
710 /* Destroy an x86 ELF linker hash table.  */
711
712 static void
713 elf_x86_link_hash_table_free (bfd *obfd)
714 {
715   struct elf_x86_link_hash_table *htab
716     = (struct elf_x86_link_hash_table *) obfd->link.hash;
717
718   if (htab->loc_hash_table)
719     htab_delete (htab->loc_hash_table);
720   if (htab->loc_hash_memory)
721     objalloc_free ((struct objalloc *) htab->loc_hash_memory);
722   _bfd_elf_link_hash_table_free (obfd);
723 }
724
725 static bfd_boolean
726 elf_i386_is_reloc_section (const char *secname)
727 {
728   return CONST_STRNEQ (secname, ".rel");
729 }
730
731 static bfd_boolean
732 elf_x86_64_is_reloc_section (const char *secname)
733 {
734   return CONST_STRNEQ (secname, ".rela");
735 }
736
737 /* Create an x86 ELF linker hash table.  */
738
739 struct bfd_link_hash_table *
740 _bfd_x86_elf_link_hash_table_create (bfd *abfd)
741 {
742   struct elf_x86_link_hash_table *ret;
743   const struct elf_backend_data *bed;
744   bfd_size_type amt = sizeof (struct elf_x86_link_hash_table);
745
746   ret = (struct elf_x86_link_hash_table *) bfd_zmalloc (amt);
747   if (ret == NULL)
748     return NULL;
749
750   bed = get_elf_backend_data (abfd);
751   if (!_bfd_elf_link_hash_table_init (&ret->elf, abfd,
752                                       _bfd_x86_elf_link_hash_newfunc,
753                                       sizeof (struct elf_x86_link_hash_entry),
754                                       bed->target_id))
755     {
756       free (ret);
757       return NULL;
758     }
759
760   if (bed->target_id == X86_64_ELF_DATA)
761     {
762       ret->is_reloc_section = elf_x86_64_is_reloc_section;
763       ret->dt_reloc = DT_RELA;
764       ret->dt_reloc_sz = DT_RELASZ;
765       ret->dt_reloc_ent = DT_RELAENT;
766       ret->got_entry_size = 8;
767       ret->tls_get_addr = "__tls_get_addr";
768     }
769   if (ABI_64_P (abfd))
770     {
771       ret->sizeof_reloc = sizeof (Elf64_External_Rela);
772       ret->pointer_r_type = R_X86_64_64;
773       ret->dynamic_interpreter = ELF64_DYNAMIC_INTERPRETER;
774       ret->dynamic_interpreter_size = sizeof ELF64_DYNAMIC_INTERPRETER;
775     }
776   else
777     {
778       if (bed->target_id == X86_64_ELF_DATA)
779         {
780           ret->sizeof_reloc = sizeof (Elf32_External_Rela);
781           ret->pointer_r_type = R_X86_64_32;
782           ret->dynamic_interpreter = ELFX32_DYNAMIC_INTERPRETER;
783           ret->dynamic_interpreter_size
784             = sizeof ELFX32_DYNAMIC_INTERPRETER;
785         }
786       else
787         {
788           ret->is_reloc_section = elf_i386_is_reloc_section;
789           ret->dt_reloc = DT_REL;
790           ret->dt_reloc_sz = DT_RELSZ;
791           ret->dt_reloc_ent = DT_RELENT;
792           ret->sizeof_reloc = sizeof (Elf32_External_Rel);
793           ret->got_entry_size = 4;
794           ret->pointer_r_type = R_386_32;
795           ret->dynamic_interpreter = ELF32_DYNAMIC_INTERPRETER;
796           ret->dynamic_interpreter_size
797             = sizeof ELF32_DYNAMIC_INTERPRETER;
798           ret->tls_get_addr = "___tls_get_addr";
799         }
800     }
801   ret->target_id = bed->target_id;
802
803   ret->loc_hash_table = htab_try_create (1024,
804                                          _bfd_x86_elf_local_htab_hash,
805                                          _bfd_x86_elf_local_htab_eq,
806                                          NULL);
807   ret->loc_hash_memory = objalloc_create ();
808   if (!ret->loc_hash_table || !ret->loc_hash_memory)
809     {
810       elf_x86_link_hash_table_free (abfd);
811       return NULL;
812     }
813   ret->elf.root.hash_table_free = elf_x86_link_hash_table_free;
814
815   return &ret->elf.root;
816 }
817
818 /* Sort relocs into address order.  */
819
820 int
821 _bfd_x86_elf_compare_relocs (const void *ap, const void *bp)
822 {
823   const arelent *a = * (const arelent **) ap;
824   const arelent *b = * (const arelent **) bp;
825
826   if (a->address > b->address)
827     return 1;
828   else if (a->address < b->address)
829     return -1;
830   else
831     return 0;
832 }
833
834 bfd_boolean
835 _bfd_x86_elf_link_check_relocs (bfd *abfd, struct bfd_link_info *info)
836 {
837   if (!bfd_link_relocatable (info))
838     {
839       /* Check for __tls_get_addr reference.  */
840       struct elf_x86_link_hash_table *htab;
841       const struct elf_backend_data *bed = get_elf_backend_data (abfd);
842       htab = elf_x86_hash_table (info, bed->target_id);
843       if (htab)
844         {
845           struct elf_link_hash_entry *h;
846
847           h = elf_link_hash_lookup (elf_hash_table (info),
848                                     htab->tls_get_addr,
849                                     FALSE, FALSE, FALSE);
850           if (h != NULL)
851             elf_x86_hash_entry (h)->tls_get_addr = 1;
852
853           /* "__ehdr_start" will be defined by linker as a hidden symbol
854              later if it is referenced and not defined.  */
855           h = elf_link_hash_lookup (elf_hash_table (info),
856                                     "__ehdr_start",
857                                     FALSE, FALSE, FALSE);
858           if (h != NULL
859               && (h->root.type == bfd_link_hash_new
860                   || h->root.type == bfd_link_hash_undefined
861                   || h->root.type == bfd_link_hash_undefweak
862                   || h->root.type == bfd_link_hash_common))
863             {
864               elf_x86_hash_entry (h)->local_ref = 2;
865               elf_x86_hash_entry (h)->linker_def = 1;
866             }
867         }
868     }
869
870   /* Invoke the regular ELF backend linker to do all the work.  */
871   return _bfd_elf_link_check_relocs (abfd, info);
872 }
873
874 /* Set the sizes of the dynamic sections.  */
875
876 bfd_boolean
877 _bfd_x86_elf_size_dynamic_sections (bfd *output_bfd,
878                                     struct bfd_link_info *info)
879 {
880   struct elf_x86_link_hash_table *htab;
881   bfd *dynobj;
882   asection *s;
883   bfd_boolean relocs;
884   bfd *ibfd;
885   const struct elf_backend_data *bed
886     = get_elf_backend_data (output_bfd);
887
888   htab = elf_x86_hash_table (info, bed->target_id);
889   if (htab == NULL)
890     return FALSE;
891   dynobj = htab->elf.dynobj;
892   if (dynobj == NULL)
893     abort ();
894
895   /* Set up .got offsets for local syms, and space for local dynamic
896      relocs.  */
897   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
898     {
899       bfd_signed_vma *local_got;
900       bfd_signed_vma *end_local_got;
901       char *local_tls_type;
902       bfd_vma *local_tlsdesc_gotent;
903       bfd_size_type locsymcount;
904       Elf_Internal_Shdr *symtab_hdr;
905       asection *srel;
906
907       if (! is_x86_elf (ibfd, htab))
908         continue;
909
910       for (s = ibfd->sections; s != NULL; s = s->next)
911         {
912           struct elf_dyn_relocs *p;
913
914           for (p = ((struct elf_dyn_relocs *)
915                      elf_section_data (s)->local_dynrel);
916                p != NULL;
917                p = p->next)
918             {
919               if (!bfd_is_abs_section (p->sec)
920                   && bfd_is_abs_section (p->sec->output_section))
921                 {
922                   /* Input section has been discarded, either because
923                      it is a copy of a linkonce section or due to
924                      linker script /DISCARD/, so we'll be discarding
925                      the relocs too.  */
926                 }
927               else if (htab->is_vxworks
928                        && strcmp (p->sec->output_section->name,
929                                   ".tls_vars") == 0)
930                 {
931                   /* Relocations in vxworks .tls_vars sections are
932                      handled specially by the loader.  */
933                 }
934               else if (p->count != 0)
935                 {
936                   srel = elf_section_data (p->sec)->sreloc;
937                   srel->size += p->count * htab->sizeof_reloc;
938                   if ((p->sec->output_section->flags & SEC_READONLY) != 0
939                       && (info->flags & DF_TEXTREL) == 0)
940                     {
941                       info->flags |= DF_TEXTREL;
942                       if ((info->warn_shared_textrel && bfd_link_pic (info))
943                           || info->error_textrel)
944                         /* xgettext:c-format */
945                         info->callbacks->einfo (_("%P: %B: warning: relocation in readonly section `%A'\n"),
946                                                 p->sec->owner, p->sec);
947                     }
948                 }
949             }
950         }
951
952       local_got = elf_local_got_refcounts (ibfd);
953       if (!local_got)
954         continue;
955
956       symtab_hdr = &elf_symtab_hdr (ibfd);
957       locsymcount = symtab_hdr->sh_info;
958       end_local_got = local_got + locsymcount;
959       local_tls_type = elf_x86_local_got_tls_type (ibfd);
960       local_tlsdesc_gotent = elf_x86_local_tlsdesc_gotent (ibfd);
961       s = htab->elf.sgot;
962       srel = htab->elf.srelgot;
963       for (; local_got < end_local_got;
964            ++local_got, ++local_tls_type, ++local_tlsdesc_gotent)
965         {
966           *local_tlsdesc_gotent = (bfd_vma) -1;
967           if (*local_got > 0)
968             {
969               if (GOT_TLS_GDESC_P (*local_tls_type))
970                 {
971                   *local_tlsdesc_gotent = htab->elf.sgotplt->size
972                     - elf_x86_compute_jump_table_size (htab);
973                   htab->elf.sgotplt->size += 2 * htab->got_entry_size;
974                   *local_got = (bfd_vma) -2;
975                 }
976               if (! GOT_TLS_GDESC_P (*local_tls_type)
977                   || GOT_TLS_GD_P (*local_tls_type))
978                 {
979                   *local_got = s->size;
980                   s->size += htab->got_entry_size;
981                   if (GOT_TLS_GD_P (*local_tls_type)
982                       || *local_tls_type == GOT_TLS_IE_BOTH)
983                     s->size += htab->got_entry_size;
984                 }
985               if (bfd_link_pic (info)
986                   || GOT_TLS_GD_ANY_P (*local_tls_type)
987                   || (*local_tls_type & GOT_TLS_IE))
988                 {
989                   if (*local_tls_type == GOT_TLS_IE_BOTH)
990                     srel->size += 2 * htab->sizeof_reloc;
991                   else if (GOT_TLS_GD_P (*local_tls_type)
992                            || ! GOT_TLS_GDESC_P (*local_tls_type))
993                     srel->size += htab->sizeof_reloc;
994                   if (GOT_TLS_GDESC_P (*local_tls_type))
995                     {
996                       htab->elf.srelplt->size += htab->sizeof_reloc;
997                       if (bed->target_id == X86_64_ELF_DATA)
998                         htab->tlsdesc_plt = (bfd_vma) -1;
999                     }
1000                 }
1001             }
1002           else
1003             *local_got = (bfd_vma) -1;
1004         }
1005     }
1006
1007   if (htab->tls_ld_or_ldm_got.refcount > 0)
1008     {
1009       /* Allocate 2 got entries and 1 dynamic reloc for R_386_TLS_LDM
1010          or R_X86_64_TLSLD relocs.  */
1011       htab->tls_ld_or_ldm_got.offset = htab->elf.sgot->size;
1012       htab->elf.sgot->size += 2 * htab->got_entry_size;
1013       htab->elf.srelgot->size += htab->sizeof_reloc;
1014     }
1015   else
1016     htab->tls_ld_or_ldm_got.offset = -1;
1017
1018   /* Allocate global sym .plt and .got entries, and space for global
1019      sym dynamic relocs.  */
1020   elf_link_hash_traverse (&htab->elf, elf_x86_allocate_dynrelocs,
1021                           info);
1022
1023   /* Allocate .plt and .got entries, and space for local symbols.  */
1024   htab_traverse (htab->loc_hash_table, elf_x86_allocate_local_dynreloc,
1025                  info);
1026
1027   /* For every jump slot reserved in the sgotplt, reloc_count is
1028      incremented.  However, when we reserve space for TLS descriptors,
1029      it's not incremented, so in order to compute the space reserved
1030      for them, it suffices to multiply the reloc count by the jump
1031      slot size.
1032
1033      PR ld/13302: We start next_irelative_index at the end of .rela.plt
1034      so that R_{386,X86_64}_IRELATIVE entries come last.  */
1035   if (htab->elf.srelplt)
1036     {
1037       htab->next_tls_desc_index = htab->elf.srelplt->reloc_count;
1038       htab->sgotplt_jump_table_size
1039         = elf_x86_compute_jump_table_size (htab);
1040       htab->next_irelative_index = htab->elf.srelplt->reloc_count - 1;
1041     }
1042   else if (htab->elf.irelplt)
1043     htab->next_irelative_index = htab->elf.irelplt->reloc_count - 1;
1044
1045   if (htab->tlsdesc_plt)
1046     {
1047       /* NB: tlsdesc_plt is set only for x86-64.  If we're not using
1048          lazy TLS relocations, don't generate the PLT and GOT entries
1049          they require.  */
1050       if ((info->flags & DF_BIND_NOW))
1051         htab->tlsdesc_plt = 0;
1052       else
1053         {
1054           htab->tlsdesc_got = htab->elf.sgot->size;
1055           htab->elf.sgot->size += htab->got_entry_size;
1056           /* Reserve room for the initial entry.
1057              FIXME: we could probably do away with it in this case.  */
1058           if (htab->elf.splt->size == 0)
1059             htab->elf.splt->size = htab->plt.plt_entry_size;
1060           htab->tlsdesc_plt = htab->elf.splt->size;
1061           htab->elf.splt->size += htab->plt.plt_entry_size;
1062         }
1063     }
1064
1065   if (htab->elf.sgotplt)
1066     {
1067       /* Don't allocate .got.plt section if there are no GOT nor PLT
1068          entries and there is no reference to _GLOBAL_OFFSET_TABLE_.  */
1069       if ((htab->elf.hgot == NULL
1070            || !htab->elf.hgot->ref_regular_nonweak)
1071           && (htab->elf.sgotplt->size == bed->got_header_size)
1072           && (htab->elf.splt == NULL
1073               || htab->elf.splt->size == 0)
1074           && (htab->elf.sgot == NULL
1075               || htab->elf.sgot->size == 0)
1076           && (htab->elf.iplt == NULL
1077               || htab->elf.iplt->size == 0)
1078           && (htab->elf.igotplt == NULL
1079               || htab->elf.igotplt->size == 0))
1080         htab->elf.sgotplt->size = 0;
1081     }
1082
1083   if (_bfd_elf_eh_frame_present (info))
1084     {
1085       if (htab->plt_eh_frame != NULL
1086           && htab->elf.splt != NULL
1087           && htab->elf.splt->size != 0
1088           && !bfd_is_abs_section (htab->elf.splt->output_section))
1089         htab->plt_eh_frame->size = htab->plt.eh_frame_plt_size;
1090
1091       if (htab->plt_got_eh_frame != NULL
1092           && htab->plt_got != NULL
1093           && htab->plt_got->size != 0
1094           && !bfd_is_abs_section (htab->plt_got->output_section))
1095         htab->plt_got_eh_frame->size
1096           = htab->non_lazy_plt->eh_frame_plt_size;
1097
1098       /* Unwind info for the second PLT and .plt.got sections are
1099          identical.  */
1100       if (htab->plt_second_eh_frame != NULL
1101           && htab->plt_second != NULL
1102           && htab->plt_second->size != 0
1103           && !bfd_is_abs_section (htab->plt_second->output_section))
1104         htab->plt_second_eh_frame->size
1105           = htab->non_lazy_plt->eh_frame_plt_size;
1106     }
1107
1108   /* We now have determined the sizes of the various dynamic sections.
1109      Allocate memory for them.  */
1110   relocs = FALSE;
1111   for (s = dynobj->sections; s != NULL; s = s->next)
1112     {
1113       bfd_boolean strip_section = TRUE;
1114
1115       if ((s->flags & SEC_LINKER_CREATED) == 0)
1116         continue;
1117
1118       if (s == htab->elf.splt
1119           || s == htab->elf.sgot)
1120         {
1121           /* Strip this section if we don't need it; see the
1122              comment below.  */
1123           /* We'd like to strip these sections if they aren't needed, but if
1124              we've exported dynamic symbols from them we must leave them.
1125              It's too late to tell BFD to get rid of the symbols.  */
1126
1127           if (htab->elf.hplt != NULL)
1128             strip_section = FALSE;
1129         }
1130       else if (s == htab->elf.sgotplt
1131                || s == htab->elf.iplt
1132                || s == htab->elf.igotplt
1133                || s == htab->plt_second
1134                || s == htab->plt_got
1135                || s == htab->plt_eh_frame
1136                || s == htab->plt_got_eh_frame
1137                || s == htab->plt_second_eh_frame
1138                || s == htab->elf.sdynbss
1139                || s == htab->elf.sdynrelro)
1140         {
1141           /* Strip these too.  */
1142         }
1143       else if (htab->is_reloc_section (bfd_get_section_name (dynobj, s)))
1144         {
1145           if (s->size != 0
1146               && s != htab->elf.srelplt
1147               && s != htab->srelplt2)
1148             relocs = TRUE;
1149
1150           /* We use the reloc_count field as a counter if we need
1151              to copy relocs into the output file.  */
1152           if (s != htab->elf.srelplt)
1153             s->reloc_count = 0;
1154         }
1155       else
1156         {
1157           /* It's not one of our sections, so don't allocate space.  */
1158           continue;
1159         }
1160
1161       if (s->size == 0)
1162         {
1163           /* If we don't need this section, strip it from the
1164              output file.  This is mostly to handle .rel.bss and
1165              .rel.plt.  We must create both sections in
1166              create_dynamic_sections, because they must be created
1167              before the linker maps input sections to output
1168              sections.  The linker does that before
1169              adjust_dynamic_symbol is called, and it is that
1170              function which decides whether anything needs to go
1171              into these sections.  */
1172           if (strip_section)
1173             s->flags |= SEC_EXCLUDE;
1174           continue;
1175         }
1176
1177       if ((s->flags & SEC_HAS_CONTENTS) == 0)
1178         continue;
1179
1180       /* Allocate memory for the section contents.  We use bfd_zalloc
1181          here in case unused entries are not reclaimed before the
1182          section's contents are written out.  This should not happen,
1183          but this way if it does, we get a R_386_NONE or R_X86_64_NONE
1184          reloc instead of garbage.  */
1185       s->contents = (unsigned char *) bfd_zalloc (dynobj, s->size);
1186       if (s->contents == NULL)
1187         return FALSE;
1188     }
1189
1190   if (htab->plt_eh_frame != NULL
1191       && htab->plt_eh_frame->contents != NULL)
1192     {
1193       memcpy (htab->plt_eh_frame->contents,
1194               htab->plt.eh_frame_plt,
1195               htab->plt_eh_frame->size);
1196       bfd_put_32 (dynobj, htab->elf.splt->size,
1197                   htab->plt_eh_frame->contents + PLT_FDE_LEN_OFFSET);
1198     }
1199
1200   if (htab->plt_got_eh_frame != NULL
1201       && htab->plt_got_eh_frame->contents != NULL)
1202     {
1203       memcpy (htab->plt_got_eh_frame->contents,
1204               htab->non_lazy_plt->eh_frame_plt,
1205               htab->plt_got_eh_frame->size);
1206       bfd_put_32 (dynobj, htab->plt_got->size,
1207                   (htab->plt_got_eh_frame->contents
1208                    + PLT_FDE_LEN_OFFSET));
1209     }
1210
1211   if (htab->plt_second_eh_frame != NULL
1212       && htab->plt_second_eh_frame->contents != NULL)
1213     {
1214       memcpy (htab->plt_second_eh_frame->contents,
1215               htab->non_lazy_plt->eh_frame_plt,
1216               htab->plt_second_eh_frame->size);
1217       bfd_put_32 (dynobj, htab->plt_second->size,
1218                   (htab->plt_second_eh_frame->contents
1219                    + PLT_FDE_LEN_OFFSET));
1220     }
1221
1222   if (htab->elf.dynamic_sections_created)
1223     {
1224       /* Add some entries to the .dynamic section.  We fill in the
1225          values later, in elf_{i386,x86_64}_finish_dynamic_sections,
1226          but we must add the entries now so that we get the correct
1227          size for the .dynamic section.  The DT_DEBUG entry is filled
1228          in by the dynamic linker and used by the debugger.  */
1229 #define add_dynamic_entry(TAG, VAL) \
1230   _bfd_elf_add_dynamic_entry (info, TAG, VAL)
1231
1232       if (bfd_link_executable (info))
1233         {
1234           if (!add_dynamic_entry (DT_DEBUG, 0))
1235             return FALSE;
1236         }
1237
1238       if (htab->elf.splt->size != 0)
1239         {
1240           /* DT_PLTGOT is used by prelink even if there is no PLT
1241              relocation.  */
1242           if (!add_dynamic_entry (DT_PLTGOT, 0))
1243             return FALSE;
1244         }
1245
1246       if (htab->elf.srelplt->size != 0)
1247         {
1248           if (!add_dynamic_entry (DT_PLTRELSZ, 0)
1249               || !add_dynamic_entry (DT_PLTREL, htab->dt_reloc)
1250               || !add_dynamic_entry (DT_JMPREL, 0))
1251             return FALSE;
1252         }
1253
1254       if (htab->tlsdesc_plt
1255           && (!add_dynamic_entry (DT_TLSDESC_PLT, 0)
1256               || !add_dynamic_entry (DT_TLSDESC_GOT, 0)))
1257         return FALSE;
1258
1259       if (relocs)
1260         {
1261           if (!add_dynamic_entry (htab->dt_reloc, 0)
1262               || !add_dynamic_entry (htab->dt_reloc_sz, 0)
1263               || !add_dynamic_entry (htab->dt_reloc_ent,
1264                                      htab->sizeof_reloc))
1265             return FALSE;
1266
1267           /* If any dynamic relocs apply to a read-only section,
1268              then we need a DT_TEXTREL entry.  */
1269           if ((info->flags & DF_TEXTREL) == 0)
1270             elf_link_hash_traverse (&htab->elf,
1271                                     _bfd_x86_elf_readonly_dynrelocs,
1272                                     info);
1273
1274           if ((info->flags & DF_TEXTREL) != 0)
1275             {
1276               if (htab->readonly_dynrelocs_against_ifunc)
1277                 {
1278                   info->callbacks->einfo
1279                     (_("%P%X: read-only segment has dynamic IFUNC relocations; recompile with -fPIC\n"));
1280                   bfd_set_error (bfd_error_bad_value);
1281                   return FALSE;
1282                 }
1283
1284               if (!add_dynamic_entry (DT_TEXTREL, 0))
1285                 return FALSE;
1286             }
1287         }
1288       if (htab->is_vxworks
1289           && !elf_vxworks_add_dynamic_entries (output_bfd, info))
1290         return FALSE;
1291     }
1292 #undef add_dynamic_entry
1293
1294   return TRUE;
1295 }
1296
1297 /* Finish up the x86 dynamic sections.  */
1298
1299 struct elf_x86_link_hash_table *
1300 _bfd_x86_elf_finish_dynamic_sections (bfd *output_bfd,
1301                                       struct bfd_link_info *info)
1302 {
1303   struct elf_x86_link_hash_table *htab;
1304   const struct elf_backend_data *bed;
1305   bfd *dynobj;
1306   asection *sdyn;
1307   bfd_byte *dyncon, *dynconend;
1308   bfd_size_type sizeof_dyn;
1309
1310   bed = get_elf_backend_data (output_bfd);
1311   htab = elf_x86_hash_table (info, bed->target_id);
1312   if (htab == NULL)
1313     return htab;
1314
1315   dynobj = htab->elf.dynobj;
1316   sdyn = bfd_get_linker_section (dynobj, ".dynamic");
1317
1318   /* GOT is always created in setup_gnu_properties.  But it may not be
1319      needed.  .got.plt section may be needed for static IFUNC.  */
1320   if (htab->elf.sgotplt && htab->elf.sgotplt->size > 0)
1321     {
1322       bfd_vma dynamic_addr;
1323
1324       if (bfd_is_abs_section (htab->elf.sgotplt->output_section))
1325         {
1326           _bfd_error_handler
1327             (_("discarded output section: `%A'"), htab->elf.sgotplt);
1328           return NULL;
1329         }
1330
1331       elf_section_data (htab->elf.sgotplt->output_section)->this_hdr.sh_entsize
1332         = htab->got_entry_size;
1333
1334       dynamic_addr = (sdyn == NULL
1335                       ? (bfd_vma) 0
1336                       : sdyn->output_section->vma + sdyn->output_offset);
1337
1338       /* Set the first entry in the global offset table to the address
1339          of the dynamic section.  Write GOT[1] and GOT[2], needed for
1340          the dynamic linker.  */
1341       if (htab->got_entry_size == 8)
1342         {
1343           bfd_put_64 (output_bfd, dynamic_addr,
1344                       htab->elf.sgotplt->contents);
1345           bfd_put_64 (output_bfd, (bfd_vma) 0,
1346                       htab->elf.sgotplt->contents + 8);
1347           bfd_put_64 (output_bfd, (bfd_vma) 0,
1348                       htab->elf.sgotplt->contents + 8*2);
1349         }
1350       else
1351         {
1352           bfd_put_32 (output_bfd, dynamic_addr,
1353                       htab->elf.sgotplt->contents);
1354           bfd_put_32 (output_bfd, 0,
1355                       htab->elf.sgotplt->contents + 4);
1356           bfd_put_32 (output_bfd, 0,
1357                       htab->elf.sgotplt->contents + 4*2);
1358         }
1359     }
1360
1361   if (!htab->elf.dynamic_sections_created)
1362     return htab;
1363
1364   if (sdyn == NULL || htab->elf.sgot == NULL)
1365     abort ();
1366
1367   sizeof_dyn = bed->s->sizeof_dyn;
1368   dyncon = sdyn->contents;
1369   dynconend = sdyn->contents + sdyn->size;
1370   for (; dyncon < dynconend; dyncon += sizeof_dyn)
1371     {
1372       Elf_Internal_Dyn dyn;
1373       asection *s;
1374
1375       (*bed->s->swap_dyn_in) (dynobj, dyncon, &dyn);
1376
1377       switch (dyn.d_tag)
1378         {
1379         default:
1380           if (htab->is_vxworks
1381               && elf_vxworks_finish_dynamic_entry (output_bfd, &dyn))
1382             break;
1383           continue;
1384
1385         case DT_PLTGOT:
1386           s = htab->elf.sgotplt;
1387           dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
1388           break;
1389
1390         case DT_JMPREL:
1391           dyn.d_un.d_ptr = htab->elf.srelplt->output_section->vma;
1392           break;
1393
1394         case DT_PLTRELSZ:
1395           s = htab->elf.srelplt->output_section;
1396           dyn.d_un.d_val = s->size;
1397           break;
1398
1399         case DT_TLSDESC_PLT:
1400           s = htab->elf.splt;
1401           dyn.d_un.d_ptr = s->output_section->vma + s->output_offset
1402             + htab->tlsdesc_plt;
1403           break;
1404
1405         case DT_TLSDESC_GOT:
1406           s = htab->elf.sgot;
1407           dyn.d_un.d_ptr = s->output_section->vma + s->output_offset
1408             + htab->tlsdesc_got;
1409           break;
1410         }
1411
1412       (*bed->s->swap_dyn_out) (output_bfd, &dyn, dyncon);
1413     }
1414
1415   if (htab->plt_got != NULL && htab->plt_got->size > 0)
1416     elf_section_data (htab->plt_got->output_section)
1417       ->this_hdr.sh_entsize = htab->non_lazy_plt->plt_entry_size;
1418
1419   if (htab->plt_second != NULL && htab->plt_second->size > 0)
1420     elf_section_data (htab->plt_second->output_section)
1421       ->this_hdr.sh_entsize = htab->non_lazy_plt->plt_entry_size;
1422
1423   /* Adjust .eh_frame for .plt section.  */
1424   if (htab->plt_eh_frame != NULL
1425       && htab->plt_eh_frame->contents != NULL)
1426     {
1427       if (htab->elf.splt != NULL
1428           && htab->elf.splt->size != 0
1429           && (htab->elf.splt->flags & SEC_EXCLUDE) == 0
1430           && htab->elf.splt->output_section != NULL
1431           && htab->plt_eh_frame->output_section != NULL)
1432         {
1433           bfd_vma plt_start = htab->elf.splt->output_section->vma;
1434           bfd_vma eh_frame_start = htab->plt_eh_frame->output_section->vma
1435                                    + htab->plt_eh_frame->output_offset
1436                                    + PLT_FDE_START_OFFSET;
1437           bfd_put_signed_32 (dynobj, plt_start - eh_frame_start,
1438                              htab->plt_eh_frame->contents
1439                              + PLT_FDE_START_OFFSET);
1440         }
1441
1442       if (htab->plt_eh_frame->sec_info_type == SEC_INFO_TYPE_EH_FRAME)
1443         {
1444           if (! _bfd_elf_write_section_eh_frame (output_bfd, info,
1445                                                  htab->plt_eh_frame,
1446                                                  htab->plt_eh_frame->contents))
1447             return NULL;
1448         }
1449     }
1450
1451   /* Adjust .eh_frame for .plt.got section.  */
1452   if (htab->plt_got_eh_frame != NULL
1453       && htab->plt_got_eh_frame->contents != NULL)
1454     {
1455       if (htab->plt_got != NULL
1456           && htab->plt_got->size != 0
1457           && (htab->plt_got->flags & SEC_EXCLUDE) == 0
1458           && htab->plt_got->output_section != NULL
1459           && htab->plt_got_eh_frame->output_section != NULL)
1460         {
1461           bfd_vma plt_start = htab->plt_got->output_section->vma;
1462           bfd_vma eh_frame_start = htab->plt_got_eh_frame->output_section->vma
1463                                    + htab->plt_got_eh_frame->output_offset
1464                                    + PLT_FDE_START_OFFSET;
1465           bfd_put_signed_32 (dynobj, plt_start - eh_frame_start,
1466                              htab->plt_got_eh_frame->contents
1467                              + PLT_FDE_START_OFFSET);
1468         }
1469       if (htab->plt_got_eh_frame->sec_info_type == SEC_INFO_TYPE_EH_FRAME)
1470         {
1471           if (! _bfd_elf_write_section_eh_frame (output_bfd, info,
1472                                                  htab->plt_got_eh_frame,
1473                                                  htab->plt_got_eh_frame->contents))
1474             return NULL;
1475         }
1476     }
1477
1478   /* Adjust .eh_frame for the second PLT section.  */
1479   if (htab->plt_second_eh_frame != NULL
1480       && htab->plt_second_eh_frame->contents != NULL)
1481     {
1482       if (htab->plt_second != NULL
1483           && htab->plt_second->size != 0
1484           && (htab->plt_second->flags & SEC_EXCLUDE) == 0
1485           && htab->plt_second->output_section != NULL
1486           && htab->plt_second_eh_frame->output_section != NULL)
1487         {
1488           bfd_vma plt_start = htab->plt_second->output_section->vma;
1489           bfd_vma eh_frame_start
1490             = (htab->plt_second_eh_frame->output_section->vma
1491                + htab->plt_second_eh_frame->output_offset
1492                + PLT_FDE_START_OFFSET);
1493           bfd_put_signed_32 (dynobj, plt_start - eh_frame_start,
1494                              htab->plt_second_eh_frame->contents
1495                              + PLT_FDE_START_OFFSET);
1496         }
1497       if (htab->plt_second_eh_frame->sec_info_type
1498           == SEC_INFO_TYPE_EH_FRAME)
1499         {
1500           if (! _bfd_elf_write_section_eh_frame (output_bfd, info,
1501                                                  htab->plt_second_eh_frame,
1502                                                  htab->plt_second_eh_frame->contents))
1503             return NULL;
1504         }
1505     }
1506
1507   if (htab->elf.sgot && htab->elf.sgot->size > 0)
1508     elf_section_data (htab->elf.sgot->output_section)->this_hdr.sh_entsize
1509       = htab->got_entry_size;
1510
1511   return htab;
1512 }
1513
1514
1515 bfd_boolean
1516 _bfd_x86_elf_always_size_sections (bfd *output_bfd,
1517                                    struct bfd_link_info *info)
1518 {
1519   asection *tls_sec = elf_hash_table (info)->tls_sec;
1520
1521   if (tls_sec)
1522     {
1523       struct elf_link_hash_entry *tlsbase;
1524
1525       tlsbase = elf_link_hash_lookup (elf_hash_table (info),
1526                                       "_TLS_MODULE_BASE_",
1527                                       FALSE, FALSE, FALSE);
1528
1529       if (tlsbase && tlsbase->type == STT_TLS)
1530         {
1531           struct elf_x86_link_hash_table *htab;
1532           struct bfd_link_hash_entry *bh = NULL;
1533           const struct elf_backend_data *bed
1534             = get_elf_backend_data (output_bfd);
1535
1536           htab = elf_x86_hash_table (info, bed->target_id);
1537           if (htab == NULL)
1538             return FALSE;
1539
1540           if (!(_bfd_generic_link_add_one_symbol
1541                 (info, output_bfd, "_TLS_MODULE_BASE_", BSF_LOCAL,
1542                  tls_sec, 0, NULL, FALSE,
1543                  bed->collect, &bh)))
1544             return FALSE;
1545
1546           htab->tls_module_base = bh;
1547
1548           tlsbase = (struct elf_link_hash_entry *)bh;
1549           tlsbase->def_regular = 1;
1550           tlsbase->other = STV_HIDDEN;
1551           tlsbase->root.linker_def = 1;
1552           (*bed->elf_backend_hide_symbol) (info, tlsbase, TRUE);
1553         }
1554     }
1555
1556   return TRUE;
1557 }
1558
1559 void
1560 _bfd_x86_elf_merge_symbol_attribute (struct elf_link_hash_entry *h,
1561                                      const Elf_Internal_Sym *isym,
1562                                      bfd_boolean definition,
1563                                      bfd_boolean dynamic ATTRIBUTE_UNUSED)
1564 {
1565   if (definition)
1566     {
1567       struct elf_x86_link_hash_entry *eh
1568         = (struct elf_x86_link_hash_entry *) h;
1569       eh->def_protected = (ELF_ST_VISIBILITY (isym->st_other)
1570                            == STV_PROTECTED);
1571     }
1572 }
1573
1574 /* Copy the extra info we tack onto an elf_link_hash_entry.  */
1575
1576 void
1577 _bfd_x86_elf_copy_indirect_symbol (struct bfd_link_info *info,
1578                                    struct elf_link_hash_entry *dir,
1579                                    struct elf_link_hash_entry *ind)
1580 {
1581   struct elf_x86_link_hash_entry *edir, *eind;
1582
1583   edir = (struct elf_x86_link_hash_entry *) dir;
1584   eind = (struct elf_x86_link_hash_entry *) ind;
1585
1586   if (eind->dyn_relocs != NULL)
1587     {
1588       if (edir->dyn_relocs != NULL)
1589         {
1590           struct elf_dyn_relocs **pp;
1591           struct elf_dyn_relocs *p;
1592
1593           /* Add reloc counts against the indirect sym to the direct sym
1594              list.  Merge any entries against the same section.  */
1595           for (pp = &eind->dyn_relocs; (p = *pp) != NULL; )
1596             {
1597               struct elf_dyn_relocs *q;
1598
1599               for (q = edir->dyn_relocs; q != NULL; q = q->next)
1600                 if (q->sec == p->sec)
1601                   {
1602                     q->pc_count += p->pc_count;
1603                     q->count += p->count;
1604                     *pp = p->next;
1605                     break;
1606                   }
1607               if (q == NULL)
1608                 pp = &p->next;
1609             }
1610           *pp = edir->dyn_relocs;
1611         }
1612
1613       edir->dyn_relocs = eind->dyn_relocs;
1614       eind->dyn_relocs = NULL;
1615     }
1616
1617   if (ind->root.type == bfd_link_hash_indirect
1618       && dir->got.refcount <= 0)
1619     {
1620       edir->tls_type = eind->tls_type;
1621       eind->tls_type = GOT_UNKNOWN;
1622     }
1623
1624   /* Copy gotoff_ref so that elf_i386_adjust_dynamic_symbol will
1625      generate a R_386_COPY reloc.  */
1626   edir->gotoff_ref |= eind->gotoff_ref;
1627
1628   edir->zero_undefweak |= eind->zero_undefweak;
1629
1630   if (ELIMINATE_COPY_RELOCS
1631       && ind->root.type != bfd_link_hash_indirect
1632       && dir->dynamic_adjusted)
1633     {
1634       /* If called to transfer flags for a weakdef during processing
1635          of elf_adjust_dynamic_symbol, don't copy non_got_ref.
1636          We clear it ourselves for ELIMINATE_COPY_RELOCS.  */
1637       if (dir->versioned != versioned_hidden)
1638         dir->ref_dynamic |= ind->ref_dynamic;
1639       dir->ref_regular |= ind->ref_regular;
1640       dir->ref_regular_nonweak |= ind->ref_regular_nonweak;
1641       dir->needs_plt |= ind->needs_plt;
1642       dir->pointer_equality_needed |= ind->pointer_equality_needed;
1643     }
1644   else
1645     {
1646       if (eind->func_pointer_refcount > 0)
1647         {
1648           edir->func_pointer_refcount += eind->func_pointer_refcount;
1649           eind->func_pointer_refcount = 0;
1650         }
1651
1652       _bfd_elf_link_hash_copy_indirect (info, dir, ind);
1653     }
1654 }
1655
1656 /* Remove undefined weak symbol from the dynamic symbol table if it
1657    is resolved to 0.   */
1658
1659 bfd_boolean
1660 _bfd_x86_elf_fixup_symbol (struct bfd_link_info *info,
1661                            struct elf_link_hash_entry *h)
1662 {
1663   if (h->dynindx != -1
1664       && UNDEFINED_WEAK_RESOLVED_TO_ZERO (info, elf_x86_hash_entry (h)))
1665     {
1666       h->dynindx = -1;
1667       _bfd_elf_strtab_delref (elf_hash_table (info)->dynstr,
1668                               h->dynstr_index);
1669     }
1670   return TRUE;
1671 }
1672
1673 /* Return TRUE if symbol should be hashed in the `.gnu.hash' section.  */
1674
1675 bfd_boolean
1676 _bfd_x86_elf_hash_symbol (struct elf_link_hash_entry *h)
1677 {
1678   if (h->plt.offset != (bfd_vma) -1
1679       && !h->def_regular
1680       && !h->pointer_equality_needed)
1681     return FALSE;
1682
1683   return _bfd_elf_hash_symbol (h);
1684 }
1685
1686 /* Adjust a symbol defined by a dynamic object and referenced by a
1687    regular object.  The current definition is in some section of the
1688    dynamic object, but we're not including those sections.  We have to
1689    change the definition to something the rest of the link can
1690    understand.  */
1691
1692 bfd_boolean
1693 _bfd_x86_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
1694                                     struct elf_link_hash_entry *h)
1695 {
1696   struct elf_x86_link_hash_table *htab;
1697   asection *s, *srel;
1698   struct elf_x86_link_hash_entry *eh;
1699   struct elf_dyn_relocs *p;
1700   const struct elf_backend_data *bed
1701     = get_elf_backend_data (info->output_bfd);
1702
1703   /* STT_GNU_IFUNC symbol must go through PLT. */
1704   if (h->type == STT_GNU_IFUNC)
1705     {
1706       /* All local STT_GNU_IFUNC references must be treate as local
1707          calls via local PLT.  */
1708       if (h->ref_regular
1709           && SYMBOL_CALLS_LOCAL (info, h))
1710         {
1711           bfd_size_type pc_count = 0, count = 0;
1712           struct elf_dyn_relocs **pp;
1713
1714           eh = (struct elf_x86_link_hash_entry *) h;
1715           for (pp = &eh->dyn_relocs; (p = *pp) != NULL; )
1716             {
1717               pc_count += p->pc_count;
1718               p->count -= p->pc_count;
1719               p->pc_count = 0;
1720               count += p->count;
1721               if (p->count == 0)
1722                 *pp = p->next;
1723               else
1724                 pp = &p->next;
1725             }
1726
1727           if (pc_count || count)
1728             {
1729               h->non_got_ref = 1;
1730               if (pc_count)
1731                 {
1732                   /* Increment PLT reference count only for PC-relative
1733                      references.  */
1734                   h->needs_plt = 1;
1735                   if (h->plt.refcount <= 0)
1736                     h->plt.refcount = 1;
1737                   else
1738                     h->plt.refcount += 1;
1739                 }
1740             }
1741         }
1742
1743       if (h->plt.refcount <= 0)
1744         {
1745           h->plt.offset = (bfd_vma) -1;
1746           h->needs_plt = 0;
1747         }
1748       return TRUE;
1749     }
1750
1751   /* If this is a function, put it in the procedure linkage table.  We
1752      will fill in the contents of the procedure linkage table later,
1753      when we know the address of the .got section.  */
1754   if (h->type == STT_FUNC
1755       || h->needs_plt)
1756     {
1757       if (h->plt.refcount <= 0
1758           || SYMBOL_CALLS_LOCAL (info, h)
1759           || (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
1760               && h->root.type == bfd_link_hash_undefweak))
1761         {
1762           /* This case can occur if we saw a PLT32 reloc in an input
1763              file, but the symbol was never referred to by a dynamic
1764              object, or if all references were garbage collected.  In
1765              such a case, we don't actually need to build a procedure
1766              linkage table, and we can just do a PC32 reloc instead.  */
1767           h->plt.offset = (bfd_vma) -1;
1768           h->needs_plt = 0;
1769         }
1770
1771       return TRUE;
1772     }
1773   else
1774     /* It's possible that we incorrectly decided a .plt reloc was needed
1775      * for an R_386_PC32/R_X86_64_PC32 reloc to a non-function sym in
1776        check_relocs.  We can't decide accurately between function and
1777        non-function syms in check-relocs;  Objects loaded later in
1778        the link may change h->type.  So fix it now.  */
1779     h->plt.offset = (bfd_vma) -1;
1780
1781   eh = (struct elf_x86_link_hash_entry *) h;
1782
1783   /* If this is a weak symbol, and there is a real definition, the
1784      processor independent code will have arranged for us to see the
1785      real definition first, and we can just use the same value.  */
1786   if (h->u.weakdef != NULL)
1787     {
1788       BFD_ASSERT (h->u.weakdef->root.type == bfd_link_hash_defined
1789                   || h->u.weakdef->root.type == bfd_link_hash_defweak);
1790       h->root.u.def.section = h->u.weakdef->root.u.def.section;
1791       h->root.u.def.value = h->u.weakdef->root.u.def.value;
1792       if (ELIMINATE_COPY_RELOCS
1793           || info->nocopyreloc
1794           || SYMBOL_NO_COPYRELOC (info, eh))
1795         {
1796           /* NB: needs_copy is always 0 for i386.  */
1797           h->non_got_ref = h->u.weakdef->non_got_ref;
1798           eh->needs_copy = h->u.weakdef->needs_copy;
1799         }
1800       return TRUE;
1801     }
1802
1803   /* This is a reference to a symbol defined by a dynamic object which
1804      is not a function.  */
1805
1806   /* If we are creating a shared library, we must presume that the
1807      only references to the symbol are via the global offset table.
1808      For such cases we need not do anything here; the relocations will
1809      be handled correctly by relocate_section.  */
1810   if (!bfd_link_executable (info))
1811     return TRUE;
1812
1813   /* If there are no references to this symbol that do not use the
1814      GOT nor R_386_GOTOFF relocation, we don't need to generate a copy
1815      reloc.  NB: gotoff_ref is always 0 for x86-64.  */
1816   if (!h->non_got_ref && !eh->gotoff_ref)
1817     return TRUE;
1818
1819   /* If -z nocopyreloc was given, we won't generate them either.  */
1820   if (info->nocopyreloc || SYMBOL_NO_COPYRELOC (info, eh))
1821     {
1822       h->non_got_ref = 0;
1823       return TRUE;
1824     }
1825
1826   htab = elf_x86_hash_table (info, bed->target_id);
1827   if (htab == NULL)
1828     return FALSE;
1829
1830   /* If there aren't any dynamic relocs in read-only sections nor
1831      R_386_GOTOFF relocation, then we can keep the dynamic relocs and
1832      avoid the copy reloc.  This doesn't work on VxWorks, where we can
1833      not have dynamic relocations (other than copy and jump slot
1834      relocations) in an executable.  */
1835   if (ELIMINATE_COPY_RELOCS
1836       && (bed->target_id == X86_64_ELF_DATA
1837           || (!eh->gotoff_ref
1838               && !htab->is_vxworks)))
1839     {
1840       for (p = eh->dyn_relocs; p != NULL; p = p->next)
1841         {
1842           s = p->sec->output_section;
1843           if (s != NULL && (s->flags & SEC_READONLY) != 0)
1844             break;
1845         }
1846
1847       /* If we didn't find any dynamic relocs in read-only sections,
1848          then we'll be keeping the dynamic relocs and avoiding the copy
1849          reloc.  */
1850       if (p == NULL)
1851         {
1852           h->non_got_ref = 0;
1853           return TRUE;
1854         }
1855     }
1856
1857   /* We must allocate the symbol in our .dynbss section, which will
1858      become part of the .bss section of the executable.  There will be
1859      an entry for this symbol in the .dynsym section.  The dynamic
1860      object will contain position independent code, so all references
1861      from the dynamic object to this symbol will go through the global
1862      offset table.  The dynamic linker will use the .dynsym entry to
1863      determine the address it must put in the global offset table, so
1864      both the dynamic object and the regular object will refer to the
1865      same memory location for the variable.  */
1866
1867   /* We must generate a R_386_COPY/R_X86_64_COPY reloc to tell the
1868      dynamic linker to copy the initial value out of the dynamic object
1869      and into the runtime process image.  */
1870   if ((h->root.u.def.section->flags & SEC_READONLY) != 0)
1871     {
1872       s = htab->elf.sdynrelro;
1873       srel = htab->elf.sreldynrelro;
1874     }
1875   else
1876     {
1877       s = htab->elf.sdynbss;
1878       srel = htab->elf.srelbss;
1879     }
1880   if ((h->root.u.def.section->flags & SEC_ALLOC) != 0 && h->size != 0)
1881     {
1882       srel->size += htab->sizeof_reloc;
1883       h->needs_copy = 1;
1884     }
1885
1886   return _bfd_elf_adjust_dynamic_copy (info, h, s);
1887 }
1888
1889 void
1890 _bfd_x86_elf_hide_symbol (struct bfd_link_info *info,
1891                           struct elf_link_hash_entry *h,
1892                           bfd_boolean force_local)
1893 {
1894   if (h->root.type == bfd_link_hash_undefweak
1895       && info->nointerp
1896       && bfd_link_pie (info))
1897     {
1898       /* When there is no dynamic interpreter in PIE, make the undefined
1899          weak symbol dynamic so that PC relative branch to the undefined
1900          weak symbol will land to address 0.  */
1901       struct elf_x86_link_hash_entry *eh = elf_x86_hash_entry (h);
1902       if (h->plt.refcount > eh->func_pointer_refcount
1903           || eh->plt_got.refcount > 0)
1904         return;
1905     }
1906
1907   _bfd_elf_link_hash_hide_symbol (info, h, force_local);
1908 }
1909
1910 /* Return TRUE if a symbol is referenced locally.  It is similar to
1911    SYMBOL_REFERENCES_LOCAL, but it also checks version script.  It
1912    works in check_relocs.  */
1913
1914 bfd_boolean
1915 _bfd_x86_elf_link_symbol_references_local (struct bfd_link_info *info,
1916                                            struct elf_link_hash_entry *h)
1917 {
1918   struct elf_x86_link_hash_entry *eh = elf_x86_hash_entry (h);
1919   struct elf_x86_link_hash_table *htab
1920     = (struct elf_x86_link_hash_table *) info->hash;
1921
1922   if (eh->local_ref > 1)
1923     return TRUE;
1924
1925   if (eh->local_ref == 1)
1926     return FALSE;
1927
1928   /* Unversioned symbols defined in regular objects can be forced local
1929      by linker version script.  A weak undefined symbol is forced local
1930      if
1931      1. It has non-default visibility.  Or
1932      2. When building executable, there is no dynamic linker.  Or
1933      3. or "-z nodynamic-undefined-weak" is used.
1934    */
1935   if (SYMBOL_REFERENCES_LOCAL (info, h)
1936       || (h->root.type == bfd_link_hash_undefweak
1937           && (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
1938               || (bfd_link_executable (info)
1939                   && htab->interp == NULL)
1940               || info->dynamic_undefined_weak == 0))
1941       || ((h->def_regular || ELF_COMMON_DEF_P (h))
1942           && h->versioned == unversioned
1943           && info->version_info != NULL
1944           && bfd_hide_sym_by_version (info->version_info,
1945                                       h->root.root.string)))
1946     {
1947       eh->local_ref = 2;
1948       return TRUE;
1949     }
1950
1951   eh->local_ref = 1;
1952   return FALSE;
1953 }
1954
1955 /* Return the section that should be marked against GC for a given
1956    relocation.  */
1957
1958 asection *
1959 _bfd_x86_elf_gc_mark_hook (asection *sec,
1960                            struct bfd_link_info *info,
1961                            Elf_Internal_Rela *rel,
1962                            struct elf_link_hash_entry *h,
1963                            Elf_Internal_Sym *sym)
1964 {
1965   /* Compiler should optimize this out.  */
1966   if (((unsigned int) R_X86_64_GNU_VTINHERIT
1967        != (unsigned int) R_386_GNU_VTINHERIT)
1968       || ((unsigned int) R_X86_64_GNU_VTENTRY
1969           != (unsigned int) R_386_GNU_VTENTRY))
1970     abort ();
1971
1972   if (h != NULL)
1973     switch (ELF32_R_TYPE (rel->r_info))
1974       {
1975       case R_X86_64_GNU_VTINHERIT:
1976       case R_X86_64_GNU_VTENTRY:
1977         return NULL;
1978       }
1979
1980   return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym);
1981 }
1982
1983 static bfd_vma
1984 elf_i386_get_plt_got_vma (struct elf_x86_plt *plt_p ATTRIBUTE_UNUSED,
1985                           bfd_vma off,
1986                           bfd_vma offset ATTRIBUTE_UNUSED,
1987                           bfd_vma got_addr)
1988 {
1989   return got_addr + off;
1990 }
1991
1992 static bfd_vma
1993 elf_x86_64_get_plt_got_vma (struct elf_x86_plt *plt_p,
1994                             bfd_vma off,
1995                             bfd_vma offset,
1996                             bfd_vma got_addr ATTRIBUTE_UNUSED)
1997 {
1998   return plt_p->sec->vma + offset + off + plt_p->plt_got_insn_size;
1999 }
2000
2001 static bfd_boolean
2002 elf_i386_valid_plt_reloc_p (unsigned int type)
2003 {
2004   return (type == R_386_JUMP_SLOT
2005           || type == R_386_GLOB_DAT
2006           || type == R_386_IRELATIVE);
2007 }
2008
2009 static bfd_boolean
2010 elf_x86_64_valid_plt_reloc_p (unsigned int type)
2011 {
2012   return (type == R_X86_64_JUMP_SLOT
2013           || type == R_X86_64_GLOB_DAT
2014           || type == R_X86_64_IRELATIVE);
2015 }
2016
2017 long
2018 _bfd_x86_elf_get_synthetic_symtab (bfd *abfd,
2019                                    long count,
2020                                    long relsize,
2021                                    bfd_vma got_addr,
2022                                    struct elf_x86_plt plts[],
2023                                    asymbol **dynsyms,
2024                                    asymbol **ret)
2025 {
2026   long size, i, n, len;
2027   int j;
2028   unsigned int plt_got_offset, plt_entry_size;
2029   asymbol *s;
2030   bfd_byte *plt_contents;
2031   long dynrelcount;
2032   arelent **dynrelbuf, *p;
2033   char *names;
2034   const struct elf_backend_data *bed;
2035   bfd_vma (*get_plt_got_vma) (struct elf_x86_plt *, bfd_vma, bfd_vma,
2036                               bfd_vma);
2037   bfd_boolean (*valid_plt_reloc_p) (unsigned int);
2038
2039   if (count == 0)
2040     return -1;
2041
2042   dynrelbuf = (arelent **) bfd_malloc (relsize);
2043   if (dynrelbuf == NULL)
2044     return -1;
2045
2046   dynrelcount = bfd_canonicalize_dynamic_reloc (abfd, dynrelbuf,
2047                                                 dynsyms);
2048   if (dynrelcount <= 0)
2049     return -1;
2050
2051   /* Sort the relocs by address.  */
2052   qsort (dynrelbuf, dynrelcount, sizeof (arelent *),
2053          _bfd_x86_elf_compare_relocs);
2054
2055   size = count * sizeof (asymbol);
2056
2057   /* Allocate space for @plt suffixes.  */
2058   n = 0;
2059   for (i = 0; i < dynrelcount; i++)
2060     {
2061       p = dynrelbuf[i];
2062       size += strlen ((*p->sym_ptr_ptr)->name) + sizeof ("@plt");
2063       if (p->addend != 0)
2064         size += sizeof ("+0x") - 1 + 8 + 8 * ABI_64_P (abfd);
2065     }
2066
2067   s = *ret = (asymbol *) bfd_zmalloc (size);
2068   if (s == NULL)
2069     goto bad_return;
2070
2071   bed = get_elf_backend_data (abfd);
2072
2073   if (bed->target_id == X86_64_ELF_DATA)
2074     {
2075       get_plt_got_vma = elf_x86_64_get_plt_got_vma;
2076       valid_plt_reloc_p = elf_x86_64_valid_plt_reloc_p;
2077     }
2078   else
2079     {
2080       get_plt_got_vma = elf_i386_get_plt_got_vma;
2081       valid_plt_reloc_p = elf_i386_valid_plt_reloc_p;
2082       if (got_addr)
2083         {
2084           /* Check .got.plt and then .got to get the _GLOBAL_OFFSET_TABLE_
2085              address.  */
2086           asection *sec = bfd_get_section_by_name (abfd, ".got.plt");
2087           if (sec != NULL)
2088             got_addr = sec->vma;
2089           else
2090             {
2091               sec = bfd_get_section_by_name (abfd, ".got");
2092               if (sec != NULL)
2093                 got_addr = sec->vma;
2094             }
2095
2096           if (got_addr == (bfd_vma) -1)
2097             goto bad_return;
2098         }
2099     }
2100
2101   /* Check for each PLT section.  */
2102   names = (char *) (s + count);
2103   size = 0;
2104   n = 0;
2105   for (j = 0; plts[j].name != NULL; j++)
2106     if ((plt_contents = plts[j].contents) != NULL)
2107       {
2108         long k;
2109         bfd_vma offset;
2110         asection *plt;
2111         struct elf_x86_plt *plt_p = &plts[j];
2112
2113         plt_got_offset = plt_p->plt_got_offset;
2114         plt_entry_size = plt_p->plt_entry_size;
2115
2116         plt = plt_p->sec;
2117
2118         if ((plt_p->type & plt_lazy))
2119           {
2120             /* Skip PLT0 in lazy PLT.  */
2121             k = 1;
2122             offset = plt_entry_size;
2123           }
2124         else
2125           {
2126             k = 0;
2127             offset = 0;
2128           }
2129
2130         /* Check each PLT entry against dynamic relocations.  */
2131         for (; k < plt_p->count; k++)
2132           {
2133             int off;
2134             bfd_vma got_vma;
2135             long min, max, mid;
2136
2137             /* Get the GOT offset for i386 or the PC-relative offset
2138                for x86-64, a signed 32-bit integer.  */
2139             off = H_GET_32 (abfd, (plt_contents + offset
2140                                    + plt_got_offset));
2141             got_vma = get_plt_got_vma (plt_p, off, offset, got_addr);
2142
2143             /* Binary search.  */
2144             p = dynrelbuf[0];
2145             min = 0;
2146             max = dynrelcount;
2147             while ((min + 1) < max)
2148               {
2149                 arelent *r;
2150
2151                 mid = (min + max) / 2;
2152                 r = dynrelbuf[mid];
2153                 if (got_vma > r->address)
2154                   min = mid;
2155                 else if (got_vma < r->address)
2156                   max = mid;
2157                 else
2158                   {
2159                     p = r;
2160                     break;
2161                   }
2162               }
2163
2164             /* Skip unknown relocation.  PR 17512: file: bc9d6cf5.  */
2165             if (got_vma == p->address
2166                 && p->howto != NULL
2167                 && valid_plt_reloc_p (p->howto->type))
2168               {
2169                 *s = **p->sym_ptr_ptr;
2170                 /* Undefined syms won't have BSF_LOCAL or BSF_GLOBAL
2171                    set.  Since we are defining a symbol, ensure one
2172                    of them is set.  */
2173                 if ((s->flags & BSF_LOCAL) == 0)
2174                   s->flags |= BSF_GLOBAL;
2175                 s->flags |= BSF_SYNTHETIC;
2176                 /* This is no longer a section symbol.  */
2177                 s->flags &= ~BSF_SECTION_SYM;
2178                 s->section = plt;
2179                 s->the_bfd = plt->owner;
2180                 s->value = offset;
2181                 s->udata.p = NULL;
2182                 s->name = names;
2183                 len = strlen ((*p->sym_ptr_ptr)->name);
2184                 memcpy (names, (*p->sym_ptr_ptr)->name, len);
2185                 names += len;
2186                 if (p->addend != 0)
2187                   {
2188                     char buf[30], *a;
2189
2190                     memcpy (names, "+0x", sizeof ("+0x") - 1);
2191                     names += sizeof ("+0x") - 1;
2192                     bfd_sprintf_vma (abfd, buf, p->addend);
2193                     for (a = buf; *a == '0'; ++a)
2194                       ;
2195                     size = strlen (a);
2196                     memcpy (names, a, size);
2197                     names += size;
2198                   }
2199                 memcpy (names, "@plt", sizeof ("@plt"));
2200                 names += sizeof ("@plt");
2201                 n++;
2202                 s++;
2203                 /* There should be only one entry in PLT for a given
2204                    symbol.  Set howto to NULL after processing a PLT
2205                    entry to guard against corrupted PLT.  */
2206                 p->howto = NULL;
2207               }
2208             offset += plt_entry_size;
2209           }
2210       }
2211
2212   /* PLT entries with R_386_TLS_DESC relocations are skipped.  */
2213   if (n == 0)
2214     {
2215 bad_return:
2216       count = -1;
2217     }
2218   else
2219     count = n;
2220
2221   for (j = 0; plts[j].name != NULL; j++)
2222     if (plts[j].contents != NULL)
2223       free (plts[j].contents);
2224
2225   free (dynrelbuf);
2226
2227   return count;
2228 }
2229
2230 /* Parse x86 GNU properties.  */
2231
2232 enum elf_property_kind
2233 _bfd_x86_elf_parse_gnu_properties (bfd *abfd, unsigned int type,
2234                                    bfd_byte *ptr, unsigned int datasz)
2235 {
2236   elf_property *prop;
2237
2238   switch (type)
2239     {
2240     case GNU_PROPERTY_X86_ISA_1_USED:
2241     case GNU_PROPERTY_X86_ISA_1_NEEDED:
2242     case GNU_PROPERTY_X86_FEATURE_1_AND:
2243       if (datasz != 4)
2244         {
2245           _bfd_error_handler
2246             ((type == GNU_PROPERTY_X86_ISA_1_USED
2247               ? _("error: %B: <corrupt x86 ISA used size: 0x%x>")
2248               : (type == GNU_PROPERTY_X86_ISA_1_NEEDED
2249                  ? _("error: %B: <corrupt x86 ISA needed size: 0x%x>")
2250                  : _("error: %B: <corrupt x86 feature size: 0x%x>"))),
2251              abfd, datasz);
2252           return property_corrupt;
2253         }
2254       prop = _bfd_elf_get_property (abfd, type, datasz);
2255       /* Combine properties of the same type.  */
2256       prop->u.number |= bfd_h_get_32 (abfd, ptr);
2257       prop->pr_kind = property_number;
2258       break;
2259
2260     default:
2261       return property_ignored;
2262     }
2263
2264   return property_number;
2265 }
2266
2267 /* Merge x86 GNU property BPROP with APROP.  If APROP isn't NULL,
2268    return TRUE if APROP is updated.  Otherwise, return TRUE if BPROP
2269    should be merged with ABFD.  */
2270
2271 bfd_boolean
2272 _bfd_x86_elf_merge_gnu_properties (struct bfd_link_info *info,
2273                                    bfd *abfd ATTRIBUTE_UNUSED,
2274                                    elf_property *aprop,
2275                                    elf_property *bprop)
2276 {
2277   unsigned int number, features;
2278   bfd_boolean updated = FALSE;
2279   unsigned int pr_type = aprop != NULL ? aprop->pr_type : bprop->pr_type;
2280
2281   switch (pr_type)
2282     {
2283     case GNU_PROPERTY_X86_ISA_1_USED:
2284     case GNU_PROPERTY_X86_ISA_1_NEEDED:
2285       if (aprop != NULL && bprop != NULL)
2286         {
2287           number = aprop->u.number;
2288           aprop->u.number = number | bprop->u.number;
2289           updated = number != (unsigned int) aprop->u.number;
2290         }
2291       else
2292         {
2293           /* Return TRUE if APROP is NULL to indicate that BPROP should
2294              be added to ABFD.  */
2295           updated = aprop == NULL;
2296         }
2297       break;
2298
2299     case GNU_PROPERTY_X86_FEATURE_1_AND:
2300       /* Only one of APROP and BPROP can be NULL:
2301          1. APROP & BPROP when both APROP and BPROP aren't NULL.
2302          2. If APROP is NULL, remove x86 feature.
2303          3. Otherwise, do nothing.
2304        */
2305       if (aprop != NULL && bprop != NULL)
2306         {
2307           features = 0;
2308           if (info->ibt)
2309             features = GNU_PROPERTY_X86_FEATURE_1_IBT;
2310           if (info->shstk)
2311             features |= GNU_PROPERTY_X86_FEATURE_1_SHSTK;
2312           number = aprop->u.number;
2313           /* Add GNU_PROPERTY_X86_FEATURE_1_IBT and
2314              GNU_PROPERTY_X86_FEATURE_1_SHSTK.  */
2315           aprop->u.number = (number & bprop->u.number) | features;
2316           updated = number != (unsigned int) aprop->u.number;
2317           /* Remove the property if all feature bits are cleared.  */
2318           if (aprop->u.number == 0)
2319             aprop->pr_kind = property_remove;
2320         }
2321       else
2322         {
2323           features = 0;
2324           if (info->ibt)
2325             features = GNU_PROPERTY_X86_FEATURE_1_IBT;
2326           if (info->shstk)
2327             features |= GNU_PROPERTY_X86_FEATURE_1_SHSTK;
2328           if (features)
2329             {
2330               /* Add GNU_PROPERTY_X86_FEATURE_1_IBT and
2331                  GNU_PROPERTY_X86_FEATURE_1_SHSTK.  */
2332               if (aprop != NULL)
2333                 {
2334                   number = aprop->u.number;
2335                   aprop->u.number = number | features;
2336                   updated = number != (unsigned int) aprop->u.number;
2337                 }
2338               else
2339                 {
2340                   bprop->u.number |= features;
2341                   updated = TRUE;
2342                 }
2343             }
2344           else if (aprop != NULL)
2345             {
2346               aprop->pr_kind = property_remove;
2347               updated = TRUE;
2348             }
2349         }
2350       break;
2351
2352     default:
2353       /* Never should happen.  */
2354       abort ();
2355     }
2356
2357   return updated;
2358 }
2359
2360 /* Set up x86 GNU properties.  Return the first relocatable ELF input
2361    with GNU properties if found.  Otherwise, return NULL.  */
2362
2363 bfd *
2364 _bfd_x86_elf_link_setup_gnu_properties
2365   (struct bfd_link_info *info, struct elf_x86_init_table *init_table)
2366 {
2367   bfd_boolean normal_target;
2368   bfd_boolean lazy_plt;
2369   asection *sec, *pltsec;
2370   bfd *dynobj;
2371   bfd_boolean use_ibt_plt;
2372   unsigned int plt_alignment, features;
2373   struct elf_x86_link_hash_table *htab;
2374   bfd *pbfd;
2375   bfd *ebfd = NULL;
2376   elf_property *prop;
2377   const struct elf_backend_data *bed;
2378   unsigned int class_align = ABI_64_P (info->output_bfd) ? 3 : 2;
2379   unsigned int got_align;
2380
2381   features = 0;
2382   if (info->ibt)
2383     features = GNU_PROPERTY_X86_FEATURE_1_IBT;
2384   if (info->shstk)
2385     features |= GNU_PROPERTY_X86_FEATURE_1_SHSTK;
2386
2387   /* Find a normal input file with GNU property note.  */
2388   for (pbfd = info->input_bfds;
2389        pbfd != NULL;
2390        pbfd = pbfd->link.next)
2391     if (bfd_get_flavour (pbfd) == bfd_target_elf_flavour
2392         && bfd_count_sections (pbfd) != 0)
2393       {
2394         ebfd = pbfd;
2395
2396         if (elf_properties (pbfd) != NULL)
2397           break;
2398       }
2399
2400   if (ebfd != NULL && features)
2401     {
2402       /* If features is set, add GNU_PROPERTY_X86_FEATURE_1_IBT and
2403          GNU_PROPERTY_X86_FEATURE_1_SHSTK.  */
2404       prop = _bfd_elf_get_property (ebfd,
2405                                     GNU_PROPERTY_X86_FEATURE_1_AND,
2406                                     4);
2407       prop->u.number |= features;
2408       prop->pr_kind = property_number;
2409
2410       /* Create the GNU property note section if needed.  */
2411       if (pbfd == NULL)
2412         {
2413           sec = bfd_make_section_with_flags (ebfd,
2414                                              NOTE_GNU_PROPERTY_SECTION_NAME,
2415                                              (SEC_ALLOC
2416                                               | SEC_LOAD
2417                                               | SEC_IN_MEMORY
2418                                               | SEC_READONLY
2419                                               | SEC_HAS_CONTENTS
2420                                               | SEC_DATA));
2421           if (sec == NULL)
2422             info->callbacks->einfo (_("%F: failed to create GNU property section\n"));
2423
2424           if (!bfd_set_section_alignment (ebfd, sec, class_align))
2425             {
2426 error_alignment:
2427               info->callbacks->einfo (_("%F%A: failed to align section\n"),
2428                                       sec);
2429             }
2430
2431           elf_section_type (sec) = SHT_NOTE;
2432         }
2433     }
2434
2435   pbfd = _bfd_elf_link_setup_gnu_properties (info);
2436
2437   bed = get_elf_backend_data (info->output_bfd);
2438
2439   htab = elf_x86_hash_table (info, bed->target_id);
2440   if (htab == NULL)
2441     return pbfd;
2442
2443   htab->is_vxworks = init_table->is_vxworks;
2444   htab->r_info = init_table->r_info;
2445   htab->r_sym = init_table->r_sym;
2446
2447   if (bfd_link_relocatable (info))
2448     return pbfd;
2449
2450   use_ibt_plt = info->ibtplt || info->ibt;
2451   if (!use_ibt_plt && pbfd != NULL)
2452     {
2453       /* Check if GNU_PROPERTY_X86_FEATURE_1_IBT is on.  */
2454       elf_property_list *p;
2455
2456       /* The property list is sorted in order of type.  */
2457       for (p = elf_properties (pbfd); p; p = p->next)
2458         {
2459           if (GNU_PROPERTY_X86_FEATURE_1_AND == p->property.pr_type)
2460             {
2461               use_ibt_plt = !!(p->property.u.number
2462                                & GNU_PROPERTY_X86_FEATURE_1_IBT);
2463               break;
2464             }
2465           else if (GNU_PROPERTY_X86_FEATURE_1_AND < p->property.pr_type)
2466             break;
2467         }
2468     }
2469
2470   dynobj = htab->elf.dynobj;
2471
2472   /* Set htab->elf.dynobj here so that there is no need to check and
2473      set it in check_relocs.  */
2474   if (dynobj == NULL)
2475     {
2476       if (pbfd != NULL)
2477         {
2478           htab->elf.dynobj = pbfd;
2479           dynobj = pbfd;
2480         }
2481       else
2482         {
2483           bfd *abfd;
2484
2485           /* Find a normal input file to hold linker created
2486              sections.  */
2487           for (abfd = info->input_bfds;
2488                abfd != NULL;
2489                abfd = abfd->link.next)
2490             if (bfd_get_flavour (abfd) == bfd_target_elf_flavour
2491                 && (abfd->flags
2492                     & (DYNAMIC | BFD_LINKER_CREATED | BFD_PLUGIN)) == 0)
2493               {
2494                 htab->elf.dynobj = abfd;
2495                 dynobj = abfd;
2496                 break;
2497               }
2498         }
2499     }
2500
2501   /* Even when lazy binding is disabled by "-z now", the PLT0 entry may
2502      still be used with LD_AUDIT or LD_PROFILE if PLT entry is used for
2503      canonical function address.  */
2504   htab->plt.has_plt0 = 1;
2505   normal_target = init_table->normal_target;
2506
2507   if (normal_target)
2508     {
2509       if (use_ibt_plt)
2510         {
2511           htab->lazy_plt = init_table->lazy_ibt_plt;
2512           htab->non_lazy_plt = init_table->non_lazy_ibt_plt;
2513         }
2514       else
2515         {
2516           htab->lazy_plt = init_table->lazy_plt;
2517           htab->non_lazy_plt = init_table->non_lazy_plt;
2518         }
2519     }
2520   else
2521     {
2522       htab->lazy_plt = init_table->lazy_plt;
2523       htab->non_lazy_plt = NULL;
2524     }
2525
2526   pltsec = htab->elf.splt;
2527
2528   /* If the non-lazy PLT is available, use it for all PLT entries if
2529      there are no PLT0 or no .plt section.  */
2530   if (htab->non_lazy_plt != NULL
2531       && (!htab->plt.has_plt0 || pltsec == NULL))
2532     {
2533       lazy_plt = FALSE;
2534       if (bfd_link_pic (info))
2535         htab->plt.plt_entry = htab->non_lazy_plt->pic_plt_entry;
2536       else
2537         htab->plt.plt_entry = htab->non_lazy_plt->plt_entry;
2538       htab->plt.plt_entry_size = htab->non_lazy_plt->plt_entry_size;
2539       htab->plt.plt_got_offset = htab->non_lazy_plt->plt_got_offset;
2540       htab->plt.plt_got_insn_size
2541         = htab->non_lazy_plt->plt_got_insn_size;
2542       htab->plt.eh_frame_plt_size
2543         = htab->non_lazy_plt->eh_frame_plt_size;
2544       htab->plt.eh_frame_plt = htab->non_lazy_plt->eh_frame_plt;
2545     }
2546   else
2547     {
2548       lazy_plt = TRUE;
2549       if (bfd_link_pic (info))
2550         {
2551           htab->plt.plt0_entry = htab->lazy_plt->pic_plt0_entry;
2552           htab->plt.plt_entry = htab->lazy_plt->pic_plt_entry;
2553         }
2554       else
2555         {
2556           htab->plt.plt0_entry = htab->lazy_plt->plt0_entry;
2557           htab->plt.plt_entry = htab->lazy_plt->plt_entry;
2558         }
2559       htab->plt.plt_entry_size = htab->lazy_plt->plt_entry_size;
2560       htab->plt.plt_got_offset = htab->lazy_plt->plt_got_offset;
2561       htab->plt.plt_got_insn_size
2562         = htab->lazy_plt->plt_got_insn_size;
2563       htab->plt.eh_frame_plt_size
2564         = htab->lazy_plt->eh_frame_plt_size;
2565       htab->plt.eh_frame_plt = htab->lazy_plt->eh_frame_plt;
2566     }
2567
2568   /* Return if there are no normal input files.  */
2569   if (dynobj == NULL)
2570     return pbfd;
2571
2572   if (htab->is_vxworks
2573       && !elf_vxworks_create_dynamic_sections (dynobj, info,
2574                                                &htab->srelplt2))
2575     {
2576       info->callbacks->einfo (_("%F: failed to create VxWorks dynamic sections\n"));
2577       return pbfd;
2578     }
2579
2580   /* Since create_dynamic_sections isn't always called, but GOT
2581      relocations need GOT relocations, create them here so that we
2582      don't need to do it in check_relocs.  */
2583   if (htab->elf.sgot == NULL
2584       && !_bfd_elf_create_got_section (dynobj, info))
2585     info->callbacks->einfo (_("%F: failed to create GOT sections\n"));
2586
2587   got_align = (bed->target_id == X86_64_ELF_DATA) ? 3 : 2;
2588
2589   /* Align .got and .got.plt sections to their entry size.  Do it here
2590      instead of in create_dynamic_sections so that they are always
2591      properly aligned even if create_dynamic_sections isn't called.  */
2592   sec = htab->elf.sgot;
2593   if (!bfd_set_section_alignment (dynobj, sec, got_align))
2594     goto error_alignment;
2595
2596   sec = htab->elf.sgotplt;
2597   if (!bfd_set_section_alignment (dynobj, sec, got_align))
2598     goto error_alignment;
2599
2600   /* Create the ifunc sections here so that check_relocs can be
2601      simplified.  */
2602   if (!_bfd_elf_create_ifunc_sections (dynobj, info))
2603     info->callbacks->einfo (_("%F: failed to create ifunc sections\n"));
2604
2605   plt_alignment = bfd_log2 (htab->plt.plt_entry_size);
2606
2607   if (pltsec != NULL)
2608     {
2609       /* Whe creating executable, set the contents of the .interp
2610          section to the interpreter.  */
2611       if (bfd_link_executable (info) && !info->nointerp)
2612         {
2613           asection *s = bfd_get_linker_section (dynobj, ".interp");
2614           if (s == NULL)
2615             abort ();
2616           s->size = htab->dynamic_interpreter_size;
2617           s->contents = (unsigned char *) htab->dynamic_interpreter;
2618           htab->interp = s;
2619         }
2620
2621       /* Don't change PLT section alignment for NaCl since it uses
2622          64-byte PLT entry and sets PLT section alignment to 32
2623          bytes.  Don't create additional PLT sections for NaCl.  */
2624       if (normal_target)
2625         {
2626           flagword pltflags = (bed->dynamic_sec_flags
2627                                | SEC_ALLOC
2628                                | SEC_CODE
2629                                | SEC_LOAD
2630                                | SEC_READONLY);
2631           unsigned int non_lazy_plt_alignment
2632             = bfd_log2 (htab->non_lazy_plt->plt_entry_size);
2633
2634           sec = pltsec;
2635           if (!bfd_set_section_alignment (sec->owner, sec,
2636                                           plt_alignment))
2637             goto error_alignment;
2638
2639           /* Create the GOT procedure linkage table.  */
2640           sec = bfd_make_section_anyway_with_flags (dynobj,
2641                                                     ".plt.got",
2642                                                     pltflags);
2643           if (sec == NULL)
2644             info->callbacks->einfo (_("%F: failed to create GOT PLT section\n"));
2645
2646           if (!bfd_set_section_alignment (dynobj, sec,
2647                                           non_lazy_plt_alignment))
2648             goto error_alignment;
2649
2650           htab->plt_got = sec;
2651
2652           if (lazy_plt)
2653             {
2654               sec = NULL;
2655
2656               if (use_ibt_plt)
2657                 {
2658                   /* Create the second PLT for Intel IBT support.  IBT
2659                      PLT is supported only for non-NaCl target and is
2660                      is needed only for lazy binding.  */
2661                   sec = bfd_make_section_anyway_with_flags (dynobj,
2662                                                             ".plt.sec",
2663                                                             pltflags);
2664                   if (sec == NULL)
2665                     info->callbacks->einfo (_("%F: failed to create IBT-enabled PLT section\n"));
2666
2667                   if (!bfd_set_section_alignment (dynobj, sec,
2668                                                   plt_alignment))
2669                     goto error_alignment;
2670                 }
2671               else if (info->bndplt && ABI_64_P (dynobj))
2672                 {
2673                   /* Create the second PLT for Intel MPX support.  MPX
2674                      PLT is supported only for non-NaCl target in 64-bit
2675                      mode and is needed only for lazy binding.  */
2676                   sec = bfd_make_section_anyway_with_flags (dynobj,
2677                                                             ".plt.sec",
2678                                                             pltflags);
2679                   if (sec == NULL)
2680                     info->callbacks->einfo (_("%F: failed to create BND PLT section\n"));
2681
2682                   if (!bfd_set_section_alignment (dynobj, sec,
2683                                                   non_lazy_plt_alignment))
2684                     goto error_alignment;
2685                 }
2686
2687               htab->plt_second = sec;
2688             }
2689         }
2690
2691       if (!info->no_ld_generated_unwind_info)
2692         {
2693           flagword flags = (SEC_ALLOC | SEC_LOAD | SEC_READONLY
2694                             | SEC_HAS_CONTENTS | SEC_IN_MEMORY
2695                             | SEC_LINKER_CREATED);
2696
2697           sec = bfd_make_section_anyway_with_flags (dynobj,
2698                                                     ".eh_frame",
2699                                                     flags);
2700           if (sec == NULL)
2701             info->callbacks->einfo (_("%F: failed to create PLT .eh_frame section\n"));
2702
2703           if (!bfd_set_section_alignment (dynobj, sec, class_align))
2704             goto error_alignment;
2705
2706           htab->plt_eh_frame = sec;
2707
2708           if (htab->plt_got != NULL)
2709             {
2710               sec = bfd_make_section_anyway_with_flags (dynobj,
2711                                                         ".eh_frame",
2712                                                         flags);
2713               if (sec == NULL)
2714                 info->callbacks->einfo (_("%F: failed to create GOT PLT .eh_frame section\n"));
2715
2716               if (!bfd_set_section_alignment (dynobj, sec, class_align))
2717                 goto error_alignment;
2718
2719               htab->plt_got_eh_frame = sec;
2720             }
2721
2722           if (htab->plt_second != NULL)
2723             {
2724               sec = bfd_make_section_anyway_with_flags (dynobj,
2725                                                         ".eh_frame",
2726                                                         flags);
2727               if (sec == NULL)
2728                 info->callbacks->einfo (_("%F: failed to create the second PLT .eh_frame section\n"));
2729
2730               if (!bfd_set_section_alignment (dynobj, sec, class_align))
2731                 goto error_alignment;
2732
2733               htab->plt_second_eh_frame = sec;
2734             }
2735         }
2736     }
2737
2738   if (normal_target)
2739     {
2740       /* The .iplt section is used for IFUNC symbols in static
2741          executables.  */
2742       sec = htab->elf.iplt;
2743       if (sec != NULL
2744           && !bfd_set_section_alignment (sec->owner, sec,
2745                                          plt_alignment))
2746         goto error_alignment;
2747     }
2748
2749   return pbfd;
2750 }