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