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