]> Git Repo - binutils.git/blob - bfd/elf.c
PR26574, heap buffer overflow in _bfd_elf_slurp_secondary_reloc_section
[binutils.git] / bfd / elf.c
1 /* ELF executable support for BFD.
2
3    Copyright (C) 1993-2020 Free Software Foundation, Inc.
4
5    This file is part of BFD, the Binary File Descriptor library.
6
7    This program is free software; you can redistribute it and/or modify
8    it under the terms of the GNU General Public License as published by
9    the Free Software Foundation; either version 3 of the License, or
10    (at your option) any later version.
11
12    This program is distributed in the hope that it will be useful,
13    but WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15    GNU General Public License for more details.
16
17    You should have received a copy of the GNU General Public License
18    along with this program; if not, write to the Free Software
19    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
20    MA 02110-1301, USA.  */
21
22
23 /*
24 SECTION
25         ELF backends
26
27         BFD support for ELF formats is being worked on.
28         Currently, the best supported back ends are for sparc and i386
29         (running svr4 or Solaris 2).
30
31         Documentation of the internals of the support code still needs
32         to be written.  The code is changing quickly enough that we
33         haven't bothered yet.  */
34
35 /* For sparc64-cross-sparc32.  */
36 #define _SYSCALL32
37 #include "sysdep.h"
38 #include <limits.h>
39 #include "bfd.h"
40 #include "bfdlink.h"
41 #include "libbfd.h"
42 #define ARCH_SIZE 0
43 #include "elf-bfd.h"
44 #include "libiberty.h"
45 #include "safe-ctype.h"
46 #include "elf-linux-core.h"
47
48 #ifdef CORE_HEADER
49 #include CORE_HEADER
50 #endif
51
52 static int elf_sort_sections (const void *, const void *);
53 static bfd_boolean assign_file_positions_except_relocs (bfd *, struct bfd_link_info *);
54 static bfd_boolean swap_out_syms (bfd *, struct elf_strtab_hash **, int) ;
55 static bfd_boolean elf_parse_notes (bfd *abfd, char *buf, size_t size,
56                                     file_ptr offset, size_t align);
57
58 /* Swap version information in and out.  The version information is
59    currently size independent.  If that ever changes, this code will
60    need to move into elfcode.h.  */
61
62 /* Swap in a Verdef structure.  */
63
64 void
65 _bfd_elf_swap_verdef_in (bfd *abfd,
66                          const Elf_External_Verdef *src,
67                          Elf_Internal_Verdef *dst)
68 {
69   dst->vd_version = H_GET_16 (abfd, src->vd_version);
70   dst->vd_flags   = H_GET_16 (abfd, src->vd_flags);
71   dst->vd_ndx     = H_GET_16 (abfd, src->vd_ndx);
72   dst->vd_cnt     = H_GET_16 (abfd, src->vd_cnt);
73   dst->vd_hash    = H_GET_32 (abfd, src->vd_hash);
74   dst->vd_aux     = H_GET_32 (abfd, src->vd_aux);
75   dst->vd_next    = H_GET_32 (abfd, src->vd_next);
76 }
77
78 /* Swap out a Verdef structure.  */
79
80 void
81 _bfd_elf_swap_verdef_out (bfd *abfd,
82                           const Elf_Internal_Verdef *src,
83                           Elf_External_Verdef *dst)
84 {
85   H_PUT_16 (abfd, src->vd_version, dst->vd_version);
86   H_PUT_16 (abfd, src->vd_flags, dst->vd_flags);
87   H_PUT_16 (abfd, src->vd_ndx, dst->vd_ndx);
88   H_PUT_16 (abfd, src->vd_cnt, dst->vd_cnt);
89   H_PUT_32 (abfd, src->vd_hash, dst->vd_hash);
90   H_PUT_32 (abfd, src->vd_aux, dst->vd_aux);
91   H_PUT_32 (abfd, src->vd_next, dst->vd_next);
92 }
93
94 /* Swap in a Verdaux structure.  */
95
96 void
97 _bfd_elf_swap_verdaux_in (bfd *abfd,
98                           const Elf_External_Verdaux *src,
99                           Elf_Internal_Verdaux *dst)
100 {
101   dst->vda_name = H_GET_32 (abfd, src->vda_name);
102   dst->vda_next = H_GET_32 (abfd, src->vda_next);
103 }
104
105 /* Swap out a Verdaux structure.  */
106
107 void
108 _bfd_elf_swap_verdaux_out (bfd *abfd,
109                            const Elf_Internal_Verdaux *src,
110                            Elf_External_Verdaux *dst)
111 {
112   H_PUT_32 (abfd, src->vda_name, dst->vda_name);
113   H_PUT_32 (abfd, src->vda_next, dst->vda_next);
114 }
115
116 /* Swap in a Verneed structure.  */
117
118 void
119 _bfd_elf_swap_verneed_in (bfd *abfd,
120                           const Elf_External_Verneed *src,
121                           Elf_Internal_Verneed *dst)
122 {
123   dst->vn_version = H_GET_16 (abfd, src->vn_version);
124   dst->vn_cnt     = H_GET_16 (abfd, src->vn_cnt);
125   dst->vn_file    = H_GET_32 (abfd, src->vn_file);
126   dst->vn_aux     = H_GET_32 (abfd, src->vn_aux);
127   dst->vn_next    = H_GET_32 (abfd, src->vn_next);
128 }
129
130 /* Swap out a Verneed structure.  */
131
132 void
133 _bfd_elf_swap_verneed_out (bfd *abfd,
134                            const Elf_Internal_Verneed *src,
135                            Elf_External_Verneed *dst)
136 {
137   H_PUT_16 (abfd, src->vn_version, dst->vn_version);
138   H_PUT_16 (abfd, src->vn_cnt, dst->vn_cnt);
139   H_PUT_32 (abfd, src->vn_file, dst->vn_file);
140   H_PUT_32 (abfd, src->vn_aux, dst->vn_aux);
141   H_PUT_32 (abfd, src->vn_next, dst->vn_next);
142 }
143
144 /* Swap in a Vernaux structure.  */
145
146 void
147 _bfd_elf_swap_vernaux_in (bfd *abfd,
148                           const Elf_External_Vernaux *src,
149                           Elf_Internal_Vernaux *dst)
150 {
151   dst->vna_hash  = H_GET_32 (abfd, src->vna_hash);
152   dst->vna_flags = H_GET_16 (abfd, src->vna_flags);
153   dst->vna_other = H_GET_16 (abfd, src->vna_other);
154   dst->vna_name  = H_GET_32 (abfd, src->vna_name);
155   dst->vna_next  = H_GET_32 (abfd, src->vna_next);
156 }
157
158 /* Swap out a Vernaux structure.  */
159
160 void
161 _bfd_elf_swap_vernaux_out (bfd *abfd,
162                            const Elf_Internal_Vernaux *src,
163                            Elf_External_Vernaux *dst)
164 {
165   H_PUT_32 (abfd, src->vna_hash, dst->vna_hash);
166   H_PUT_16 (abfd, src->vna_flags, dst->vna_flags);
167   H_PUT_16 (abfd, src->vna_other, dst->vna_other);
168   H_PUT_32 (abfd, src->vna_name, dst->vna_name);
169   H_PUT_32 (abfd, src->vna_next, dst->vna_next);
170 }
171
172 /* Swap in a Versym structure.  */
173
174 void
175 _bfd_elf_swap_versym_in (bfd *abfd,
176                          const Elf_External_Versym *src,
177                          Elf_Internal_Versym *dst)
178 {
179   dst->vs_vers = H_GET_16 (abfd, src->vs_vers);
180 }
181
182 /* Swap out a Versym structure.  */
183
184 void
185 _bfd_elf_swap_versym_out (bfd *abfd,
186                           const Elf_Internal_Versym *src,
187                           Elf_External_Versym *dst)
188 {
189   H_PUT_16 (abfd, src->vs_vers, dst->vs_vers);
190 }
191
192 /* Standard ELF hash function.  Do not change this function; you will
193    cause invalid hash tables to be generated.  */
194
195 unsigned long
196 bfd_elf_hash (const char *namearg)
197 {
198   const unsigned char *name = (const unsigned char *) namearg;
199   unsigned long h = 0;
200   unsigned long g;
201   int ch;
202
203   while ((ch = *name++) != '\0')
204     {
205       h = (h << 4) + ch;
206       if ((g = (h & 0xf0000000)) != 0)
207         {
208           h ^= g >> 24;
209           /* The ELF ABI says `h &= ~g', but this is equivalent in
210              this case and on some machines one insn instead of two.  */
211           h ^= g;
212         }
213     }
214   return h & 0xffffffff;
215 }
216
217 /* DT_GNU_HASH hash function.  Do not change this function; you will
218    cause invalid hash tables to be generated.  */
219
220 unsigned long
221 bfd_elf_gnu_hash (const char *namearg)
222 {
223   const unsigned char *name = (const unsigned char *) namearg;
224   unsigned long h = 5381;
225   unsigned char ch;
226
227   while ((ch = *name++) != '\0')
228     h = (h << 5) + h + ch;
229   return h & 0xffffffff;
230 }
231
232 /* Create a tdata field OBJECT_SIZE bytes in length, zeroed out and with
233    the object_id field of an elf_obj_tdata field set to OBJECT_ID.  */
234 bfd_boolean
235 bfd_elf_allocate_object (bfd *abfd,
236                          size_t object_size,
237                          enum elf_target_id object_id)
238 {
239   BFD_ASSERT (object_size >= sizeof (struct elf_obj_tdata));
240   abfd->tdata.any = bfd_zalloc (abfd, object_size);
241   if (abfd->tdata.any == NULL)
242     return FALSE;
243
244   elf_object_id (abfd) = object_id;
245   if (abfd->direction != read_direction)
246     {
247       struct output_elf_obj_tdata *o = bfd_zalloc (abfd, sizeof *o);
248       if (o == NULL)
249         return FALSE;
250       elf_tdata (abfd)->o = o;
251       elf_program_header_size (abfd) = (bfd_size_type) -1;
252     }
253   return TRUE;
254 }
255
256
257 bfd_boolean
258 bfd_elf_make_object (bfd *abfd)
259 {
260   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
261   return bfd_elf_allocate_object (abfd, sizeof (struct elf_obj_tdata),
262                                   bed->target_id);
263 }
264
265 bfd_boolean
266 bfd_elf_mkcorefile (bfd *abfd)
267 {
268   /* I think this can be done just like an object file.  */
269   if (!abfd->xvec->_bfd_set_format[(int) bfd_object] (abfd))
270     return FALSE;
271   elf_tdata (abfd)->core = bfd_zalloc (abfd, sizeof (*elf_tdata (abfd)->core));
272   return elf_tdata (abfd)->core != NULL;
273 }
274
275 char *
276 bfd_elf_get_str_section (bfd *abfd, unsigned int shindex)
277 {
278   Elf_Internal_Shdr **i_shdrp;
279   bfd_byte *shstrtab = NULL;
280   file_ptr offset;
281   bfd_size_type shstrtabsize;
282
283   i_shdrp = elf_elfsections (abfd);
284   if (i_shdrp == 0
285       || shindex >= elf_numsections (abfd)
286       || i_shdrp[shindex] == 0)
287     return NULL;
288
289   shstrtab = i_shdrp[shindex]->contents;
290   if (shstrtab == NULL)
291     {
292       /* No cached one, attempt to read, and cache what we read.  */
293       offset = i_shdrp[shindex]->sh_offset;
294       shstrtabsize = i_shdrp[shindex]->sh_size;
295
296       /* Allocate and clear an extra byte at the end, to prevent crashes
297          in case the string table is not terminated.  */
298       if (shstrtabsize + 1 <= 1
299           || bfd_seek (abfd, offset, SEEK_SET) != 0
300           || (shstrtab = _bfd_alloc_and_read (abfd, shstrtabsize + 1,
301                                               shstrtabsize)) == NULL)
302         {
303           /* Once we've failed to read it, make sure we don't keep
304              trying.  Otherwise, we'll keep allocating space for
305              the string table over and over.  */
306           i_shdrp[shindex]->sh_size = 0;
307         }
308       else
309         shstrtab[shstrtabsize] = '\0';
310       i_shdrp[shindex]->contents = shstrtab;
311     }
312   return (char *) shstrtab;
313 }
314
315 char *
316 bfd_elf_string_from_elf_section (bfd *abfd,
317                                  unsigned int shindex,
318                                  unsigned int strindex)
319 {
320   Elf_Internal_Shdr *hdr;
321
322   if (strindex == 0)
323     return "";
324
325   if (elf_elfsections (abfd) == NULL || shindex >= elf_numsections (abfd))
326     return NULL;
327
328   hdr = elf_elfsections (abfd)[shindex];
329
330   if (hdr->contents == NULL)
331     {
332       if (hdr->sh_type != SHT_STRTAB && hdr->sh_type < SHT_LOOS)
333         {
334           /* PR 17512: file: f057ec89.  */
335           /* xgettext:c-format */
336           _bfd_error_handler (_("%pB: attempt to load strings from"
337                                 " a non-string section (number %d)"),
338                               abfd, shindex);
339           return NULL;
340         }
341
342       if (bfd_elf_get_str_section (abfd, shindex) == NULL)
343         return NULL;
344     }
345   else
346     {
347       /* PR 24273: The string section's contents may have already
348          been loaded elsewhere, eg because a corrupt file has the
349          string section index in the ELF header pointing at a group
350          section.  So be paranoid, and test that the last byte of
351          the section is zero.  */
352       if (hdr->sh_size == 0 || hdr->contents[hdr->sh_size - 1] != 0)
353         return NULL;
354     }
355
356   if (strindex >= hdr->sh_size)
357     {
358       unsigned int shstrndx = elf_elfheader(abfd)->e_shstrndx;
359       _bfd_error_handler
360         /* xgettext:c-format */
361         (_("%pB: invalid string offset %u >= %" PRIu64 " for section `%s'"),
362          abfd, strindex, (uint64_t) hdr->sh_size,
363          (shindex == shstrndx && strindex == hdr->sh_name
364           ? ".shstrtab"
365           : bfd_elf_string_from_elf_section (abfd, shstrndx, hdr->sh_name)));
366       return NULL;
367     }
368
369   return ((char *) hdr->contents) + strindex;
370 }
371
372 /* Read and convert symbols to internal format.
373    SYMCOUNT specifies the number of symbols to read, starting from
374    symbol SYMOFFSET.  If any of INTSYM_BUF, EXTSYM_BUF or EXTSHNDX_BUF
375    are non-NULL, they are used to store the internal symbols, external
376    symbols, and symbol section index extensions, respectively.
377    Returns a pointer to the internal symbol buffer (malloced if necessary)
378    or NULL if there were no symbols or some kind of problem.  */
379
380 Elf_Internal_Sym *
381 bfd_elf_get_elf_syms (bfd *ibfd,
382                       Elf_Internal_Shdr *symtab_hdr,
383                       size_t symcount,
384                       size_t symoffset,
385                       Elf_Internal_Sym *intsym_buf,
386                       void *extsym_buf,
387                       Elf_External_Sym_Shndx *extshndx_buf)
388 {
389   Elf_Internal_Shdr *shndx_hdr;
390   void *alloc_ext;
391   const bfd_byte *esym;
392   Elf_External_Sym_Shndx *alloc_extshndx;
393   Elf_External_Sym_Shndx *shndx;
394   Elf_Internal_Sym *alloc_intsym;
395   Elf_Internal_Sym *isym;
396   Elf_Internal_Sym *isymend;
397   const struct elf_backend_data *bed;
398   size_t extsym_size;
399   size_t amt;
400   file_ptr pos;
401
402   if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour)
403     abort ();
404
405   if (symcount == 0)
406     return intsym_buf;
407
408   /* Normal syms might have section extension entries.  */
409   shndx_hdr = NULL;
410   if (elf_symtab_shndx_list (ibfd) != NULL)
411     {
412       elf_section_list * entry;
413       Elf_Internal_Shdr **sections = elf_elfsections (ibfd);
414
415       /* Find an index section that is linked to this symtab section.  */
416       for (entry = elf_symtab_shndx_list (ibfd); entry != NULL; entry = entry->next)
417         {
418           /* PR 20063.  */
419           if (entry->hdr.sh_link >= elf_numsections (ibfd))
420             continue;
421
422           if (sections[entry->hdr.sh_link] == symtab_hdr)
423             {
424               shndx_hdr = & entry->hdr;
425               break;
426             };
427         }
428
429       if (shndx_hdr == NULL)
430         {
431           if (symtab_hdr == & elf_symtab_hdr (ibfd))
432             /* Not really accurate, but this was how the old code used to work.  */
433             shndx_hdr = & elf_symtab_shndx_list (ibfd)->hdr;
434           /* Otherwise we do nothing.  The assumption is that
435              the index table will not be needed.  */
436         }
437     }
438
439   /* Read the symbols.  */
440   alloc_ext = NULL;
441   alloc_extshndx = NULL;
442   alloc_intsym = NULL;
443   bed = get_elf_backend_data (ibfd);
444   extsym_size = bed->s->sizeof_sym;
445   if (_bfd_mul_overflow (symcount, extsym_size, &amt))
446     {
447       bfd_set_error (bfd_error_file_too_big);
448       intsym_buf = NULL;
449       goto out;
450     }
451   pos = symtab_hdr->sh_offset + symoffset * extsym_size;
452   if (extsym_buf == NULL)
453     {
454       alloc_ext = bfd_malloc (amt);
455       extsym_buf = alloc_ext;
456     }
457   if (extsym_buf == NULL
458       || bfd_seek (ibfd, pos, SEEK_SET) != 0
459       || bfd_bread (extsym_buf, amt, ibfd) != amt)
460     {
461       intsym_buf = NULL;
462       goto out;
463     }
464
465   if (shndx_hdr == NULL || shndx_hdr->sh_size == 0)
466     extshndx_buf = NULL;
467   else
468     {
469       if (_bfd_mul_overflow (symcount, sizeof (Elf_External_Sym_Shndx), &amt))
470         {
471           bfd_set_error (bfd_error_file_too_big);
472           intsym_buf = NULL;
473           goto out;
474         }
475       pos = shndx_hdr->sh_offset + symoffset * sizeof (Elf_External_Sym_Shndx);
476       if (extshndx_buf == NULL)
477         {
478           alloc_extshndx = (Elf_External_Sym_Shndx *) bfd_malloc (amt);
479           extshndx_buf = alloc_extshndx;
480         }
481       if (extshndx_buf == NULL
482           || bfd_seek (ibfd, pos, SEEK_SET) != 0
483           || bfd_bread (extshndx_buf, amt, ibfd) != amt)
484         {
485           intsym_buf = NULL;
486           goto out;
487         }
488     }
489
490   if (intsym_buf == NULL)
491     {
492       if (_bfd_mul_overflow (symcount, sizeof (Elf_Internal_Sym), &amt))
493         {
494           bfd_set_error (bfd_error_file_too_big);
495           goto out;
496         }
497       alloc_intsym = (Elf_Internal_Sym *) bfd_malloc (amt);
498       intsym_buf = alloc_intsym;
499       if (intsym_buf == NULL)
500         goto out;
501     }
502
503   /* Convert the symbols to internal form.  */
504   isymend = intsym_buf + symcount;
505   for (esym = (const bfd_byte *) extsym_buf, isym = intsym_buf,
506            shndx = extshndx_buf;
507        isym < isymend;
508        esym += extsym_size, isym++, shndx = shndx != NULL ? shndx + 1 : NULL)
509     if (!(*bed->s->swap_symbol_in) (ibfd, esym, shndx, isym))
510       {
511         symoffset += (esym - (bfd_byte *) extsym_buf) / extsym_size;
512         /* xgettext:c-format */
513         _bfd_error_handler (_("%pB symbol number %lu references"
514                               " nonexistent SHT_SYMTAB_SHNDX section"),
515                             ibfd, (unsigned long) symoffset);
516         free (alloc_intsym);
517         intsym_buf = NULL;
518         goto out;
519       }
520
521  out:
522   free (alloc_ext);
523   free (alloc_extshndx);
524
525   return intsym_buf;
526 }
527
528 /* Look up a symbol name.  */
529 const char *
530 bfd_elf_sym_name (bfd *abfd,
531                   Elf_Internal_Shdr *symtab_hdr,
532                   Elf_Internal_Sym *isym,
533                   asection *sym_sec)
534 {
535   const char *name;
536   unsigned int iname = isym->st_name;
537   unsigned int shindex = symtab_hdr->sh_link;
538
539   if (iname == 0 && ELF_ST_TYPE (isym->st_info) == STT_SECTION
540       /* Check for a bogus st_shndx to avoid crashing.  */
541       && isym->st_shndx < elf_numsections (abfd))
542     {
543       iname = elf_elfsections (abfd)[isym->st_shndx]->sh_name;
544       shindex = elf_elfheader (abfd)->e_shstrndx;
545     }
546
547   name = bfd_elf_string_from_elf_section (abfd, shindex, iname);
548   if (name == NULL)
549     name = "(null)";
550   else if (sym_sec && *name == '\0')
551     name = bfd_section_name (sym_sec);
552
553   return name;
554 }
555
556 /* Elf_Internal_Shdr->contents is an array of these for SHT_GROUP
557    sections.  The first element is the flags, the rest are section
558    pointers.  */
559
560 typedef union elf_internal_group {
561   Elf_Internal_Shdr *shdr;
562   unsigned int flags;
563 } Elf_Internal_Group;
564
565 /* Return the name of the group signature symbol.  Why isn't the
566    signature just a string?  */
567
568 static const char *
569 group_signature (bfd *abfd, Elf_Internal_Shdr *ghdr)
570 {
571   Elf_Internal_Shdr *hdr;
572   unsigned char esym[sizeof (Elf64_External_Sym)];
573   Elf_External_Sym_Shndx eshndx;
574   Elf_Internal_Sym isym;
575
576   /* First we need to ensure the symbol table is available.  Make sure
577      that it is a symbol table section.  */
578   if (ghdr->sh_link >= elf_numsections (abfd))
579     return NULL;
580   hdr = elf_elfsections (abfd) [ghdr->sh_link];
581   if (hdr->sh_type != SHT_SYMTAB
582       || ! bfd_section_from_shdr (abfd, ghdr->sh_link))
583     return NULL;
584
585   /* Go read the symbol.  */
586   hdr = &elf_tdata (abfd)->symtab_hdr;
587   if (bfd_elf_get_elf_syms (abfd, hdr, 1, ghdr->sh_info,
588                             &isym, esym, &eshndx) == NULL)
589     return NULL;
590
591   return bfd_elf_sym_name (abfd, hdr, &isym, NULL);
592 }
593
594 /* Set next_in_group list pointer, and group name for NEWSECT.  */
595
596 static bfd_boolean
597 setup_group (bfd *abfd, Elf_Internal_Shdr *hdr, asection *newsect)
598 {
599   unsigned int num_group = elf_tdata (abfd)->num_group;
600
601   /* If num_group is zero, read in all SHT_GROUP sections.  The count
602      is set to -1 if there are no SHT_GROUP sections.  */
603   if (num_group == 0)
604     {
605       unsigned int i, shnum;
606
607       /* First count the number of groups.  If we have a SHT_GROUP
608          section with just a flag word (ie. sh_size is 4), ignore it.  */
609       shnum = elf_numsections (abfd);
610       num_group = 0;
611
612 #define IS_VALID_GROUP_SECTION_HEADER(shdr, minsize)    \
613         (   (shdr)->sh_type == SHT_GROUP                \
614          && (shdr)->sh_size >= minsize                  \
615          && (shdr)->sh_entsize == GRP_ENTRY_SIZE        \
616          && ((shdr)->sh_size % GRP_ENTRY_SIZE) == 0)
617
618       for (i = 0; i < shnum; i++)
619         {
620           Elf_Internal_Shdr *shdr = elf_elfsections (abfd)[i];
621
622           if (IS_VALID_GROUP_SECTION_HEADER (shdr, 2 * GRP_ENTRY_SIZE))
623             num_group += 1;
624         }
625
626       if (num_group == 0)
627         {
628           num_group = (unsigned) -1;
629           elf_tdata (abfd)->num_group = num_group;
630           elf_tdata (abfd)->group_sect_ptr = NULL;
631         }
632       else
633         {
634           /* We keep a list of elf section headers for group sections,
635              so we can find them quickly.  */
636           size_t amt;
637
638           elf_tdata (abfd)->num_group = num_group;
639           amt = num_group * sizeof (Elf_Internal_Shdr *);
640           elf_tdata (abfd)->group_sect_ptr
641             = (Elf_Internal_Shdr **) bfd_zalloc (abfd, amt);
642           if (elf_tdata (abfd)->group_sect_ptr == NULL)
643             return FALSE;
644           num_group = 0;
645
646           for (i = 0; i < shnum; i++)
647             {
648               Elf_Internal_Shdr *shdr = elf_elfsections (abfd)[i];
649
650               if (IS_VALID_GROUP_SECTION_HEADER (shdr, 2 * GRP_ENTRY_SIZE))
651                 {
652                   unsigned char *src;
653                   Elf_Internal_Group *dest;
654
655                   /* Make sure the group section has a BFD section
656                      attached to it.  */
657                   if (!bfd_section_from_shdr (abfd, i))
658                     return FALSE;
659
660                   /* Add to list of sections.  */
661                   elf_tdata (abfd)->group_sect_ptr[num_group] = shdr;
662                   num_group += 1;
663
664                   /* Read the raw contents.  */
665                   BFD_ASSERT (sizeof (*dest) >= 4 && sizeof (*dest) % 4 == 0);
666                   shdr->contents = NULL;
667                   if (_bfd_mul_overflow (shdr->sh_size,
668                                          sizeof (*dest) / 4, &amt)
669                       || bfd_seek (abfd, shdr->sh_offset, SEEK_SET) != 0
670                       || !(shdr->contents
671                            = _bfd_alloc_and_read (abfd, amt, shdr->sh_size)))
672                     {
673                       _bfd_error_handler
674                         /* xgettext:c-format */
675                         (_("%pB: invalid size field in group section"
676                            " header: %#" PRIx64 ""),
677                          abfd, (uint64_t) shdr->sh_size);
678                       bfd_set_error (bfd_error_bad_value);
679                       -- num_group;
680                       continue;
681                     }
682
683                   /* Translate raw contents, a flag word followed by an
684                      array of elf section indices all in target byte order,
685                      to the flag word followed by an array of elf section
686                      pointers.  */
687                   src = shdr->contents + shdr->sh_size;
688                   dest = (Elf_Internal_Group *) (shdr->contents + amt);
689
690                   while (1)
691                     {
692                       unsigned int idx;
693
694                       src -= 4;
695                       --dest;
696                       idx = H_GET_32 (abfd, src);
697                       if (src == shdr->contents)
698                         {
699                           dest->shdr = NULL;
700                           dest->flags = idx;
701                           if (shdr->bfd_section != NULL && (idx & GRP_COMDAT))
702                             shdr->bfd_section->flags
703                               |= SEC_LINK_ONCE | SEC_LINK_DUPLICATES_DISCARD;
704                           break;
705                         }
706                       if (idx < shnum)
707                         {
708                           dest->shdr = elf_elfsections (abfd)[idx];
709                           /* PR binutils/23199: All sections in a
710                              section group should be marked with
711                              SHF_GROUP.  But some tools generate
712                              broken objects without SHF_GROUP.  Fix
713                              them up here.  */
714                           dest->shdr->sh_flags |= SHF_GROUP;
715                         }
716                       if (idx >= shnum
717                           || dest->shdr->sh_type == SHT_GROUP)
718                         {
719                           _bfd_error_handler
720                             (_("%pB: invalid entry in SHT_GROUP section [%u]"),
721                                abfd, i);
722                           dest->shdr = NULL;
723                         }
724                     }
725                 }
726             }
727
728           /* PR 17510: Corrupt binaries might contain invalid groups.  */
729           if (num_group != (unsigned) elf_tdata (abfd)->num_group)
730             {
731               elf_tdata (abfd)->num_group = num_group;
732
733               /* If all groups are invalid then fail.  */
734               if (num_group == 0)
735                 {
736                   elf_tdata (abfd)->group_sect_ptr = NULL;
737                   elf_tdata (abfd)->num_group = num_group = -1;
738                   _bfd_error_handler
739                     (_("%pB: no valid group sections found"), abfd);
740                   bfd_set_error (bfd_error_bad_value);
741                 }
742             }
743         }
744     }
745
746   if (num_group != (unsigned) -1)
747     {
748       unsigned int search_offset = elf_tdata (abfd)->group_search_offset;
749       unsigned int j;
750
751       for (j = 0; j < num_group; j++)
752         {
753           /* Begin search from previous found group.  */
754           unsigned i = (j + search_offset) % num_group;
755
756           Elf_Internal_Shdr *shdr = elf_tdata (abfd)->group_sect_ptr[i];
757           Elf_Internal_Group *idx;
758           bfd_size_type n_elt;
759
760           if (shdr == NULL)
761             continue;
762
763           idx = (Elf_Internal_Group *) shdr->contents;
764           if (idx == NULL || shdr->sh_size < 4)
765             {
766               /* See PR 21957 for a reproducer.  */
767               /* xgettext:c-format */
768               _bfd_error_handler (_("%pB: group section '%pA' has no contents"),
769                                   abfd, shdr->bfd_section);
770               elf_tdata (abfd)->group_sect_ptr[i] = NULL;
771               bfd_set_error (bfd_error_bad_value);
772               return FALSE;
773             }
774           n_elt = shdr->sh_size / 4;
775
776           /* Look through this group's sections to see if current
777              section is a member.  */
778           while (--n_elt != 0)
779             if ((++idx)->shdr == hdr)
780               {
781                 asection *s = NULL;
782
783                 /* We are a member of this group.  Go looking through
784                    other members to see if any others are linked via
785                    next_in_group.  */
786                 idx = (Elf_Internal_Group *) shdr->contents;
787                 n_elt = shdr->sh_size / 4;
788                 while (--n_elt != 0)
789                   if ((++idx)->shdr != NULL
790                       && (s = idx->shdr->bfd_section) != NULL
791                       && elf_next_in_group (s) != NULL)
792                     break;
793                 if (n_elt != 0)
794                   {
795                     /* Snarf the group name from other member, and
796                        insert current section in circular list.  */
797                     elf_group_name (newsect) = elf_group_name (s);
798                     elf_next_in_group (newsect) = elf_next_in_group (s);
799                     elf_next_in_group (s) = newsect;
800                   }
801                 else
802                   {
803                     const char *gname;
804
805                     gname = group_signature (abfd, shdr);
806                     if (gname == NULL)
807                       return FALSE;
808                     elf_group_name (newsect) = gname;
809
810                     /* Start a circular list with one element.  */
811                     elf_next_in_group (newsect) = newsect;
812                   }
813
814                 /* If the group section has been created, point to the
815                    new member.  */
816                 if (shdr->bfd_section != NULL)
817                   elf_next_in_group (shdr->bfd_section) = newsect;
818
819                 elf_tdata (abfd)->group_search_offset = i;
820                 j = num_group - 1;
821                 break;
822               }
823         }
824     }
825
826   if (elf_group_name (newsect) == NULL)
827     {
828       /* xgettext:c-format */
829       _bfd_error_handler (_("%pB: no group info for section '%pA'"),
830                           abfd, newsect);
831       return FALSE;
832     }
833   return TRUE;
834 }
835
836 bfd_boolean
837 _bfd_elf_setup_sections (bfd *abfd)
838 {
839   unsigned int i;
840   unsigned int num_group = elf_tdata (abfd)->num_group;
841   bfd_boolean result = TRUE;
842   asection *s;
843
844   /* Process SHF_LINK_ORDER.  */
845   for (s = abfd->sections; s != NULL; s = s->next)
846     {
847       Elf_Internal_Shdr *this_hdr = &elf_section_data (s)->this_hdr;
848       if ((this_hdr->sh_flags & SHF_LINK_ORDER) != 0)
849         {
850           unsigned int elfsec = this_hdr->sh_link;
851           /* FIXME: The old Intel compiler and old strip/objcopy may
852              not set the sh_link or sh_info fields.  Hence we could
853              get the situation where elfsec is 0.  */
854           if (elfsec == 0)
855             {
856               const struct elf_backend_data *bed = get_elf_backend_data (abfd);
857               bed->link_order_error_handler
858                 /* xgettext:c-format */
859                 (_("%pB: warning: sh_link not set for section `%pA'"),
860                  abfd, s);
861             }
862           else
863             {
864               asection *linksec = NULL;
865
866               if (elfsec < elf_numsections (abfd))
867                 {
868                   this_hdr = elf_elfsections (abfd)[elfsec];
869                   linksec = this_hdr->bfd_section;
870                 }
871
872               /* PR 1991, 2008:
873                  Some strip/objcopy may leave an incorrect value in
874                  sh_link.  We don't want to proceed.  */
875               if (linksec == NULL)
876                 {
877                   _bfd_error_handler
878                     /* xgettext:c-format */
879                     (_("%pB: sh_link [%d] in section `%pA' is incorrect"),
880                      s->owner, elfsec, s);
881                   result = FALSE;
882                 }
883
884               elf_linked_to_section (s) = linksec;
885             }
886         }
887       else if (this_hdr->sh_type == SHT_GROUP
888                && elf_next_in_group (s) == NULL)
889         {
890           _bfd_error_handler
891             /* xgettext:c-format */
892             (_("%pB: SHT_GROUP section [index %d] has no SHF_GROUP sections"),
893              abfd, elf_section_data (s)->this_idx);
894           result = FALSE;
895         }
896     }
897
898   /* Process section groups.  */
899   if (num_group == (unsigned) -1)
900     return result;
901
902   for (i = 0; i < num_group; i++)
903     {
904       Elf_Internal_Shdr *shdr = elf_tdata (abfd)->group_sect_ptr[i];
905       Elf_Internal_Group *idx;
906       unsigned int n_elt;
907
908       /* PR binutils/18758: Beware of corrupt binaries with invalid group data.  */
909       if (shdr == NULL || shdr->bfd_section == NULL || shdr->contents == NULL)
910         {
911           _bfd_error_handler
912             /* xgettext:c-format */
913             (_("%pB: section group entry number %u is corrupt"),
914              abfd, i);
915           result = FALSE;
916           continue;
917         }
918
919       idx = (Elf_Internal_Group *) shdr->contents;
920       n_elt = shdr->sh_size / 4;
921
922       while (--n_elt != 0)
923         {
924           ++ idx;
925
926           if (idx->shdr == NULL)
927             continue;
928           else if (idx->shdr->bfd_section)
929             elf_sec_group (idx->shdr->bfd_section) = shdr->bfd_section;
930           else if (idx->shdr->sh_type != SHT_RELA
931                    && idx->shdr->sh_type != SHT_REL)
932             {
933               /* There are some unknown sections in the group.  */
934               _bfd_error_handler
935                 /* xgettext:c-format */
936                 (_("%pB: unknown type [%#x] section `%s' in group [%pA]"),
937                  abfd,
938                  idx->shdr->sh_type,
939                  bfd_elf_string_from_elf_section (abfd,
940                                                   (elf_elfheader (abfd)
941                                                    ->e_shstrndx),
942                                                   idx->shdr->sh_name),
943                  shdr->bfd_section);
944               result = FALSE;
945             }
946         }
947     }
948
949   return result;
950 }
951
952 bfd_boolean
953 bfd_elf_is_group_section (bfd *abfd ATTRIBUTE_UNUSED, const asection *sec)
954 {
955   return elf_next_in_group (sec) != NULL;
956 }
957
958 const char *
959 bfd_elf_group_name (bfd *abfd ATTRIBUTE_UNUSED, const asection *sec)
960 {
961   if (elf_sec_group (sec) != NULL)
962     return elf_group_name (sec);
963   return NULL;
964 }
965
966 static char *
967 convert_debug_to_zdebug (bfd *abfd, const char *name)
968 {
969   unsigned int len = strlen (name);
970   char *new_name = bfd_alloc (abfd, len + 2);
971   if (new_name == NULL)
972     return NULL;
973   new_name[0] = '.';
974   new_name[1] = 'z';
975   memcpy (new_name + 2, name + 1, len);
976   return new_name;
977 }
978
979 static char *
980 convert_zdebug_to_debug (bfd *abfd, const char *name)
981 {
982   unsigned int len = strlen (name);
983   char *new_name = bfd_alloc (abfd, len);
984   if (new_name == NULL)
985     return NULL;
986   new_name[0] = '.';
987   memcpy (new_name + 1, name + 2, len - 1);
988   return new_name;
989 }
990
991 /* This a copy of lto_section defined in GCC (lto-streamer.h).  */
992
993 struct lto_section
994 {
995   int16_t major_version;
996   int16_t minor_version;
997   unsigned char slim_object;
998
999   /* Flags is a private field that is not defined publicly.  */
1000   uint16_t flags;
1001 };
1002
1003 /* Make a BFD section from an ELF section.  We store a pointer to the
1004    BFD section in the bfd_section field of the header.  */
1005
1006 bfd_boolean
1007 _bfd_elf_make_section_from_shdr (bfd *abfd,
1008                                  Elf_Internal_Shdr *hdr,
1009                                  const char *name,
1010                                  int shindex)
1011 {
1012   asection *newsect;
1013   flagword flags;
1014   const struct elf_backend_data *bed;
1015   unsigned int opb = bfd_octets_per_byte (abfd, NULL);
1016
1017   if (hdr->bfd_section != NULL)
1018     return TRUE;
1019
1020   newsect = bfd_make_section_anyway (abfd, name);
1021   if (newsect == NULL)
1022     return FALSE;
1023
1024   hdr->bfd_section = newsect;
1025   elf_section_data (newsect)->this_hdr = *hdr;
1026   elf_section_data (newsect)->this_idx = shindex;
1027
1028   /* Always use the real type/flags.  */
1029   elf_section_type (newsect) = hdr->sh_type;
1030   elf_section_flags (newsect) = hdr->sh_flags;
1031
1032   newsect->filepos = hdr->sh_offset;
1033
1034   flags = SEC_NO_FLAGS;
1035   if (hdr->sh_type != SHT_NOBITS)
1036     flags |= SEC_HAS_CONTENTS;
1037   if (hdr->sh_type == SHT_GROUP)
1038     flags |= SEC_GROUP;
1039   if ((hdr->sh_flags & SHF_ALLOC) != 0)
1040     {
1041       flags |= SEC_ALLOC;
1042       if (hdr->sh_type != SHT_NOBITS)
1043         flags |= SEC_LOAD;
1044     }
1045   if ((hdr->sh_flags & SHF_WRITE) == 0)
1046     flags |= SEC_READONLY;
1047   if ((hdr->sh_flags & SHF_EXECINSTR) != 0)
1048     flags |= SEC_CODE;
1049   else if ((flags & SEC_LOAD) != 0)
1050     flags |= SEC_DATA;
1051   if ((hdr->sh_flags & SHF_MERGE) != 0)
1052     {
1053       flags |= SEC_MERGE;
1054       newsect->entsize = hdr->sh_entsize;
1055     }
1056   if ((hdr->sh_flags & SHF_STRINGS) != 0)
1057     flags |= SEC_STRINGS;
1058   if (hdr->sh_flags & SHF_GROUP)
1059     if (!setup_group (abfd, hdr, newsect))
1060       return FALSE;
1061   if ((hdr->sh_flags & SHF_TLS) != 0)
1062     flags |= SEC_THREAD_LOCAL;
1063   if ((hdr->sh_flags & SHF_EXCLUDE) != 0)
1064     flags |= SEC_EXCLUDE;
1065
1066   switch (elf_elfheader (abfd)->e_ident[EI_OSABI])
1067     {
1068       /* FIXME: We should not recognize SHF_GNU_MBIND for ELFOSABI_NONE,
1069          but binutils as of 2019-07-23 did not set the EI_OSABI header
1070          byte.  */
1071     case ELFOSABI_NONE:
1072     case ELFOSABI_GNU:
1073     case ELFOSABI_FREEBSD:
1074       if ((hdr->sh_flags & SHF_GNU_MBIND) != 0)
1075         elf_tdata (abfd)->has_gnu_osabi |= elf_gnu_osabi_mbind;
1076       break;
1077     }
1078
1079   if ((flags & SEC_ALLOC) == 0)
1080     {
1081       /* The debugging sections appear to be recognized only by name,
1082          not any sort of flag.  Their SEC_ALLOC bits are cleared.  */
1083       if (name [0] == '.')
1084         {
1085           if (strncmp (name, ".debug", 6) == 0
1086               || strncmp (name, ".gnu.linkonce.wi.", 17) == 0
1087               || strncmp (name, ".zdebug", 7) == 0)
1088             flags |= SEC_DEBUGGING | SEC_ELF_OCTETS;
1089           else if (strncmp (name, GNU_BUILD_ATTRS_SECTION_NAME, 21) == 0
1090                    || strncmp (name, ".note.gnu", 9) == 0)
1091             {
1092               flags |= SEC_ELF_OCTETS;
1093               opb = 1;
1094             }
1095           else if (strncmp (name, ".line", 5) == 0
1096                    || strncmp (name, ".stab", 5) == 0
1097                    || strcmp (name, ".gdb_index") == 0)
1098             flags |= SEC_DEBUGGING;
1099         }
1100     }
1101
1102   if (!bfd_set_section_vma (newsect, hdr->sh_addr / opb)
1103       || !bfd_set_section_size (newsect, hdr->sh_size)
1104       || !bfd_set_section_alignment (newsect, bfd_log2 (hdr->sh_addralign)))
1105     return FALSE;
1106
1107   /* As a GNU extension, if the name begins with .gnu.linkonce, we
1108      only link a single copy of the section.  This is used to support
1109      g++.  g++ will emit each template expansion in its own section.
1110      The symbols will be defined as weak, so that multiple definitions
1111      are permitted.  The GNU linker extension is to actually discard
1112      all but one of the sections.  */
1113   if (CONST_STRNEQ (name, ".gnu.linkonce")
1114       && elf_next_in_group (newsect) == NULL)
1115     flags |= SEC_LINK_ONCE | SEC_LINK_DUPLICATES_DISCARD;
1116
1117   if (!bfd_set_section_flags (newsect, flags))
1118     return FALSE;
1119
1120   bed = get_elf_backend_data (abfd);
1121   if (bed->elf_backend_section_flags)
1122     if (!bed->elf_backend_section_flags (hdr))
1123       return FALSE;
1124
1125   /* We do not parse the PT_NOTE segments as we are interested even in the
1126      separate debug info files which may have the segments offsets corrupted.
1127      PT_NOTEs from the core files are currently not parsed using BFD.  */
1128   if (hdr->sh_type == SHT_NOTE)
1129     {
1130       bfd_byte *contents;
1131
1132       if (!bfd_malloc_and_get_section (abfd, newsect, &contents))
1133         return FALSE;
1134
1135       elf_parse_notes (abfd, (char *) contents, hdr->sh_size,
1136                        hdr->sh_offset, hdr->sh_addralign);
1137       free (contents);
1138     }
1139
1140   if ((newsect->flags & SEC_ALLOC) != 0)
1141     {
1142       Elf_Internal_Phdr *phdr;
1143       unsigned int i, nload;
1144
1145       /* Some ELF linkers produce binaries with all the program header
1146          p_paddr fields zero.  If we have such a binary with more than
1147          one PT_LOAD header, then leave the section lma equal to vma
1148          so that we don't create sections with overlapping lma.  */
1149       phdr = elf_tdata (abfd)->phdr;
1150       for (nload = 0, i = 0; i < elf_elfheader (abfd)->e_phnum; i++, phdr++)
1151         if (phdr->p_paddr != 0)
1152           break;
1153         else if (phdr->p_type == PT_LOAD && phdr->p_memsz != 0)
1154           ++nload;
1155       if (i >= elf_elfheader (abfd)->e_phnum && nload > 1)
1156         return TRUE;
1157
1158       phdr = elf_tdata (abfd)->phdr;
1159       for (i = 0; i < elf_elfheader (abfd)->e_phnum; i++, phdr++)
1160         {
1161           if (((phdr->p_type == PT_LOAD
1162                 && (hdr->sh_flags & SHF_TLS) == 0)
1163                || phdr->p_type == PT_TLS)
1164               && ELF_SECTION_IN_SEGMENT (hdr, phdr))
1165             {
1166               if ((newsect->flags & SEC_LOAD) == 0)
1167                 newsect->lma = (phdr->p_paddr
1168                                 + hdr->sh_addr - phdr->p_vaddr) / opb;
1169               else
1170                 /* We used to use the same adjustment for SEC_LOAD
1171                    sections, but that doesn't work if the segment
1172                    is packed with code from multiple VMAs.
1173                    Instead we calculate the section LMA based on
1174                    the segment LMA.  It is assumed that the
1175                    segment will contain sections with contiguous
1176                    LMAs, even if the VMAs are not.  */
1177                 newsect->lma = (phdr->p_paddr
1178                                 + hdr->sh_offset - phdr->p_offset) / opb;
1179
1180               /* With contiguous segments, we can't tell from file
1181                  offsets whether a section with zero size should
1182                  be placed at the end of one segment or the
1183                  beginning of the next.  Decide based on vaddr.  */
1184               if (hdr->sh_addr >= phdr->p_vaddr
1185                   && (hdr->sh_addr + hdr->sh_size
1186                       <= phdr->p_vaddr + phdr->p_memsz))
1187                 break;
1188             }
1189         }
1190     }
1191
1192   /* Compress/decompress DWARF debug sections with names: .debug_* and
1193      .zdebug_*, after the section flags is set.  */
1194   if ((newsect->flags & SEC_DEBUGGING)
1195       && ((name[1] == 'd' && name[6] == '_')
1196           || (name[1] == 'z' && name[7] == '_')))
1197     {
1198       enum { nothing, compress, decompress } action = nothing;
1199       int compression_header_size;
1200       bfd_size_type uncompressed_size;
1201       unsigned int uncompressed_align_power;
1202       bfd_boolean compressed
1203         = bfd_is_section_compressed_with_header (abfd, newsect,
1204                                                  &compression_header_size,
1205                                                  &uncompressed_size,
1206                                                  &uncompressed_align_power);
1207       if (compressed)
1208         {
1209           /* Compressed section.  Check if we should decompress.  */
1210           if ((abfd->flags & BFD_DECOMPRESS))
1211             action = decompress;
1212         }
1213
1214       /* Compress the uncompressed section or convert from/to .zdebug*
1215          section.  Check if we should compress.  */
1216       if (action == nothing)
1217         {
1218           if (newsect->size != 0
1219               && (abfd->flags & BFD_COMPRESS)
1220               && compression_header_size >= 0
1221               && uncompressed_size > 0
1222               && (!compressed
1223                   || ((compression_header_size > 0)
1224                       != ((abfd->flags & BFD_COMPRESS_GABI) != 0))))
1225             action = compress;
1226           else
1227             return TRUE;
1228         }
1229
1230       if (action == compress)
1231         {
1232           if (!bfd_init_section_compress_status (abfd, newsect))
1233             {
1234               _bfd_error_handler
1235                 /* xgettext:c-format */
1236                 (_("%pB: unable to initialize compress status for section %s"),
1237                  abfd, name);
1238               return FALSE;
1239             }
1240         }
1241       else
1242         {
1243           if (!bfd_init_section_decompress_status (abfd, newsect))
1244             {
1245               _bfd_error_handler
1246                 /* xgettext:c-format */
1247                 (_("%pB: unable to initialize decompress status for section %s"),
1248                  abfd, name);
1249               return FALSE;
1250             }
1251         }
1252
1253       if (abfd->is_linker_input)
1254         {
1255           if (name[1] == 'z'
1256               && (action == decompress
1257                   || (action == compress
1258                       && (abfd->flags & BFD_COMPRESS_GABI) != 0)))
1259             {
1260               /* Convert section name from .zdebug_* to .debug_* so
1261                  that linker will consider this section as a debug
1262                  section.  */
1263               char *new_name = convert_zdebug_to_debug (abfd, name);
1264               if (new_name == NULL)
1265                 return FALSE;
1266               bfd_rename_section (newsect, new_name);
1267             }
1268         }
1269       else
1270         /* For objdump, don't rename the section.  For objcopy, delay
1271            section rename to elf_fake_sections.  */
1272         newsect->flags |= SEC_ELF_RENAME;
1273     }
1274
1275   /* GCC uses .gnu.lto_.lto.<some_hash> as a LTO bytecode information
1276      section.  */
1277   const char *lto_section_name = ".gnu.lto_.lto.";
1278   if (strncmp (name, lto_section_name, strlen (lto_section_name)) == 0)
1279     {
1280       struct lto_section lsection;
1281       if (bfd_get_section_contents (abfd, newsect, &lsection, 0,
1282                                     sizeof (struct lto_section)))
1283         abfd->lto_slim_object = lsection.slim_object;
1284     }
1285
1286   return TRUE;
1287 }
1288
1289 const char *const bfd_elf_section_type_names[] =
1290 {
1291   "SHT_NULL", "SHT_PROGBITS", "SHT_SYMTAB", "SHT_STRTAB",
1292   "SHT_RELA", "SHT_HASH", "SHT_DYNAMIC", "SHT_NOTE",
1293   "SHT_NOBITS", "SHT_REL", "SHT_SHLIB", "SHT_DYNSYM",
1294 };
1295
1296 /* ELF relocs are against symbols.  If we are producing relocatable
1297    output, and the reloc is against an external symbol, and nothing
1298    has given us any additional addend, the resulting reloc will also
1299    be against the same symbol.  In such a case, we don't want to
1300    change anything about the way the reloc is handled, since it will
1301    all be done at final link time.  Rather than put special case code
1302    into bfd_perform_relocation, all the reloc types use this howto
1303    function.  It just short circuits the reloc if producing
1304    relocatable output against an external symbol.  */
1305
1306 bfd_reloc_status_type
1307 bfd_elf_generic_reloc (bfd *abfd ATTRIBUTE_UNUSED,
1308                        arelent *reloc_entry,
1309                        asymbol *symbol,
1310                        void *data ATTRIBUTE_UNUSED,
1311                        asection *input_section,
1312                        bfd *output_bfd,
1313                        char **error_message ATTRIBUTE_UNUSED)
1314 {
1315   if (output_bfd != NULL
1316       && (symbol->flags & BSF_SECTION_SYM) == 0
1317       && (! reloc_entry->howto->partial_inplace
1318           || reloc_entry->addend == 0))
1319     {
1320       reloc_entry->address += input_section->output_offset;
1321       return bfd_reloc_ok;
1322     }
1323
1324   return bfd_reloc_continue;
1325 }
1326 \f
1327 /* Returns TRUE if section A matches section B.
1328    Names, addresses and links may be different, but everything else
1329    should be the same.  */
1330
1331 static bfd_boolean
1332 section_match (const Elf_Internal_Shdr * a,
1333                const Elf_Internal_Shdr * b)
1334 {
1335   if (a->sh_type != b->sh_type
1336       || ((a->sh_flags ^ b->sh_flags) & ~SHF_INFO_LINK) != 0
1337       || a->sh_addralign != b->sh_addralign
1338       || a->sh_entsize != b->sh_entsize)
1339     return FALSE;
1340   if (a->sh_type == SHT_SYMTAB
1341       || a->sh_type == SHT_STRTAB)
1342     return TRUE;
1343   return a->sh_size == b->sh_size;
1344 }
1345
1346 /* Find a section in OBFD that has the same characteristics
1347    as IHEADER.  Return the index of this section or SHN_UNDEF if
1348    none can be found.  Check's section HINT first, as this is likely
1349    to be the correct section.  */
1350
1351 static unsigned int
1352 find_link (const bfd *obfd, const Elf_Internal_Shdr *iheader,
1353            const unsigned int hint)
1354 {
1355   Elf_Internal_Shdr ** oheaders = elf_elfsections (obfd);
1356   unsigned int i;
1357
1358   BFD_ASSERT (iheader != NULL);
1359
1360   /* See PR 20922 for a reproducer of the NULL test.  */
1361   if (hint < elf_numsections (obfd)
1362       && oheaders[hint] != NULL
1363       && section_match (oheaders[hint], iheader))
1364     return hint;
1365
1366   for (i = 1; i < elf_numsections (obfd); i++)
1367     {
1368       Elf_Internal_Shdr * oheader = oheaders[i];
1369
1370       if (oheader == NULL)
1371         continue;
1372       if (section_match (oheader, iheader))
1373         /* FIXME: Do we care if there is a potential for
1374            multiple matches ?  */
1375         return i;
1376     }
1377
1378   return SHN_UNDEF;
1379 }
1380
1381 /* PR 19938: Attempt to set the ELF section header fields of an OS or
1382    Processor specific section, based upon a matching input section.
1383    Returns TRUE upon success, FALSE otherwise.  */
1384
1385 static bfd_boolean
1386 copy_special_section_fields (const bfd *ibfd,
1387                              bfd *obfd,
1388                              const Elf_Internal_Shdr *iheader,
1389                              Elf_Internal_Shdr *oheader,
1390                              const unsigned int secnum)
1391 {
1392   const struct elf_backend_data *bed = get_elf_backend_data (obfd);
1393   const Elf_Internal_Shdr **iheaders = (const Elf_Internal_Shdr **) elf_elfsections (ibfd);
1394   bfd_boolean changed = FALSE;
1395   unsigned int sh_link;
1396
1397   if (oheader->sh_type == SHT_NOBITS)
1398     {
1399       /* This is a feature for objcopy --only-keep-debug:
1400          When a section's type is changed to NOBITS, we preserve
1401          the sh_link and sh_info fields so that they can be
1402          matched up with the original.
1403
1404          Note: Strictly speaking these assignments are wrong.
1405          The sh_link and sh_info fields should point to the
1406          relevent sections in the output BFD, which may not be in
1407          the same location as they were in the input BFD.  But
1408          the whole point of this action is to preserve the
1409          original values of the sh_link and sh_info fields, so
1410          that they can be matched up with the section headers in
1411          the original file.  So strictly speaking we may be
1412          creating an invalid ELF file, but it is only for a file
1413          that just contains debug info and only for sections
1414          without any contents.  */
1415       if (oheader->sh_link == 0)
1416         oheader->sh_link = iheader->sh_link;
1417       if (oheader->sh_info == 0)
1418         oheader->sh_info = iheader->sh_info;
1419       return TRUE;
1420     }
1421
1422   /* Allow the target a chance to decide how these fields should be set.  */
1423   if (bed->elf_backend_copy_special_section_fields (ibfd, obfd,
1424                                                     iheader, oheader))
1425     return TRUE;
1426
1427   /* We have an iheader which might match oheader, and which has non-zero
1428      sh_info and/or sh_link fields.  Attempt to follow those links and find
1429      the section in the output bfd which corresponds to the linked section
1430      in the input bfd.  */
1431   if (iheader->sh_link != SHN_UNDEF)
1432     {
1433       /* See PR 20931 for a reproducer.  */
1434       if (iheader->sh_link >= elf_numsections (ibfd))
1435         {
1436           _bfd_error_handler
1437             /* xgettext:c-format */
1438             (_("%pB: invalid sh_link field (%d) in section number %d"),
1439              ibfd, iheader->sh_link, secnum);
1440           return FALSE;
1441         }
1442
1443       sh_link = find_link (obfd, iheaders[iheader->sh_link], iheader->sh_link);
1444       if (sh_link != SHN_UNDEF)
1445         {
1446           oheader->sh_link = sh_link;
1447           changed = TRUE;
1448         }
1449       else
1450         /* FIXME: Should we install iheader->sh_link
1451            if we could not find a match ?  */
1452         _bfd_error_handler
1453           /* xgettext:c-format */
1454           (_("%pB: failed to find link section for section %d"), obfd, secnum);
1455     }
1456
1457   if (iheader->sh_info)
1458     {
1459       /* The sh_info field can hold arbitrary information, but if the
1460          SHF_LINK_INFO flag is set then it should be interpreted as a
1461          section index.  */
1462       if (iheader->sh_flags & SHF_INFO_LINK)
1463         {
1464           sh_link = find_link (obfd, iheaders[iheader->sh_info],
1465                                iheader->sh_info);
1466           if (sh_link != SHN_UNDEF)
1467             oheader->sh_flags |= SHF_INFO_LINK;
1468         }
1469       else
1470         /* No idea what it means - just copy it.  */
1471         sh_link = iheader->sh_info;
1472
1473       if (sh_link != SHN_UNDEF)
1474         {
1475           oheader->sh_info = sh_link;
1476           changed = TRUE;
1477         }
1478       else
1479         _bfd_error_handler
1480           /* xgettext:c-format */
1481           (_("%pB: failed to find info section for section %d"), obfd, secnum);
1482     }
1483
1484   return changed;
1485 }
1486
1487 /* Copy the program header and other data from one object module to
1488    another.  */
1489
1490 bfd_boolean
1491 _bfd_elf_copy_private_bfd_data (bfd *ibfd, bfd *obfd)
1492 {
1493   const Elf_Internal_Shdr **iheaders = (const Elf_Internal_Shdr **) elf_elfsections (ibfd);
1494   Elf_Internal_Shdr **oheaders = elf_elfsections (obfd);
1495   const struct elf_backend_data *bed;
1496   unsigned int i;
1497
1498   if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
1499     || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
1500     return TRUE;
1501
1502   if (!elf_flags_init (obfd))
1503     {
1504       elf_elfheader (obfd)->e_flags = elf_elfheader (ibfd)->e_flags;
1505       elf_flags_init (obfd) = TRUE;
1506     }
1507
1508   elf_gp (obfd) = elf_gp (ibfd);
1509
1510   /* Also copy the EI_OSABI field.  */
1511   elf_elfheader (obfd)->e_ident[EI_OSABI] =
1512     elf_elfheader (ibfd)->e_ident[EI_OSABI];
1513
1514   /* If set, copy the EI_ABIVERSION field.  */
1515   if (elf_elfheader (ibfd)->e_ident[EI_ABIVERSION])
1516     elf_elfheader (obfd)->e_ident[EI_ABIVERSION]
1517       = elf_elfheader (ibfd)->e_ident[EI_ABIVERSION];
1518
1519   /* Copy object attributes.  */
1520   _bfd_elf_copy_obj_attributes (ibfd, obfd);
1521
1522   if (iheaders == NULL || oheaders == NULL)
1523     return TRUE;
1524
1525   bed = get_elf_backend_data (obfd);
1526
1527   /* Possibly copy other fields in the section header.  */
1528   for (i = 1; i < elf_numsections (obfd); i++)
1529     {
1530       unsigned int j;
1531       Elf_Internal_Shdr * oheader = oheaders[i];
1532
1533       /* Ignore ordinary sections.  SHT_NOBITS sections are considered however
1534          because of a special case need for generating separate debug info
1535          files.  See below for more details.  */
1536       if (oheader == NULL
1537           || (oheader->sh_type != SHT_NOBITS
1538               && oheader->sh_type < SHT_LOOS))
1539         continue;
1540
1541       /* Ignore empty sections, and sections whose
1542          fields have already been initialised.  */
1543       if (oheader->sh_size == 0
1544           || (oheader->sh_info != 0 && oheader->sh_link != 0))
1545         continue;
1546
1547       /* Scan for the matching section in the input bfd.
1548          First we try for a direct mapping between the input and output sections.  */
1549       for (j = 1; j < elf_numsections (ibfd); j++)
1550         {
1551           const Elf_Internal_Shdr * iheader = iheaders[j];
1552
1553           if (iheader == NULL)
1554             continue;
1555
1556           if (oheader->bfd_section != NULL
1557               && iheader->bfd_section != NULL
1558               && iheader->bfd_section->output_section != NULL
1559               && iheader->bfd_section->output_section == oheader->bfd_section)
1560             {
1561               /* We have found a connection from the input section to the
1562                  output section.  Attempt to copy the header fields.  If
1563                  this fails then do not try any further sections - there
1564                  should only be a one-to-one mapping between input and output. */
1565               if (! copy_special_section_fields (ibfd, obfd, iheader, oheader, i))
1566                 j = elf_numsections (ibfd);
1567               break;
1568             }
1569         }
1570
1571       if (j < elf_numsections (ibfd))
1572         continue;
1573
1574       /* That failed.  So try to deduce the corresponding input section.
1575          Unfortunately we cannot compare names as the output string table
1576          is empty, so instead we check size, address and type.  */
1577       for (j = 1; j < elf_numsections (ibfd); j++)
1578         {
1579           const Elf_Internal_Shdr * iheader = iheaders[j];
1580
1581           if (iheader == NULL)
1582             continue;
1583
1584           /* Try matching fields in the input section's header.
1585              Since --only-keep-debug turns all non-debug sections into
1586              SHT_NOBITS sections, the output SHT_NOBITS type matches any
1587              input type.  */
1588           if ((oheader->sh_type == SHT_NOBITS
1589                || iheader->sh_type == oheader->sh_type)
1590               && (iheader->sh_flags & ~ SHF_INFO_LINK)
1591               == (oheader->sh_flags & ~ SHF_INFO_LINK)
1592               && iheader->sh_addralign == oheader->sh_addralign
1593               && iheader->sh_entsize == oheader->sh_entsize
1594               && iheader->sh_size == oheader->sh_size
1595               && iheader->sh_addr == oheader->sh_addr
1596               && (iheader->sh_info != oheader->sh_info
1597                   || iheader->sh_link != oheader->sh_link))
1598             {
1599               if (copy_special_section_fields (ibfd, obfd, iheader, oheader, i))
1600                 break;
1601             }
1602         }
1603
1604       if (j == elf_numsections (ibfd) && oheader->sh_type >= SHT_LOOS)
1605         {
1606           /* Final attempt.  Call the backend copy function
1607              with a NULL input section.  */
1608           (void) bed->elf_backend_copy_special_section_fields (ibfd, obfd,
1609                                                                NULL, oheader);
1610         }
1611     }
1612
1613   return TRUE;
1614 }
1615
1616 static const char *
1617 get_segment_type (unsigned int p_type)
1618 {
1619   const char *pt;
1620   switch (p_type)
1621     {
1622     case PT_NULL: pt = "NULL"; break;
1623     case PT_LOAD: pt = "LOAD"; break;
1624     case PT_DYNAMIC: pt = "DYNAMIC"; break;
1625     case PT_INTERP: pt = "INTERP"; break;
1626     case PT_NOTE: pt = "NOTE"; break;
1627     case PT_SHLIB: pt = "SHLIB"; break;
1628     case PT_PHDR: pt = "PHDR"; break;
1629     case PT_TLS: pt = "TLS"; break;
1630     case PT_GNU_EH_FRAME: pt = "EH_FRAME"; break;
1631     case PT_GNU_STACK: pt = "STACK"; break;
1632     case PT_GNU_RELRO: pt = "RELRO"; break;
1633     default: pt = NULL; break;
1634     }
1635   return pt;
1636 }
1637
1638 /* Print out the program headers.  */
1639
1640 bfd_boolean
1641 _bfd_elf_print_private_bfd_data (bfd *abfd, void *farg)
1642 {
1643   FILE *f = (FILE *) farg;
1644   Elf_Internal_Phdr *p;
1645   asection *s;
1646   bfd_byte *dynbuf = NULL;
1647
1648   p = elf_tdata (abfd)->phdr;
1649   if (p != NULL)
1650     {
1651       unsigned int i, c;
1652
1653       fprintf (f, _("\nProgram Header:\n"));
1654       c = elf_elfheader (abfd)->e_phnum;
1655       for (i = 0; i < c; i++, p++)
1656         {
1657           const char *pt = get_segment_type (p->p_type);
1658           char buf[20];
1659
1660           if (pt == NULL)
1661             {
1662               sprintf (buf, "0x%lx", p->p_type);
1663               pt = buf;
1664             }
1665           fprintf (f, "%8s off    0x", pt);
1666           bfd_fprintf_vma (abfd, f, p->p_offset);
1667           fprintf (f, " vaddr 0x");
1668           bfd_fprintf_vma (abfd, f, p->p_vaddr);
1669           fprintf (f, " paddr 0x");
1670           bfd_fprintf_vma (abfd, f, p->p_paddr);
1671           fprintf (f, " align 2**%u\n", bfd_log2 (p->p_align));
1672           fprintf (f, "         filesz 0x");
1673           bfd_fprintf_vma (abfd, f, p->p_filesz);
1674           fprintf (f, " memsz 0x");
1675           bfd_fprintf_vma (abfd, f, p->p_memsz);
1676           fprintf (f, " flags %c%c%c",
1677                    (p->p_flags & PF_R) != 0 ? 'r' : '-',
1678                    (p->p_flags & PF_W) != 0 ? 'w' : '-',
1679                    (p->p_flags & PF_X) != 0 ? 'x' : '-');
1680           if ((p->p_flags &~ (unsigned) (PF_R | PF_W | PF_X)) != 0)
1681             fprintf (f, " %lx", p->p_flags &~ (unsigned) (PF_R | PF_W | PF_X));
1682           fprintf (f, "\n");
1683         }
1684     }
1685
1686   s = bfd_get_section_by_name (abfd, ".dynamic");
1687   if (s != NULL)
1688     {
1689       unsigned int elfsec;
1690       unsigned long shlink;
1691       bfd_byte *extdyn, *extdynend;
1692       size_t extdynsize;
1693       void (*swap_dyn_in) (bfd *, const void *, Elf_Internal_Dyn *);
1694
1695       fprintf (f, _("\nDynamic Section:\n"));
1696
1697       if (!bfd_malloc_and_get_section (abfd, s, &dynbuf))
1698         goto error_return;
1699
1700       elfsec = _bfd_elf_section_from_bfd_section (abfd, s);
1701       if (elfsec == SHN_BAD)
1702         goto error_return;
1703       shlink = elf_elfsections (abfd)[elfsec]->sh_link;
1704
1705       extdynsize = get_elf_backend_data (abfd)->s->sizeof_dyn;
1706       swap_dyn_in = get_elf_backend_data (abfd)->s->swap_dyn_in;
1707
1708       extdyn = dynbuf;
1709       /* PR 17512: file: 6f427532.  */
1710       if (s->size < extdynsize)
1711         goto error_return;
1712       extdynend = extdyn + s->size;
1713       /* PR 17512: file: id:000006,sig:06,src:000000,op:flip4,pos:5664.
1714          Fix range check.  */
1715       for (; extdyn <= (extdynend - extdynsize); extdyn += extdynsize)
1716         {
1717           Elf_Internal_Dyn dyn;
1718           const char *name = "";
1719           char ab[20];
1720           bfd_boolean stringp;
1721           const struct elf_backend_data *bed = get_elf_backend_data (abfd);
1722
1723           (*swap_dyn_in) (abfd, extdyn, &dyn);
1724
1725           if (dyn.d_tag == DT_NULL)
1726             break;
1727
1728           stringp = FALSE;
1729           switch (dyn.d_tag)
1730             {
1731             default:
1732               if (bed->elf_backend_get_target_dtag)
1733                 name = (*bed->elf_backend_get_target_dtag) (dyn.d_tag);
1734
1735               if (!strcmp (name, ""))
1736                 {
1737                   sprintf (ab, "%#" BFD_VMA_FMT "x", dyn.d_tag);
1738                   name = ab;
1739                 }
1740               break;
1741
1742             case DT_NEEDED: name = "NEEDED"; stringp = TRUE; break;
1743             case DT_PLTRELSZ: name = "PLTRELSZ"; break;
1744             case DT_PLTGOT: name = "PLTGOT"; break;
1745             case DT_HASH: name = "HASH"; break;
1746             case DT_STRTAB: name = "STRTAB"; break;
1747             case DT_SYMTAB: name = "SYMTAB"; break;
1748             case DT_RELA: name = "RELA"; break;
1749             case DT_RELASZ: name = "RELASZ"; break;
1750             case DT_RELAENT: name = "RELAENT"; break;
1751             case DT_STRSZ: name = "STRSZ"; break;
1752             case DT_SYMENT: name = "SYMENT"; break;
1753             case DT_INIT: name = "INIT"; break;
1754             case DT_FINI: name = "FINI"; break;
1755             case DT_SONAME: name = "SONAME"; stringp = TRUE; break;
1756             case DT_RPATH: name = "RPATH"; stringp = TRUE; break;
1757             case DT_SYMBOLIC: name = "SYMBOLIC"; break;
1758             case DT_REL: name = "REL"; break;
1759             case DT_RELSZ: name = "RELSZ"; break;
1760             case DT_RELENT: name = "RELENT"; break;
1761             case DT_PLTREL: name = "PLTREL"; break;
1762             case DT_DEBUG: name = "DEBUG"; break;
1763             case DT_TEXTREL: name = "TEXTREL"; break;
1764             case DT_JMPREL: name = "JMPREL"; break;
1765             case DT_BIND_NOW: name = "BIND_NOW"; break;
1766             case DT_INIT_ARRAY: name = "INIT_ARRAY"; break;
1767             case DT_FINI_ARRAY: name = "FINI_ARRAY"; break;
1768             case DT_INIT_ARRAYSZ: name = "INIT_ARRAYSZ"; break;
1769             case DT_FINI_ARRAYSZ: name = "FINI_ARRAYSZ"; break;
1770             case DT_RUNPATH: name = "RUNPATH"; stringp = TRUE; break;
1771             case DT_FLAGS: name = "FLAGS"; break;
1772             case DT_PREINIT_ARRAY: name = "PREINIT_ARRAY"; break;
1773             case DT_PREINIT_ARRAYSZ: name = "PREINIT_ARRAYSZ"; break;
1774             case DT_CHECKSUM: name = "CHECKSUM"; break;
1775             case DT_PLTPADSZ: name = "PLTPADSZ"; break;
1776             case DT_MOVEENT: name = "MOVEENT"; break;
1777             case DT_MOVESZ: name = "MOVESZ"; break;
1778             case DT_FEATURE: name = "FEATURE"; break;
1779             case DT_POSFLAG_1: name = "POSFLAG_1"; break;
1780             case DT_SYMINSZ: name = "SYMINSZ"; break;
1781             case DT_SYMINENT: name = "SYMINENT"; break;
1782             case DT_CONFIG: name = "CONFIG"; stringp = TRUE; break;
1783             case DT_DEPAUDIT: name = "DEPAUDIT"; stringp = TRUE; break;
1784             case DT_AUDIT: name = "AUDIT"; stringp = TRUE; break;
1785             case DT_PLTPAD: name = "PLTPAD"; break;
1786             case DT_MOVETAB: name = "MOVETAB"; break;
1787             case DT_SYMINFO: name = "SYMINFO"; break;
1788             case DT_RELACOUNT: name = "RELACOUNT"; break;
1789             case DT_RELCOUNT: name = "RELCOUNT"; break;
1790             case DT_FLAGS_1: name = "FLAGS_1"; break;
1791             case DT_VERSYM: name = "VERSYM"; break;
1792             case DT_VERDEF: name = "VERDEF"; break;
1793             case DT_VERDEFNUM: name = "VERDEFNUM"; break;
1794             case DT_VERNEED: name = "VERNEED"; break;
1795             case DT_VERNEEDNUM: name = "VERNEEDNUM"; break;
1796             case DT_AUXILIARY: name = "AUXILIARY"; stringp = TRUE; break;
1797             case DT_USED: name = "USED"; break;
1798             case DT_FILTER: name = "FILTER"; stringp = TRUE; break;
1799             case DT_GNU_HASH: name = "GNU_HASH"; break;
1800             }
1801
1802           fprintf (f, "  %-20s ", name);
1803           if (! stringp)
1804             {
1805               fprintf (f, "0x");
1806               bfd_fprintf_vma (abfd, f, dyn.d_un.d_val);
1807             }
1808           else
1809             {
1810               const char *string;
1811               unsigned int tagv = dyn.d_un.d_val;
1812
1813               string = bfd_elf_string_from_elf_section (abfd, shlink, tagv);
1814               if (string == NULL)
1815                 goto error_return;
1816               fprintf (f, "%s", string);
1817             }
1818           fprintf (f, "\n");
1819         }
1820
1821       free (dynbuf);
1822       dynbuf = NULL;
1823     }
1824
1825   if ((elf_dynverdef (abfd) != 0 && elf_tdata (abfd)->verdef == NULL)
1826       || (elf_dynverref (abfd) != 0 && elf_tdata (abfd)->verref == NULL))
1827     {
1828       if (! _bfd_elf_slurp_version_tables (abfd, FALSE))
1829         return FALSE;
1830     }
1831
1832   if (elf_dynverdef (abfd) != 0)
1833     {
1834       Elf_Internal_Verdef *t;
1835
1836       fprintf (f, _("\nVersion definitions:\n"));
1837       for (t = elf_tdata (abfd)->verdef; t != NULL; t = t->vd_nextdef)
1838         {
1839           fprintf (f, "%d 0x%2.2x 0x%8.8lx %s\n", t->vd_ndx,
1840                    t->vd_flags, t->vd_hash,
1841                    t->vd_nodename ? t->vd_nodename : "<corrupt>");
1842           if (t->vd_auxptr != NULL && t->vd_auxptr->vda_nextptr != NULL)
1843             {
1844               Elf_Internal_Verdaux *a;
1845
1846               fprintf (f, "\t");
1847               for (a = t->vd_auxptr->vda_nextptr;
1848                    a != NULL;
1849                    a = a->vda_nextptr)
1850                 fprintf (f, "%s ",
1851                          a->vda_nodename ? a->vda_nodename : "<corrupt>");
1852               fprintf (f, "\n");
1853             }
1854         }
1855     }
1856
1857   if (elf_dynverref (abfd) != 0)
1858     {
1859       Elf_Internal_Verneed *t;
1860
1861       fprintf (f, _("\nVersion References:\n"));
1862       for (t = elf_tdata (abfd)->verref; t != NULL; t = t->vn_nextref)
1863         {
1864           Elf_Internal_Vernaux *a;
1865
1866           fprintf (f, _("  required from %s:\n"),
1867                    t->vn_filename ? t->vn_filename : "<corrupt>");
1868           for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr)
1869             fprintf (f, "    0x%8.8lx 0x%2.2x %2.2d %s\n", a->vna_hash,
1870                      a->vna_flags, a->vna_other,
1871                      a->vna_nodename ? a->vna_nodename : "<corrupt>");
1872         }
1873     }
1874
1875   return TRUE;
1876
1877  error_return:
1878   free (dynbuf);
1879   return FALSE;
1880 }
1881
1882 /* Get version name.  If BASE_P is TRUE, return "Base" for VER_FLG_BASE
1883    and return symbol version for symbol version itself.   */
1884
1885 const char *
1886 _bfd_elf_get_symbol_version_string (bfd *abfd, asymbol *symbol,
1887                                     bfd_boolean base_p,
1888                                     bfd_boolean *hidden)
1889 {
1890   const char *version_string = NULL;
1891   if (elf_dynversym (abfd) != 0
1892       && (elf_dynverdef (abfd) != 0 || elf_dynverref (abfd) != 0))
1893     {
1894       unsigned int vernum = ((elf_symbol_type *) symbol)->version;
1895
1896       *hidden = (vernum & VERSYM_HIDDEN) != 0;
1897       vernum &= VERSYM_VERSION;
1898
1899       if (vernum == 0)
1900         version_string = "";
1901       else if (vernum == 1
1902                && (vernum > elf_tdata (abfd)->cverdefs
1903                    || (elf_tdata (abfd)->verdef[0].vd_flags
1904                        == VER_FLG_BASE)))
1905         version_string = base_p ? "Base" : "";
1906       else if (vernum <= elf_tdata (abfd)->cverdefs)
1907         {
1908           const char *nodename
1909             = elf_tdata (abfd)->verdef[vernum - 1].vd_nodename;
1910           version_string = "";
1911           if (base_p
1912               || nodename == NULL
1913               || symbol->name == NULL
1914               || strcmp (symbol->name, nodename) != 0)
1915             version_string = nodename;
1916         }
1917       else
1918         {
1919           Elf_Internal_Verneed *t;
1920
1921           version_string = _("<corrupt>");
1922           for (t = elf_tdata (abfd)->verref;
1923                t != NULL;
1924                t = t->vn_nextref)
1925             {
1926               Elf_Internal_Vernaux *a;
1927
1928               for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr)
1929                 {
1930                   if (a->vna_other == vernum)
1931                     {
1932                       version_string = a->vna_nodename;
1933                       break;
1934                     }
1935                 }
1936             }
1937         }
1938     }
1939   return version_string;
1940 }
1941
1942 /* Display ELF-specific fields of a symbol.  */
1943
1944 void
1945 bfd_elf_print_symbol (bfd *abfd,
1946                       void *filep,
1947                       asymbol *symbol,
1948                       bfd_print_symbol_type how)
1949 {
1950   FILE *file = (FILE *) filep;
1951   switch (how)
1952     {
1953     case bfd_print_symbol_name:
1954       fprintf (file, "%s", symbol->name);
1955       break;
1956     case bfd_print_symbol_more:
1957       fprintf (file, "elf ");
1958       bfd_fprintf_vma (abfd, file, symbol->value);
1959       fprintf (file, " %x", symbol->flags);
1960       break;
1961     case bfd_print_symbol_all:
1962       {
1963         const char *section_name;
1964         const char *name = NULL;
1965         const struct elf_backend_data *bed;
1966         unsigned char st_other;
1967         bfd_vma val;
1968         const char *version_string;
1969         bfd_boolean hidden;
1970
1971         section_name = symbol->section ? symbol->section->name : "(*none*)";
1972
1973         bed = get_elf_backend_data (abfd);
1974         if (bed->elf_backend_print_symbol_all)
1975           name = (*bed->elf_backend_print_symbol_all) (abfd, filep, symbol);
1976
1977         if (name == NULL)
1978           {
1979             name = symbol->name;
1980             bfd_print_symbol_vandf (abfd, file, symbol);
1981           }
1982
1983         fprintf (file, " %s\t", section_name);
1984         /* Print the "other" value for a symbol.  For common symbols,
1985            we've already printed the size; now print the alignment.
1986            For other symbols, we have no specified alignment, and
1987            we've printed the address; now print the size.  */
1988         if (symbol->section && bfd_is_com_section (symbol->section))
1989           val = ((elf_symbol_type *) symbol)->internal_elf_sym.st_value;
1990         else
1991           val = ((elf_symbol_type *) symbol)->internal_elf_sym.st_size;
1992         bfd_fprintf_vma (abfd, file, val);
1993
1994         /* If we have version information, print it.  */
1995         version_string = _bfd_elf_get_symbol_version_string (abfd,
1996                                                              symbol,
1997                                                              TRUE,
1998                                                              &hidden);
1999         if (version_string)
2000           {
2001             if (!hidden)
2002               fprintf (file, "  %-11s", version_string);
2003             else
2004               {
2005                 int i;
2006
2007                 fprintf (file, " (%s)", version_string);
2008                 for (i = 10 - strlen (version_string); i > 0; --i)
2009                   putc (' ', file);
2010               }
2011           }
2012
2013         /* If the st_other field is not zero, print it.  */
2014         st_other = ((elf_symbol_type *) symbol)->internal_elf_sym.st_other;
2015
2016         switch (st_other)
2017           {
2018           case 0: break;
2019           case STV_INTERNAL:  fprintf (file, " .internal");  break;
2020           case STV_HIDDEN:    fprintf (file, " .hidden");    break;
2021           case STV_PROTECTED: fprintf (file, " .protected"); break;
2022           default:
2023             /* Some other non-defined flags are also present, so print
2024                everything hex.  */
2025             fprintf (file, " 0x%02x", (unsigned int) st_other);
2026           }
2027
2028         fprintf (file, " %s", name);
2029       }
2030       break;
2031     }
2032 }
2033 \f
2034 /* ELF .o/exec file reading */
2035
2036 /* Create a new bfd section from an ELF section header.  */
2037
2038 bfd_boolean
2039 bfd_section_from_shdr (bfd *abfd, unsigned int shindex)
2040 {
2041   Elf_Internal_Shdr *hdr;
2042   Elf_Internal_Ehdr *ehdr;
2043   const struct elf_backend_data *bed;
2044   const char *name;
2045   bfd_boolean ret = TRUE;
2046   static bfd_boolean * sections_being_created = NULL;
2047   static bfd * sections_being_created_abfd = NULL;
2048   static unsigned int nesting = 0;
2049
2050   if (shindex >= elf_numsections (abfd))
2051     return FALSE;
2052
2053   if (++ nesting > 3)
2054     {
2055       /* PR17512: A corrupt ELF binary might contain a recursive group of
2056          sections, with each the string indices pointing to the next in the
2057          loop.  Detect this here, by refusing to load a section that we are
2058          already in the process of loading.  We only trigger this test if
2059          we have nested at least three sections deep as normal ELF binaries
2060          can expect to recurse at least once.
2061
2062          FIXME: It would be better if this array was attached to the bfd,
2063          rather than being held in a static pointer.  */
2064
2065       if (sections_being_created_abfd != abfd)
2066         sections_being_created = NULL;
2067       if (sections_being_created == NULL)
2068         {
2069           size_t amt = elf_numsections (abfd) * sizeof (bfd_boolean);
2070
2071           /* PR 26005: Do not use bfd_zalloc here as the memory might
2072              be released before the bfd has been fully scanned.  */
2073           sections_being_created = (bfd_boolean *) bfd_malloc (amt);
2074           if (sections_being_created == NULL)
2075             return FALSE;
2076           memset (sections_being_created, FALSE, amt);
2077           sections_being_created_abfd = abfd;
2078         }
2079       if (sections_being_created [shindex])
2080         {
2081           _bfd_error_handler
2082             (_("%pB: warning: loop in section dependencies detected"), abfd);
2083           return FALSE;
2084         }
2085       sections_being_created [shindex] = TRUE;
2086     }
2087
2088   hdr = elf_elfsections (abfd)[shindex];
2089   ehdr = elf_elfheader (abfd);
2090   name = bfd_elf_string_from_elf_section (abfd, ehdr->e_shstrndx,
2091                                           hdr->sh_name);
2092   if (name == NULL)
2093     goto fail;
2094
2095   bed = get_elf_backend_data (abfd);
2096   switch (hdr->sh_type)
2097     {
2098     case SHT_NULL:
2099       /* Inactive section. Throw it away.  */
2100       goto success;
2101
2102     case SHT_PROGBITS:          /* Normal section with contents.  */
2103     case SHT_NOBITS:            /* .bss section.  */
2104     case SHT_HASH:              /* .hash section.  */
2105     case SHT_NOTE:              /* .note section.  */
2106     case SHT_INIT_ARRAY:        /* .init_array section.  */
2107     case SHT_FINI_ARRAY:        /* .fini_array section.  */
2108     case SHT_PREINIT_ARRAY:     /* .preinit_array section.  */
2109     case SHT_GNU_LIBLIST:       /* .gnu.liblist section.  */
2110     case SHT_GNU_HASH:          /* .gnu.hash section.  */
2111       ret = _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
2112       goto success;
2113
2114     case SHT_DYNAMIC:   /* Dynamic linking information.  */
2115       if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex))
2116         goto fail;
2117
2118       if (hdr->sh_link > elf_numsections (abfd))
2119         {
2120           /* PR 10478: Accept Solaris binaries with a sh_link
2121              field set to SHN_BEFORE or SHN_AFTER.  */
2122           switch (bfd_get_arch (abfd))
2123             {
2124             case bfd_arch_i386:
2125             case bfd_arch_sparc:
2126               if (hdr->sh_link == (SHN_LORESERVE & 0xffff) /* SHN_BEFORE */
2127                   || hdr->sh_link == ((SHN_LORESERVE + 1) & 0xffff) /* SHN_AFTER */)
2128                 break;
2129               /* Otherwise fall through.  */
2130             default:
2131               goto fail;
2132             }
2133         }
2134       else if (elf_elfsections (abfd)[hdr->sh_link] == NULL)
2135         goto fail;
2136       else if (elf_elfsections (abfd)[hdr->sh_link]->sh_type != SHT_STRTAB)
2137         {
2138           Elf_Internal_Shdr *dynsymhdr;
2139
2140           /* The shared libraries distributed with hpux11 have a bogus
2141              sh_link field for the ".dynamic" section.  Find the
2142              string table for the ".dynsym" section instead.  */
2143           if (elf_dynsymtab (abfd) != 0)
2144             {
2145               dynsymhdr = elf_elfsections (abfd)[elf_dynsymtab (abfd)];
2146               hdr->sh_link = dynsymhdr->sh_link;
2147             }
2148           else
2149             {
2150               unsigned int i, num_sec;
2151
2152               num_sec = elf_numsections (abfd);
2153               for (i = 1; i < num_sec; i++)
2154                 {
2155                   dynsymhdr = elf_elfsections (abfd)[i];
2156                   if (dynsymhdr->sh_type == SHT_DYNSYM)
2157                     {
2158                       hdr->sh_link = dynsymhdr->sh_link;
2159                       break;
2160                     }
2161                 }
2162             }
2163         }
2164       goto success;
2165
2166     case SHT_SYMTAB:            /* A symbol table.  */
2167       if (elf_onesymtab (abfd) == shindex)
2168         goto success;
2169
2170       if (hdr->sh_entsize != bed->s->sizeof_sym)
2171         goto fail;
2172
2173       if (hdr->sh_info * hdr->sh_entsize > hdr->sh_size)
2174         {
2175           if (hdr->sh_size != 0)
2176             goto fail;
2177           /* Some assemblers erroneously set sh_info to one with a
2178              zero sh_size.  ld sees this as a global symbol count
2179              of (unsigned) -1.  Fix it here.  */
2180           hdr->sh_info = 0;
2181           goto success;
2182         }
2183
2184       /* PR 18854: A binary might contain more than one symbol table.
2185          Unusual, but possible.  Warn, but continue.  */
2186       if (elf_onesymtab (abfd) != 0)
2187         {
2188           _bfd_error_handler
2189             /* xgettext:c-format */
2190             (_("%pB: warning: multiple symbol tables detected"
2191                " - ignoring the table in section %u"),
2192              abfd, shindex);
2193           goto success;
2194         }
2195       elf_onesymtab (abfd) = shindex;
2196       elf_symtab_hdr (abfd) = *hdr;
2197       elf_elfsections (abfd)[shindex] = hdr = & elf_symtab_hdr (abfd);
2198       abfd->flags |= HAS_SYMS;
2199
2200       /* Sometimes a shared object will map in the symbol table.  If
2201          SHF_ALLOC is set, and this is a shared object, then we also
2202          treat this section as a BFD section.  We can not base the
2203          decision purely on SHF_ALLOC, because that flag is sometimes
2204          set in a relocatable object file, which would confuse the
2205          linker.  */
2206       if ((hdr->sh_flags & SHF_ALLOC) != 0
2207           && (abfd->flags & DYNAMIC) != 0
2208           && ! _bfd_elf_make_section_from_shdr (abfd, hdr, name,
2209                                                 shindex))
2210         goto fail;
2211
2212       /* Go looking for SHT_SYMTAB_SHNDX too, since if there is one we
2213          can't read symbols without that section loaded as well.  It
2214          is most likely specified by the next section header.  */
2215       {
2216         elf_section_list * entry;
2217         unsigned int i, num_sec;
2218
2219         for (entry = elf_symtab_shndx_list (abfd); entry != NULL; entry = entry->next)
2220           if (entry->hdr.sh_link == shindex)
2221             goto success;
2222
2223         num_sec = elf_numsections (abfd);
2224         for (i = shindex + 1; i < num_sec; i++)
2225           {
2226             Elf_Internal_Shdr *hdr2 = elf_elfsections (abfd)[i];
2227
2228             if (hdr2->sh_type == SHT_SYMTAB_SHNDX
2229                 && hdr2->sh_link == shindex)
2230               break;
2231           }
2232
2233         if (i == num_sec)
2234           for (i = 1; i < shindex; i++)
2235             {
2236               Elf_Internal_Shdr *hdr2 = elf_elfsections (abfd)[i];
2237
2238               if (hdr2->sh_type == SHT_SYMTAB_SHNDX
2239                   && hdr2->sh_link == shindex)
2240                 break;
2241             }
2242
2243         if (i != shindex)
2244           ret = bfd_section_from_shdr (abfd, i);
2245         /* else FIXME: we have failed to find the symbol table - should we issue an error ? */
2246         goto success;
2247       }
2248
2249     case SHT_DYNSYM:            /* A dynamic symbol table.  */
2250       if (elf_dynsymtab (abfd) == shindex)
2251         goto success;
2252
2253       if (hdr->sh_entsize != bed->s->sizeof_sym)
2254         goto fail;
2255
2256       if (hdr->sh_info * hdr->sh_entsize > hdr->sh_size)
2257         {
2258           if (hdr->sh_size != 0)
2259             goto fail;
2260
2261           /* Some linkers erroneously set sh_info to one with a
2262              zero sh_size.  ld sees this as a global symbol count
2263              of (unsigned) -1.  Fix it here.  */
2264           hdr->sh_info = 0;
2265           goto success;
2266         }
2267
2268       /* PR 18854: A binary might contain more than one dynamic symbol table.
2269          Unusual, but possible.  Warn, but continue.  */
2270       if (elf_dynsymtab (abfd) != 0)
2271         {
2272           _bfd_error_handler
2273             /* xgettext:c-format */
2274             (_("%pB: warning: multiple dynamic symbol tables detected"
2275                " - ignoring the table in section %u"),
2276              abfd, shindex);
2277           goto success;
2278         }
2279       elf_dynsymtab (abfd) = shindex;
2280       elf_tdata (abfd)->dynsymtab_hdr = *hdr;
2281       elf_elfsections (abfd)[shindex] = hdr = &elf_tdata (abfd)->dynsymtab_hdr;
2282       abfd->flags |= HAS_SYMS;
2283
2284       /* Besides being a symbol table, we also treat this as a regular
2285          section, so that objcopy can handle it.  */
2286       ret = _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
2287       goto success;
2288
2289     case SHT_SYMTAB_SHNDX:      /* Symbol section indices when >64k sections.  */
2290       {
2291         elf_section_list * entry;
2292
2293         for (entry = elf_symtab_shndx_list (abfd); entry != NULL; entry = entry->next)
2294           if (entry->ndx == shindex)
2295             goto success;
2296
2297         entry = bfd_alloc (abfd, sizeof (*entry));
2298         if (entry == NULL)
2299           goto fail;
2300         entry->ndx = shindex;
2301         entry->hdr = * hdr;
2302         entry->next = elf_symtab_shndx_list (abfd);
2303         elf_symtab_shndx_list (abfd) = entry;
2304         elf_elfsections (abfd)[shindex] = & entry->hdr;
2305         goto success;
2306       }
2307
2308     case SHT_STRTAB:            /* A string table.  */
2309       if (hdr->bfd_section != NULL)
2310         goto success;
2311
2312       if (ehdr->e_shstrndx == shindex)
2313         {
2314           elf_tdata (abfd)->shstrtab_hdr = *hdr;
2315           elf_elfsections (abfd)[shindex] = &elf_tdata (abfd)->shstrtab_hdr;
2316           goto success;
2317         }
2318
2319       if (elf_elfsections (abfd)[elf_onesymtab (abfd)]->sh_link == shindex)
2320         {
2321         symtab_strtab:
2322           elf_tdata (abfd)->strtab_hdr = *hdr;
2323           elf_elfsections (abfd)[shindex] = &elf_tdata (abfd)->strtab_hdr;
2324           goto success;
2325         }
2326
2327       if (elf_elfsections (abfd)[elf_dynsymtab (abfd)]->sh_link == shindex)
2328         {
2329         dynsymtab_strtab:
2330           elf_tdata (abfd)->dynstrtab_hdr = *hdr;
2331           hdr = &elf_tdata (abfd)->dynstrtab_hdr;
2332           elf_elfsections (abfd)[shindex] = hdr;
2333           /* We also treat this as a regular section, so that objcopy
2334              can handle it.  */
2335           ret = _bfd_elf_make_section_from_shdr (abfd, hdr, name,
2336                                                  shindex);
2337           goto success;
2338         }
2339
2340       /* If the string table isn't one of the above, then treat it as a
2341          regular section.  We need to scan all the headers to be sure,
2342          just in case this strtab section appeared before the above.  */
2343       if (elf_onesymtab (abfd) == 0 || elf_dynsymtab (abfd) == 0)
2344         {
2345           unsigned int i, num_sec;
2346
2347           num_sec = elf_numsections (abfd);
2348           for (i = 1; i < num_sec; i++)
2349             {
2350               Elf_Internal_Shdr *hdr2 = elf_elfsections (abfd)[i];
2351               if (hdr2->sh_link == shindex)
2352                 {
2353                   /* Prevent endless recursion on broken objects.  */
2354                   if (i == shindex)
2355                     goto fail;
2356                   if (! bfd_section_from_shdr (abfd, i))
2357                     goto fail;
2358                   if (elf_onesymtab (abfd) == i)
2359                     goto symtab_strtab;
2360                   if (elf_dynsymtab (abfd) == i)
2361                     goto dynsymtab_strtab;
2362                 }
2363             }
2364         }
2365       ret = _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
2366       goto success;
2367
2368     case SHT_REL:
2369     case SHT_RELA:
2370       /* *These* do a lot of work -- but build no sections!  */
2371       {
2372         asection *target_sect;
2373         Elf_Internal_Shdr *hdr2, **p_hdr;
2374         unsigned int num_sec = elf_numsections (abfd);
2375         struct bfd_elf_section_data *esdt;
2376
2377         if (hdr->sh_entsize
2378             != (bfd_size_type) (hdr->sh_type == SHT_REL
2379                                 ? bed->s->sizeof_rel : bed->s->sizeof_rela))
2380           goto fail;
2381
2382         /* Check for a bogus link to avoid crashing.  */
2383         if (hdr->sh_link >= num_sec)
2384           {
2385             _bfd_error_handler
2386               /* xgettext:c-format */
2387               (_("%pB: invalid link %u for reloc section %s (index %u)"),
2388                abfd, hdr->sh_link, name, shindex);
2389             ret = _bfd_elf_make_section_from_shdr (abfd, hdr, name,
2390                                                    shindex);
2391             goto success;
2392           }
2393
2394         /* For some incomprehensible reason Oracle distributes
2395            libraries for Solaris in which some of the objects have
2396            bogus sh_link fields.  It would be nice if we could just
2397            reject them, but, unfortunately, some people need to use
2398            them.  We scan through the section headers; if we find only
2399            one suitable symbol table, we clobber the sh_link to point
2400            to it.  I hope this doesn't break anything.
2401
2402            Don't do it on executable nor shared library.  */
2403         if ((abfd->flags & (DYNAMIC | EXEC_P)) == 0
2404             && elf_elfsections (abfd)[hdr->sh_link]->sh_type != SHT_SYMTAB
2405             && elf_elfsections (abfd)[hdr->sh_link]->sh_type != SHT_DYNSYM)
2406           {
2407             unsigned int scan;
2408             int found;
2409
2410             found = 0;
2411             for (scan = 1; scan < num_sec; scan++)
2412               {
2413                 if (elf_elfsections (abfd)[scan]->sh_type == SHT_SYMTAB
2414                     || elf_elfsections (abfd)[scan]->sh_type == SHT_DYNSYM)
2415                   {
2416                     if (found != 0)
2417                       {
2418                         found = 0;
2419                         break;
2420                       }
2421                     found = scan;
2422                   }
2423               }
2424             if (found != 0)
2425               hdr->sh_link = found;
2426           }
2427
2428         /* Get the symbol table.  */
2429         if ((elf_elfsections (abfd)[hdr->sh_link]->sh_type == SHT_SYMTAB
2430              || elf_elfsections (abfd)[hdr->sh_link]->sh_type == SHT_DYNSYM)
2431             && ! bfd_section_from_shdr (abfd, hdr->sh_link))
2432           goto fail;
2433
2434         /* If this is an alloc section in an executable or shared
2435            library, or the reloc section does not use the main symbol
2436            table we don't treat it as a reloc section.  BFD can't
2437            adequately represent such a section, so at least for now,
2438            we don't try.  We just present it as a normal section.  We
2439            also can't use it as a reloc section if it points to the
2440            null section, an invalid section, another reloc section, or
2441            its sh_link points to the null section.  */
2442         if (((abfd->flags & (DYNAMIC | EXEC_P)) != 0
2443              && (hdr->sh_flags & SHF_ALLOC) != 0)
2444             || hdr->sh_link == SHN_UNDEF
2445             || hdr->sh_link != elf_onesymtab (abfd)
2446             || hdr->sh_info == SHN_UNDEF
2447             || hdr->sh_info >= num_sec
2448             || elf_elfsections (abfd)[hdr->sh_info]->sh_type == SHT_REL
2449             || elf_elfsections (abfd)[hdr->sh_info]->sh_type == SHT_RELA)
2450           {
2451             ret = _bfd_elf_make_section_from_shdr (abfd, hdr, name,
2452                                                    shindex);
2453             goto success;
2454           }
2455
2456         if (! bfd_section_from_shdr (abfd, hdr->sh_info))
2457           goto fail;
2458
2459         target_sect = bfd_section_from_elf_index (abfd, hdr->sh_info);
2460         if (target_sect == NULL)
2461           goto fail;
2462
2463         esdt = elf_section_data (target_sect);
2464         if (hdr->sh_type == SHT_RELA)
2465           p_hdr = &esdt->rela.hdr;
2466         else
2467           p_hdr = &esdt->rel.hdr;
2468
2469         /* PR 17512: file: 0b4f81b7.
2470            Also see PR 24456, for a file which deliberately has two reloc
2471            sections.  */
2472         if (*p_hdr != NULL)
2473           {
2474             if (!bed->init_secondary_reloc_section (abfd, hdr, name, shindex))
2475               {
2476                 _bfd_error_handler
2477                   /* xgettext:c-format */
2478                   (_("%pB: warning: secondary relocation section '%s' "
2479                      "for section %pA found - ignoring"),
2480                    abfd, name, target_sect);
2481               }
2482             goto success;
2483           }
2484
2485         hdr2 = (Elf_Internal_Shdr *) bfd_alloc (abfd, sizeof (*hdr2));
2486         if (hdr2 == NULL)
2487           goto fail;
2488         *hdr2 = *hdr;
2489         *p_hdr = hdr2;
2490         elf_elfsections (abfd)[shindex] = hdr2;
2491         target_sect->reloc_count += (NUM_SHDR_ENTRIES (hdr)
2492                                      * bed->s->int_rels_per_ext_rel);
2493         target_sect->flags |= SEC_RELOC;
2494         target_sect->relocation = NULL;
2495         target_sect->rel_filepos = hdr->sh_offset;
2496         /* In the section to which the relocations apply, mark whether
2497            its relocations are of the REL or RELA variety.  */
2498         if (hdr->sh_size != 0)
2499           {
2500             if (hdr->sh_type == SHT_RELA)
2501               target_sect->use_rela_p = 1;
2502           }
2503         abfd->flags |= HAS_RELOC;
2504         goto success;
2505       }
2506
2507     case SHT_GNU_verdef:
2508       elf_dynverdef (abfd) = shindex;
2509       elf_tdata (abfd)->dynverdef_hdr = *hdr;
2510       ret = _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
2511       goto success;
2512
2513     case SHT_GNU_versym:
2514       if (hdr->sh_entsize != sizeof (Elf_External_Versym))
2515         goto fail;
2516
2517       elf_dynversym (abfd) = shindex;
2518       elf_tdata (abfd)->dynversym_hdr = *hdr;
2519       ret = _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
2520       goto success;
2521
2522     case SHT_GNU_verneed:
2523       elf_dynverref (abfd) = shindex;
2524       elf_tdata (abfd)->dynverref_hdr = *hdr;
2525       ret = _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
2526       goto success;
2527
2528     case SHT_SHLIB:
2529       goto success;
2530
2531     case SHT_GROUP:
2532       if (! IS_VALID_GROUP_SECTION_HEADER (hdr, GRP_ENTRY_SIZE))
2533         goto fail;
2534
2535       if (!_bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex))
2536         goto fail;
2537
2538       goto success;
2539
2540     default:
2541       /* Possibly an attributes section.  */
2542       if (hdr->sh_type == SHT_GNU_ATTRIBUTES
2543           || hdr->sh_type == bed->obj_attrs_section_type)
2544         {
2545           if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex))
2546             goto fail;
2547           _bfd_elf_parse_attributes (abfd, hdr);
2548           goto success;
2549         }
2550
2551       /* Check for any processor-specific section types.  */
2552       if (bed->elf_backend_section_from_shdr (abfd, hdr, name, shindex))
2553         goto success;
2554
2555       if (hdr->sh_type >= SHT_LOUSER && hdr->sh_type <= SHT_HIUSER)
2556         {
2557           if ((hdr->sh_flags & SHF_ALLOC) != 0)
2558             /* FIXME: How to properly handle allocated section reserved
2559                for applications?  */
2560             _bfd_error_handler
2561               /* xgettext:c-format */
2562               (_("%pB: unknown type [%#x] section `%s'"),
2563                abfd, hdr->sh_type, name);
2564           else
2565             {
2566               /* Allow sections reserved for applications.  */
2567               ret = _bfd_elf_make_section_from_shdr (abfd, hdr, name,
2568                                                      shindex);
2569               goto success;
2570             }
2571         }
2572       else if (hdr->sh_type >= SHT_LOPROC
2573                && hdr->sh_type <= SHT_HIPROC)
2574         /* FIXME: We should handle this section.  */
2575         _bfd_error_handler
2576           /* xgettext:c-format */
2577           (_("%pB: unknown type [%#x] section `%s'"),
2578            abfd, hdr->sh_type, name);
2579       else if (hdr->sh_type >= SHT_LOOS && hdr->sh_type <= SHT_HIOS)
2580         {
2581           /* Unrecognised OS-specific sections.  */
2582           if ((hdr->sh_flags & SHF_OS_NONCONFORMING) != 0)
2583             /* SHF_OS_NONCONFORMING indicates that special knowledge is
2584                required to correctly process the section and the file should
2585                be rejected with an error message.  */
2586             _bfd_error_handler
2587               /* xgettext:c-format */
2588               (_("%pB: unknown type [%#x] section `%s'"),
2589                abfd, hdr->sh_type, name);
2590           else
2591             {
2592               /* Otherwise it should be processed.  */
2593               ret = _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
2594               goto success;
2595             }
2596         }
2597       else
2598         /* FIXME: We should handle this section.  */
2599         _bfd_error_handler
2600           /* xgettext:c-format */
2601           (_("%pB: unknown type [%#x] section `%s'"),
2602            abfd, hdr->sh_type, name);
2603
2604       goto fail;
2605     }
2606
2607  fail:
2608   ret = FALSE;
2609  success:
2610   if (sections_being_created && sections_being_created_abfd == abfd)
2611     sections_being_created [shindex] = FALSE;
2612   if (-- nesting == 0)
2613     {
2614       free (sections_being_created);
2615       sections_being_created = NULL;
2616       sections_being_created_abfd = NULL;
2617     }
2618   return ret;
2619 }
2620
2621 /* Return the local symbol specified by ABFD, R_SYMNDX.  */
2622
2623 Elf_Internal_Sym *
2624 bfd_sym_from_r_symndx (struct sym_cache *cache,
2625                        bfd *abfd,
2626                        unsigned long r_symndx)
2627 {
2628   unsigned int ent = r_symndx % LOCAL_SYM_CACHE_SIZE;
2629
2630   if (cache->abfd != abfd || cache->indx[ent] != r_symndx)
2631     {
2632       Elf_Internal_Shdr *symtab_hdr;
2633       unsigned char esym[sizeof (Elf64_External_Sym)];
2634       Elf_External_Sym_Shndx eshndx;
2635
2636       symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
2637       if (bfd_elf_get_elf_syms (abfd, symtab_hdr, 1, r_symndx,
2638                                 &cache->sym[ent], esym, &eshndx) == NULL)
2639         return NULL;
2640
2641       if (cache->abfd != abfd)
2642         {
2643           memset (cache->indx, -1, sizeof (cache->indx));
2644           cache->abfd = abfd;
2645         }
2646       cache->indx[ent] = r_symndx;
2647     }
2648
2649   return &cache->sym[ent];
2650 }
2651
2652 /* Given an ELF section number, retrieve the corresponding BFD
2653    section.  */
2654
2655 asection *
2656 bfd_section_from_elf_index (bfd *abfd, unsigned int sec_index)
2657 {
2658   if (sec_index >= elf_numsections (abfd))
2659     return NULL;
2660   return elf_elfsections (abfd)[sec_index]->bfd_section;
2661 }
2662
2663 static const struct bfd_elf_special_section special_sections_b[] =
2664 {
2665   { STRING_COMMA_LEN (".bss"), -2, SHT_NOBITS,   SHF_ALLOC + SHF_WRITE },
2666   { NULL,                   0,  0, 0,            0 }
2667 };
2668
2669 static const struct bfd_elf_special_section special_sections_c[] =
2670 {
2671   { STRING_COMMA_LEN (".comment"), 0, SHT_PROGBITS, 0 },
2672   { STRING_COMMA_LEN (".ctf"),  0, SHT_PROGBITS,    0 },
2673   { NULL,                       0, 0, 0,            0 }
2674 };
2675
2676 static const struct bfd_elf_special_section special_sections_d[] =
2677 {
2678   { STRING_COMMA_LEN (".data"),         -2, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
2679   { STRING_COMMA_LEN (".data1"),         0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
2680   /* There are more DWARF sections than these, but they needn't be added here
2681      unless you have to cope with broken compilers that don't emit section
2682      attributes or you want to help the user writing assembler.  */
2683   { STRING_COMMA_LEN (".debug"),         0, SHT_PROGBITS, 0 },
2684   { STRING_COMMA_LEN (".debug_line"),    0, SHT_PROGBITS, 0 },
2685   { STRING_COMMA_LEN (".debug_info"),    0, SHT_PROGBITS, 0 },
2686   { STRING_COMMA_LEN (".debug_abbrev"),  0, SHT_PROGBITS, 0 },
2687   { STRING_COMMA_LEN (".debug_aranges"), 0, SHT_PROGBITS, 0 },
2688   { STRING_COMMA_LEN (".dynamic"),       0, SHT_DYNAMIC,  SHF_ALLOC },
2689   { STRING_COMMA_LEN (".dynstr"),        0, SHT_STRTAB,   SHF_ALLOC },
2690   { STRING_COMMA_LEN (".dynsym"),        0, SHT_DYNSYM,   SHF_ALLOC },
2691   { NULL,                      0,        0, 0,            0 }
2692 };
2693
2694 static const struct bfd_elf_special_section special_sections_f[] =
2695 {
2696   { STRING_COMMA_LEN (".fini"),        0, SHT_PROGBITS,   SHF_ALLOC + SHF_EXECINSTR },
2697   { STRING_COMMA_LEN (".fini_array"), -2, SHT_FINI_ARRAY, SHF_ALLOC + SHF_WRITE },
2698   { NULL,                          0 , 0, 0,              0 }
2699 };
2700
2701 static const struct bfd_elf_special_section special_sections_g[] =
2702 {
2703   { STRING_COMMA_LEN (".gnu.linkonce.b"), -2, SHT_NOBITS,      SHF_ALLOC + SHF_WRITE },
2704   { STRING_COMMA_LEN (".gnu.lto_"),       -1, SHT_PROGBITS,    SHF_EXCLUDE },
2705   { STRING_COMMA_LEN (".got"),             0, SHT_PROGBITS,    SHF_ALLOC + SHF_WRITE },
2706   { STRING_COMMA_LEN (".gnu.version"),     0, SHT_GNU_versym,  0 },
2707   { STRING_COMMA_LEN (".gnu.version_d"),   0, SHT_GNU_verdef,  0 },
2708   { STRING_COMMA_LEN (".gnu.version_r"),   0, SHT_GNU_verneed, 0 },
2709   { STRING_COMMA_LEN (".gnu.liblist"),     0, SHT_GNU_LIBLIST, SHF_ALLOC },
2710   { STRING_COMMA_LEN (".gnu.conflict"),    0, SHT_RELA,        SHF_ALLOC },
2711   { STRING_COMMA_LEN (".gnu.hash"),        0, SHT_GNU_HASH,    SHF_ALLOC },
2712   { NULL,                        0,        0, 0,               0 }
2713 };
2714
2715 static const struct bfd_elf_special_section special_sections_h[] =
2716 {
2717   { STRING_COMMA_LEN (".hash"), 0, SHT_HASH,     SHF_ALLOC },
2718   { NULL,                    0, 0, 0,            0 }
2719 };
2720
2721 static const struct bfd_elf_special_section special_sections_i[] =
2722 {
2723   { STRING_COMMA_LEN (".init"),        0, SHT_PROGBITS,   SHF_ALLOC + SHF_EXECINSTR },
2724   { STRING_COMMA_LEN (".init_array"), -2, SHT_INIT_ARRAY, SHF_ALLOC + SHF_WRITE },
2725   { STRING_COMMA_LEN (".interp"),      0, SHT_PROGBITS,   0 },
2726   { NULL,                      0,      0, 0,              0 }
2727 };
2728
2729 static const struct bfd_elf_special_section special_sections_l[] =
2730 {
2731   { STRING_COMMA_LEN (".line"), 0, SHT_PROGBITS, 0 },
2732   { NULL,                    0, 0, 0,            0 }
2733 };
2734
2735 static const struct bfd_elf_special_section special_sections_n[] =
2736 {
2737   { STRING_COMMA_LEN (".note.GNU-stack"), 0, SHT_PROGBITS, 0 },
2738   { STRING_COMMA_LEN (".note"),          -1, SHT_NOTE,     0 },
2739   { NULL,                    0,           0, 0,            0 }
2740 };
2741
2742 static const struct bfd_elf_special_section special_sections_p[] =
2743 {
2744   { STRING_COMMA_LEN (".preinit_array"), -2, SHT_PREINIT_ARRAY, SHF_ALLOC + SHF_WRITE },
2745   { STRING_COMMA_LEN (".plt"),            0, SHT_PROGBITS,      SHF_ALLOC + SHF_EXECINSTR },
2746   { NULL,                   0,            0, 0,                 0 }
2747 };
2748
2749 static const struct bfd_elf_special_section special_sections_r[] =
2750 {
2751   { STRING_COMMA_LEN (".rodata"), -2, SHT_PROGBITS, SHF_ALLOC },
2752   { STRING_COMMA_LEN (".rodata1"), 0, SHT_PROGBITS, SHF_ALLOC },
2753   { STRING_COMMA_LEN (".rela"),   -1, SHT_RELA,     0 },
2754   { STRING_COMMA_LEN (".rel"),    -1, SHT_REL,      0 },
2755   { NULL,                   0,     0, 0,            0 }
2756 };
2757
2758 static const struct bfd_elf_special_section special_sections_s[] =
2759 {
2760   { STRING_COMMA_LEN (".shstrtab"), 0, SHT_STRTAB, 0 },
2761   { STRING_COMMA_LEN (".strtab"),   0, SHT_STRTAB, 0 },
2762   { STRING_COMMA_LEN (".symtab"),   0, SHT_SYMTAB, 0 },
2763   /* See struct bfd_elf_special_section declaration for the semantics of
2764      this special case where .prefix_length != strlen (.prefix).  */
2765   { ".stabstr",                 5,  3, SHT_STRTAB, 0 },
2766   { NULL,                       0,  0, 0,          0 }
2767 };
2768
2769 static const struct bfd_elf_special_section special_sections_t[] =
2770 {
2771   { STRING_COMMA_LEN (".text"),  -2, SHT_PROGBITS, SHF_ALLOC + SHF_EXECINSTR },
2772   { STRING_COMMA_LEN (".tbss"),  -2, SHT_NOBITS,   SHF_ALLOC + SHF_WRITE + SHF_TLS },
2773   { STRING_COMMA_LEN (".tdata"), -2, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE + SHF_TLS },
2774   { NULL,                     0,  0, 0,            0 }
2775 };
2776
2777 static const struct bfd_elf_special_section special_sections_z[] =
2778 {
2779   { STRING_COMMA_LEN (".zdebug_line"),    0, SHT_PROGBITS, 0 },
2780   { STRING_COMMA_LEN (".zdebug_info"),    0, SHT_PROGBITS, 0 },
2781   { STRING_COMMA_LEN (".zdebug_abbrev"),  0, SHT_PROGBITS, 0 },
2782   { STRING_COMMA_LEN (".zdebug_aranges"), 0, SHT_PROGBITS, 0 },
2783   { NULL,                     0,  0, 0,            0 }
2784 };
2785
2786 static const struct bfd_elf_special_section * const special_sections[] =
2787 {
2788   special_sections_b,           /* 'b' */
2789   special_sections_c,           /* 'c' */
2790   special_sections_d,           /* 'd' */
2791   NULL,                         /* 'e' */
2792   special_sections_f,           /* 'f' */
2793   special_sections_g,           /* 'g' */
2794   special_sections_h,           /* 'h' */
2795   special_sections_i,           /* 'i' */
2796   NULL,                         /* 'j' */
2797   NULL,                         /* 'k' */
2798   special_sections_l,           /* 'l' */
2799   NULL,                         /* 'm' */
2800   special_sections_n,           /* 'n' */
2801   NULL,                         /* 'o' */
2802   special_sections_p,           /* 'p' */
2803   NULL,                         /* 'q' */
2804   special_sections_r,           /* 'r' */
2805   special_sections_s,           /* 's' */
2806   special_sections_t,           /* 't' */
2807   NULL,                         /* 'u' */
2808   NULL,                         /* 'v' */
2809   NULL,                         /* 'w' */
2810   NULL,                         /* 'x' */
2811   NULL,                         /* 'y' */
2812   special_sections_z            /* 'z' */
2813 };
2814
2815 const struct bfd_elf_special_section *
2816 _bfd_elf_get_special_section (const char *name,
2817                               const struct bfd_elf_special_section *spec,
2818                               unsigned int rela)
2819 {
2820   int i;
2821   int len;
2822
2823   len = strlen (name);
2824
2825   for (i = 0; spec[i].prefix != NULL; i++)
2826     {
2827       int suffix_len;
2828       int prefix_len = spec[i].prefix_length;
2829
2830       if (len < prefix_len)
2831         continue;
2832       if (memcmp (name, spec[i].prefix, prefix_len) != 0)
2833         continue;
2834
2835       suffix_len = spec[i].suffix_length;
2836       if (suffix_len <= 0)
2837         {
2838           if (name[prefix_len] != 0)
2839             {
2840               if (suffix_len == 0)
2841                 continue;
2842               if (name[prefix_len] != '.'
2843                   && (suffix_len == -2
2844                       || (rela && spec[i].type == SHT_REL)))
2845                 continue;
2846             }
2847         }
2848       else
2849         {
2850           if (len < prefix_len + suffix_len)
2851             continue;
2852           if (memcmp (name + len - suffix_len,
2853                       spec[i].prefix + prefix_len,
2854                       suffix_len) != 0)
2855             continue;
2856         }
2857       return &spec[i];
2858     }
2859
2860   return NULL;
2861 }
2862
2863 const struct bfd_elf_special_section *
2864 _bfd_elf_get_sec_type_attr (bfd *abfd, asection *sec)
2865 {
2866   int i;
2867   const struct bfd_elf_special_section *spec;
2868   const struct elf_backend_data *bed;
2869
2870   /* See if this is one of the special sections.  */
2871   if (sec->name == NULL)
2872     return NULL;
2873
2874   bed = get_elf_backend_data (abfd);
2875   spec = bed->special_sections;
2876   if (spec)
2877     {
2878       spec = _bfd_elf_get_special_section (sec->name,
2879                                            bed->special_sections,
2880                                            sec->use_rela_p);
2881       if (spec != NULL)
2882         return spec;
2883     }
2884
2885   if (sec->name[0] != '.')
2886     return NULL;
2887
2888   i = sec->name[1] - 'b';
2889   if (i < 0 || i > 'z' - 'b')
2890     return NULL;
2891
2892   spec = special_sections[i];
2893
2894   if (spec == NULL)
2895     return NULL;
2896
2897   return _bfd_elf_get_special_section (sec->name, spec, sec->use_rela_p);
2898 }
2899
2900 bfd_boolean
2901 _bfd_elf_new_section_hook (bfd *abfd, asection *sec)
2902 {
2903   struct bfd_elf_section_data *sdata;
2904   const struct elf_backend_data *bed;
2905   const struct bfd_elf_special_section *ssect;
2906
2907   sdata = (struct bfd_elf_section_data *) sec->used_by_bfd;
2908   if (sdata == NULL)
2909     {
2910       sdata = (struct bfd_elf_section_data *) bfd_zalloc (abfd,
2911                                                           sizeof (*sdata));
2912       if (sdata == NULL)
2913         return FALSE;
2914       sec->used_by_bfd = sdata;
2915     }
2916
2917   /* Indicate whether or not this section should use RELA relocations.  */
2918   bed = get_elf_backend_data (abfd);
2919   sec->use_rela_p = bed->default_use_rela_p;
2920
2921   /* Set up ELF section type and flags for newly created sections, if
2922      there is an ABI mandated section.  */
2923   ssect = (*bed->get_sec_type_attr) (abfd, sec);
2924   if (ssect != NULL)
2925     {
2926       elf_section_type (sec) = ssect->type;
2927       elf_section_flags (sec) = ssect->attr;
2928     }
2929
2930   return _bfd_generic_new_section_hook (abfd, sec);
2931 }
2932
2933 /* Create a new bfd section from an ELF program header.
2934
2935    Since program segments have no names, we generate a synthetic name
2936    of the form segment<NUM>, where NUM is generally the index in the
2937    program header table.  For segments that are split (see below) we
2938    generate the names segment<NUM>a and segment<NUM>b.
2939
2940    Note that some program segments may have a file size that is different than
2941    (less than) the memory size.  All this means is that at execution the
2942    system must allocate the amount of memory specified by the memory size,
2943    but only initialize it with the first "file size" bytes read from the
2944    file.  This would occur for example, with program segments consisting
2945    of combined data+bss.
2946
2947    To handle the above situation, this routine generates TWO bfd sections
2948    for the single program segment.  The first has the length specified by
2949    the file size of the segment, and the second has the length specified
2950    by the difference between the two sizes.  In effect, the segment is split
2951    into its initialized and uninitialized parts.
2952
2953  */
2954
2955 bfd_boolean
2956 _bfd_elf_make_section_from_phdr (bfd *abfd,
2957                                  Elf_Internal_Phdr *hdr,
2958                                  int hdr_index,
2959                                  const char *type_name)
2960 {
2961   asection *newsect;
2962   char *name;
2963   char namebuf[64];
2964   size_t len;
2965   int split;
2966   unsigned int opb = bfd_octets_per_byte (abfd, NULL);
2967
2968   split = ((hdr->p_memsz > 0)
2969             && (hdr->p_filesz > 0)
2970             && (hdr->p_memsz > hdr->p_filesz));
2971
2972   if (hdr->p_filesz > 0)
2973     {
2974       sprintf (namebuf, "%s%d%s", type_name, hdr_index, split ? "a" : "");
2975       len = strlen (namebuf) + 1;
2976       name = (char *) bfd_alloc (abfd, len);
2977       if (!name)
2978         return FALSE;
2979       memcpy (name, namebuf, len);
2980       newsect = bfd_make_section (abfd, name);
2981       if (newsect == NULL)
2982         return FALSE;
2983       newsect->vma = hdr->p_vaddr / opb;
2984       newsect->lma = hdr->p_paddr / opb;
2985       newsect->size = hdr->p_filesz;
2986       newsect->filepos = hdr->p_offset;
2987       newsect->flags |= SEC_HAS_CONTENTS;
2988       newsect->alignment_power = bfd_log2 (hdr->p_align);
2989       if (hdr->p_type == PT_LOAD)
2990         {
2991           newsect->flags |= SEC_ALLOC;
2992           newsect->flags |= SEC_LOAD;
2993           if (hdr->p_flags & PF_X)
2994             {
2995               /* FIXME: all we known is that it has execute PERMISSION,
2996                  may be data.  */
2997               newsect->flags |= SEC_CODE;
2998             }
2999         }
3000       if (!(hdr->p_flags & PF_W))
3001         {
3002           newsect->flags |= SEC_READONLY;
3003         }
3004     }
3005
3006   if (hdr->p_memsz > hdr->p_filesz)
3007     {
3008       bfd_vma align;
3009
3010       sprintf (namebuf, "%s%d%s", type_name, hdr_index, split ? "b" : "");
3011       len = strlen (namebuf) + 1;
3012       name = (char *) bfd_alloc (abfd, len);
3013       if (!name)
3014         return FALSE;
3015       memcpy (name, namebuf, len);
3016       newsect = bfd_make_section (abfd, name);
3017       if (newsect == NULL)
3018         return FALSE;
3019       newsect->vma = (hdr->p_vaddr + hdr->p_filesz) / opb;
3020       newsect->lma = (hdr->p_paddr + hdr->p_filesz) / opb;
3021       newsect->size = hdr->p_memsz - hdr->p_filesz;
3022       newsect->filepos = hdr->p_offset + hdr->p_filesz;
3023       align = newsect->vma & -newsect->vma;
3024       if (align == 0 || align > hdr->p_align)
3025         align = hdr->p_align;
3026       newsect->alignment_power = bfd_log2 (align);
3027       if (hdr->p_type == PT_LOAD)
3028         {
3029           newsect->flags |= SEC_ALLOC;
3030           if (hdr->p_flags & PF_X)
3031             newsect->flags |= SEC_CODE;
3032         }
3033       if (!(hdr->p_flags & PF_W))
3034         newsect->flags |= SEC_READONLY;
3035     }
3036
3037   return TRUE;
3038 }
3039
3040 static bfd_boolean
3041 _bfd_elf_core_find_build_id (bfd *templ, bfd_vma offset)
3042 {
3043   /* The return value is ignored.  Build-ids are considered optional.  */
3044   if (templ->xvec->flavour == bfd_target_elf_flavour)
3045     return (*get_elf_backend_data (templ)->elf_backend_core_find_build_id)
3046       (templ, offset);
3047   return FALSE;
3048 }
3049
3050 bfd_boolean
3051 bfd_section_from_phdr (bfd *abfd, Elf_Internal_Phdr *hdr, int hdr_index)
3052 {
3053   const struct elf_backend_data *bed;
3054
3055   switch (hdr->p_type)
3056     {
3057     case PT_NULL:
3058       return _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index, "null");
3059
3060     case PT_LOAD:
3061       if (! _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index, "load"))
3062         return FALSE;
3063       if (bfd_get_format (abfd) == bfd_core && abfd->build_id == NULL)
3064         _bfd_elf_core_find_build_id (abfd, hdr->p_offset);
3065       return TRUE;
3066
3067     case PT_DYNAMIC:
3068       return _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index, "dynamic");
3069
3070     case PT_INTERP:
3071       return _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index, "interp");
3072
3073     case PT_NOTE:
3074       if (! _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index, "note"))
3075         return FALSE;
3076       if (! elf_read_notes (abfd, hdr->p_offset, hdr->p_filesz,
3077                             hdr->p_align))
3078         return FALSE;
3079       return TRUE;
3080
3081     case PT_SHLIB:
3082       return _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index, "shlib");
3083
3084     case PT_PHDR:
3085       return _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index, "phdr");
3086
3087     case PT_GNU_EH_FRAME:
3088       return _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index,
3089                                               "eh_frame_hdr");
3090
3091     case PT_GNU_STACK:
3092       return _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index, "stack");
3093
3094     case PT_GNU_RELRO:
3095       return _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index, "relro");
3096
3097     default:
3098       /* Check for any processor-specific program segment types.  */
3099       bed = get_elf_backend_data (abfd);
3100       return bed->elf_backend_section_from_phdr (abfd, hdr, hdr_index, "proc");
3101     }
3102 }
3103
3104 /* Return the REL_HDR for SEC, assuming there is only a single one, either
3105    REL or RELA.  */
3106
3107 Elf_Internal_Shdr *
3108 _bfd_elf_single_rel_hdr (asection *sec)
3109 {
3110   if (elf_section_data (sec)->rel.hdr)
3111     {
3112       BFD_ASSERT (elf_section_data (sec)->rela.hdr == NULL);
3113       return elf_section_data (sec)->rel.hdr;
3114     }
3115   else
3116     return elf_section_data (sec)->rela.hdr;
3117 }
3118
3119 static bfd_boolean
3120 _bfd_elf_set_reloc_sh_name (bfd *abfd,
3121                             Elf_Internal_Shdr *rel_hdr,
3122                             const char *sec_name,
3123                             bfd_boolean use_rela_p)
3124 {
3125   char *name = (char *) bfd_alloc (abfd,
3126                                    sizeof ".rela" + strlen (sec_name));
3127   if (name == NULL)
3128     return FALSE;
3129
3130   sprintf (name, "%s%s", use_rela_p ? ".rela" : ".rel", sec_name);
3131   rel_hdr->sh_name =
3132     (unsigned int) _bfd_elf_strtab_add (elf_shstrtab (abfd), name,
3133                                         FALSE);
3134   if (rel_hdr->sh_name == (unsigned int) -1)
3135     return FALSE;
3136
3137   return TRUE;
3138 }
3139
3140 /* Allocate and initialize a section-header for a new reloc section,
3141    containing relocations against ASECT.  It is stored in RELDATA.  If
3142    USE_RELA_P is TRUE, we use RELA relocations; otherwise, we use REL
3143    relocations.  */
3144
3145 static bfd_boolean
3146 _bfd_elf_init_reloc_shdr (bfd *abfd,
3147                           struct bfd_elf_section_reloc_data *reldata,
3148                           const char *sec_name,
3149                           bfd_boolean use_rela_p,
3150                           bfd_boolean delay_st_name_p)
3151 {
3152   Elf_Internal_Shdr *rel_hdr;
3153   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
3154
3155   BFD_ASSERT (reldata->hdr == NULL);
3156   rel_hdr = bfd_zalloc (abfd, sizeof (*rel_hdr));
3157   reldata->hdr = rel_hdr;
3158
3159   if (delay_st_name_p)
3160     rel_hdr->sh_name = (unsigned int) -1;
3161   else if (!_bfd_elf_set_reloc_sh_name (abfd, rel_hdr, sec_name,
3162                                         use_rela_p))
3163     return FALSE;
3164   rel_hdr->sh_type = use_rela_p ? SHT_RELA : SHT_REL;
3165   rel_hdr->sh_entsize = (use_rela_p
3166                          ? bed->s->sizeof_rela
3167                          : bed->s->sizeof_rel);
3168   rel_hdr->sh_addralign = (bfd_vma) 1 << bed->s->log_file_align;
3169   rel_hdr->sh_flags = 0;
3170   rel_hdr->sh_addr = 0;
3171   rel_hdr->sh_size = 0;
3172   rel_hdr->sh_offset = 0;
3173
3174   return TRUE;
3175 }
3176
3177 /* Return the default section type based on the passed in section flags.  */
3178
3179 int
3180 bfd_elf_get_default_section_type (flagword flags)
3181 {
3182   if ((flags & (SEC_ALLOC | SEC_IS_COMMON)) != 0
3183       && (flags & (SEC_LOAD | SEC_HAS_CONTENTS)) == 0)
3184     return SHT_NOBITS;
3185   return SHT_PROGBITS;
3186 }
3187
3188 struct fake_section_arg
3189 {
3190   struct bfd_link_info *link_info;
3191   bfd_boolean failed;
3192 };
3193
3194 /* Set up an ELF internal section header for a section.  */
3195
3196 static void
3197 elf_fake_sections (bfd *abfd, asection *asect, void *fsarg)
3198 {
3199   struct fake_section_arg *arg = (struct fake_section_arg *)fsarg;
3200   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
3201   struct bfd_elf_section_data *esd = elf_section_data (asect);
3202   Elf_Internal_Shdr *this_hdr;
3203   unsigned int sh_type;
3204   const char *name = asect->name;
3205   bfd_boolean delay_st_name_p = FALSE;
3206   bfd_vma mask;
3207
3208   if (arg->failed)
3209     {
3210       /* We already failed; just get out of the bfd_map_over_sections
3211          loop.  */
3212       return;
3213     }
3214
3215   this_hdr = &esd->this_hdr;
3216
3217   if (arg->link_info)
3218     {
3219       /* ld: compress DWARF debug sections with names: .debug_*.  */
3220       if ((arg->link_info->compress_debug & COMPRESS_DEBUG)
3221           && (asect->flags & SEC_DEBUGGING)
3222           && name[1] == 'd'
3223           && name[6] == '_')
3224         {
3225           /* Set SEC_ELF_COMPRESS to indicate this section should be
3226              compressed.  */
3227           asect->flags |= SEC_ELF_COMPRESS;
3228           /* If this section will be compressed, delay adding section
3229              name to section name section after it is compressed in
3230              _bfd_elf_assign_file_positions_for_non_load.  */
3231           delay_st_name_p = TRUE;
3232         }
3233     }
3234   else if ((asect->flags & SEC_ELF_RENAME))
3235     {
3236       /* objcopy: rename output DWARF debug section.  */
3237       if ((abfd->flags & (BFD_DECOMPRESS | BFD_COMPRESS_GABI)))
3238         {
3239           /* When we decompress or compress with SHF_COMPRESSED,
3240              convert section name from .zdebug_* to .debug_* if
3241              needed.  */
3242           if (name[1] == 'z')
3243             {
3244               char *new_name = convert_zdebug_to_debug (abfd, name);
3245               if (new_name == NULL)
3246                 {
3247                   arg->failed = TRUE;
3248                   return;
3249                 }
3250               name = new_name;
3251             }
3252         }
3253       else if (asect->compress_status == COMPRESS_SECTION_DONE)
3254         {
3255           /* PR binutils/18087: Compression does not always make a
3256              section smaller.  So only rename the section when
3257              compression has actually taken place.  If input section
3258              name is .zdebug_*, we should never compress it again.  */
3259           char *new_name = convert_debug_to_zdebug (abfd, name);
3260           if (new_name == NULL)
3261             {
3262               arg->failed = TRUE;
3263               return;
3264             }
3265           BFD_ASSERT (name[1] != 'z');
3266           name = new_name;
3267         }
3268     }
3269
3270   if (delay_st_name_p)
3271     this_hdr->sh_name = (unsigned int) -1;
3272   else
3273     {
3274       this_hdr->sh_name
3275         = (unsigned int) _bfd_elf_strtab_add (elf_shstrtab (abfd),
3276                                               name, FALSE);
3277       if (this_hdr->sh_name == (unsigned int) -1)
3278         {
3279           arg->failed = TRUE;
3280           return;
3281         }
3282     }
3283
3284   /* Don't clear sh_flags. Assembler may set additional bits.  */
3285
3286   if ((asect->flags & SEC_ALLOC) != 0
3287       || asect->user_set_vma)
3288     this_hdr->sh_addr = asect->vma * bfd_octets_per_byte (abfd, asect);
3289   else
3290     this_hdr->sh_addr = 0;
3291
3292   this_hdr->sh_offset = 0;
3293   this_hdr->sh_size = asect->size;
3294   this_hdr->sh_link = 0;
3295   /* PR 17512: file: 0eb809fe, 8b0535ee.  */
3296   if (asect->alignment_power >= (sizeof (bfd_vma) * 8) - 1)
3297     {
3298       _bfd_error_handler
3299         /* xgettext:c-format */
3300         (_("%pB: error: alignment power %d of section `%pA' is too big"),
3301          abfd, asect->alignment_power, asect);
3302       arg->failed = TRUE;
3303       return;
3304     }
3305   /* Set sh_addralign to the highest power of two given by alignment
3306      consistent with the section VMA.  Linker scripts can force VMA.  */
3307   mask = ((bfd_vma) 1 << asect->alignment_power) | this_hdr->sh_addr;
3308   this_hdr->sh_addralign = mask & -mask;
3309   /* The sh_entsize and sh_info fields may have been set already by
3310      copy_private_section_data.  */
3311
3312   this_hdr->bfd_section = asect;
3313   this_hdr->contents = NULL;
3314
3315   /* If the section type is unspecified, we set it based on
3316      asect->flags.  */
3317   if ((asect->flags & SEC_GROUP) != 0)
3318     sh_type = SHT_GROUP;
3319   else
3320     sh_type = bfd_elf_get_default_section_type (asect->flags);
3321
3322   if (this_hdr->sh_type == SHT_NULL)
3323     this_hdr->sh_type = sh_type;
3324   else if (this_hdr->sh_type == SHT_NOBITS
3325            && sh_type == SHT_PROGBITS
3326            && (asect->flags & SEC_ALLOC) != 0)
3327     {
3328       /* Warn if we are changing a NOBITS section to PROGBITS, but
3329          allow the link to proceed.  This can happen when users link
3330          non-bss input sections to bss output sections, or emit data
3331          to a bss output section via a linker script.  */
3332       _bfd_error_handler
3333         (_("warning: section `%pA' type changed to PROGBITS"), asect);
3334       this_hdr->sh_type = sh_type;
3335     }
3336
3337   switch (this_hdr->sh_type)
3338     {
3339     default:
3340       break;
3341
3342     case SHT_STRTAB:
3343     case SHT_NOTE:
3344     case SHT_NOBITS:
3345     case SHT_PROGBITS:
3346       break;
3347
3348     case SHT_INIT_ARRAY:
3349     case SHT_FINI_ARRAY:
3350     case SHT_PREINIT_ARRAY:
3351       this_hdr->sh_entsize = bed->s->arch_size / 8;
3352       break;
3353
3354     case SHT_HASH:
3355       this_hdr->sh_entsize = bed->s->sizeof_hash_entry;
3356       break;
3357
3358     case SHT_DYNSYM:
3359       this_hdr->sh_entsize = bed->s->sizeof_sym;
3360       break;
3361
3362     case SHT_DYNAMIC:
3363       this_hdr->sh_entsize = bed->s->sizeof_dyn;
3364       break;
3365
3366     case SHT_RELA:
3367       if (get_elf_backend_data (abfd)->may_use_rela_p)
3368         this_hdr->sh_entsize = bed->s->sizeof_rela;
3369       break;
3370
3371      case SHT_REL:
3372       if (get_elf_backend_data (abfd)->may_use_rel_p)
3373         this_hdr->sh_entsize = bed->s->sizeof_rel;
3374       break;
3375
3376      case SHT_GNU_versym:
3377       this_hdr->sh_entsize = sizeof (Elf_External_Versym);
3378       break;
3379
3380      case SHT_GNU_verdef:
3381       this_hdr->sh_entsize = 0;
3382       /* objcopy or strip will copy over sh_info, but may not set
3383          cverdefs.  The linker will set cverdefs, but sh_info will be
3384          zero.  */
3385       if (this_hdr->sh_info == 0)
3386         this_hdr->sh_info = elf_tdata (abfd)->cverdefs;
3387       else
3388         BFD_ASSERT (elf_tdata (abfd)->cverdefs == 0
3389                     || this_hdr->sh_info == elf_tdata (abfd)->cverdefs);
3390       break;
3391
3392     case SHT_GNU_verneed:
3393       this_hdr->sh_entsize = 0;
3394       /* objcopy or strip will copy over sh_info, but may not set
3395          cverrefs.  The linker will set cverrefs, but sh_info will be
3396          zero.  */
3397       if (this_hdr->sh_info == 0)
3398         this_hdr->sh_info = elf_tdata (abfd)->cverrefs;
3399       else
3400         BFD_ASSERT (elf_tdata (abfd)->cverrefs == 0
3401                     || this_hdr->sh_info == elf_tdata (abfd)->cverrefs);
3402       break;
3403
3404     case SHT_GROUP:
3405       this_hdr->sh_entsize = GRP_ENTRY_SIZE;
3406       break;
3407
3408     case SHT_GNU_HASH:
3409       this_hdr->sh_entsize = bed->s->arch_size == 64 ? 0 : 4;
3410       break;
3411     }
3412
3413   if ((asect->flags & SEC_ALLOC) != 0)
3414     this_hdr->sh_flags |= SHF_ALLOC;
3415   if ((asect->flags & SEC_READONLY) == 0)
3416     this_hdr->sh_flags |= SHF_WRITE;
3417   if ((asect->flags & SEC_CODE) != 0)
3418     this_hdr->sh_flags |= SHF_EXECINSTR;
3419   if ((asect->flags & SEC_MERGE) != 0)
3420     {
3421       this_hdr->sh_flags |= SHF_MERGE;
3422       this_hdr->sh_entsize = asect->entsize;
3423     }
3424   if ((asect->flags & SEC_STRINGS) != 0)
3425     this_hdr->sh_flags |= SHF_STRINGS;
3426   if ((asect->flags & SEC_GROUP) == 0 && elf_group_name (asect) != NULL)
3427     this_hdr->sh_flags |= SHF_GROUP;
3428   if ((asect->flags & SEC_THREAD_LOCAL) != 0)
3429     {
3430       this_hdr->sh_flags |= SHF_TLS;
3431       if (asect->size == 0
3432           && (asect->flags & SEC_HAS_CONTENTS) == 0)
3433         {
3434           struct bfd_link_order *o = asect->map_tail.link_order;
3435
3436           this_hdr->sh_size = 0;
3437           if (o != NULL)
3438             {
3439               this_hdr->sh_size = o->offset + o->size;
3440               if (this_hdr->sh_size != 0)
3441                 this_hdr->sh_type = SHT_NOBITS;
3442             }
3443         }
3444     }
3445   if ((asect->flags & (SEC_GROUP | SEC_EXCLUDE)) == SEC_EXCLUDE)
3446     this_hdr->sh_flags |= SHF_EXCLUDE;
3447
3448   /* If the section has relocs, set up a section header for the
3449      SHT_REL[A] section.  If two relocation sections are required for
3450      this section, it is up to the processor-specific back-end to
3451      create the other.  */
3452   if ((asect->flags & SEC_RELOC) != 0)
3453     {
3454       /* When doing a relocatable link, create both REL and RELA sections if
3455          needed.  */
3456       if (arg->link_info
3457           /* Do the normal setup if we wouldn't create any sections here.  */
3458           && esd->rel.count + esd->rela.count > 0
3459           && (bfd_link_relocatable (arg->link_info)
3460               || arg->link_info->emitrelocations))
3461         {
3462           if (esd->rel.count && esd->rel.hdr == NULL
3463               && !_bfd_elf_init_reloc_shdr (abfd, &esd->rel, name,
3464                                             FALSE, delay_st_name_p))
3465             {
3466               arg->failed = TRUE;
3467               return;
3468             }
3469           if (esd->rela.count && esd->rela.hdr == NULL
3470               && !_bfd_elf_init_reloc_shdr (abfd, &esd->rela, name,
3471                                             TRUE, delay_st_name_p))
3472             {
3473               arg->failed = TRUE;
3474               return;
3475             }
3476         }
3477       else if (!_bfd_elf_init_reloc_shdr (abfd,
3478                                           (asect->use_rela_p
3479                                            ? &esd->rela : &esd->rel),
3480                                           name,
3481                                           asect->use_rela_p,
3482                                           delay_st_name_p))
3483         {
3484           arg->failed = TRUE;
3485           return;
3486         }
3487     }
3488
3489   /* Check for processor-specific section types.  */
3490   sh_type = this_hdr->sh_type;
3491   if (bed->elf_backend_fake_sections
3492       && !(*bed->elf_backend_fake_sections) (abfd, this_hdr, asect))
3493     {
3494       arg->failed = TRUE;
3495       return;
3496     }
3497
3498   if (sh_type == SHT_NOBITS && asect->size != 0)
3499     {
3500       /* Don't change the header type from NOBITS if we are being
3501          called for objcopy --only-keep-debug.  */
3502       this_hdr->sh_type = sh_type;
3503     }
3504 }
3505
3506 /* Fill in the contents of a SHT_GROUP section.  Called from
3507    _bfd_elf_compute_section_file_positions for gas, objcopy, and
3508    when ELF targets use the generic linker, ld.  Called for ld -r
3509    from bfd_elf_final_link.  */
3510
3511 void
3512 bfd_elf_set_group_contents (bfd *abfd, asection *sec, void *failedptrarg)
3513 {
3514   bfd_boolean *failedptr = (bfd_boolean *) failedptrarg;
3515   asection *elt, *first;
3516   unsigned char *loc;
3517   bfd_boolean gas;
3518
3519   /* Ignore linker created group section.  See elfNN_ia64_object_p in
3520      elfxx-ia64.c.  */
3521   if ((sec->flags & (SEC_GROUP | SEC_LINKER_CREATED)) != SEC_GROUP
3522       || sec->size == 0
3523       || *failedptr)
3524     return;
3525
3526   if (elf_section_data (sec)->this_hdr.sh_info == 0)
3527     {
3528       unsigned long symindx = 0;
3529
3530       /* elf_group_id will have been set up by objcopy and the
3531          generic linker.  */
3532       if (elf_group_id (sec) != NULL)
3533         symindx = elf_group_id (sec)->udata.i;
3534
3535       if (symindx == 0)
3536         {
3537           /* If called from the assembler, swap_out_syms will have set up
3538              elf_section_syms.
3539              PR 25699: A corrupt input file could contain bogus group info.  */
3540           if (elf_section_syms (abfd) == NULL)
3541             {
3542               *failedptr = TRUE;
3543               return;
3544             }
3545           symindx = elf_section_syms (abfd)[sec->index]->udata.i;
3546         }
3547       elf_section_data (sec)->this_hdr.sh_info = symindx;
3548     }
3549   else if (elf_section_data (sec)->this_hdr.sh_info == (unsigned int) -2)
3550     {
3551       /* The ELF backend linker sets sh_info to -2 when the group
3552          signature symbol is global, and thus the index can't be
3553          set until all local symbols are output.  */
3554       asection *igroup;
3555       struct bfd_elf_section_data *sec_data;
3556       unsigned long symndx;
3557       unsigned long extsymoff;
3558       struct elf_link_hash_entry *h;
3559
3560       /* The point of this little dance to the first SHF_GROUP section
3561          then back to the SHT_GROUP section is that this gets us to
3562          the SHT_GROUP in the input object.  */
3563       igroup = elf_sec_group (elf_next_in_group (sec));
3564       sec_data = elf_section_data (igroup);
3565       symndx = sec_data->this_hdr.sh_info;
3566       extsymoff = 0;
3567       if (!elf_bad_symtab (igroup->owner))
3568         {
3569           Elf_Internal_Shdr *symtab_hdr;
3570
3571           symtab_hdr = &elf_tdata (igroup->owner)->symtab_hdr;
3572           extsymoff = symtab_hdr->sh_info;
3573         }
3574       h = elf_sym_hashes (igroup->owner)[symndx - extsymoff];
3575       while (h->root.type == bfd_link_hash_indirect
3576              || h->root.type == bfd_link_hash_warning)
3577         h = (struct elf_link_hash_entry *) h->root.u.i.link;
3578
3579       elf_section_data (sec)->this_hdr.sh_info = h->indx;
3580     }
3581
3582   /* The contents won't be allocated for "ld -r" or objcopy.  */
3583   gas = TRUE;
3584   if (sec->contents == NULL)
3585     {
3586       gas = FALSE;
3587       sec->contents = (unsigned char *) bfd_alloc (abfd, sec->size);
3588
3589       /* Arrange for the section to be written out.  */
3590       elf_section_data (sec)->this_hdr.contents = sec->contents;
3591       if (sec->contents == NULL)
3592         {
3593           *failedptr = TRUE;
3594           return;
3595         }
3596     }
3597
3598   loc = sec->contents + sec->size;
3599
3600   /* Get the pointer to the first section in the group that gas
3601      squirreled away here.  objcopy arranges for this to be set to the
3602      start of the input section group.  */
3603   first = elt = elf_next_in_group (sec);
3604
3605   /* First element is a flag word.  Rest of section is elf section
3606      indices for all the sections of the group.  Write them backwards
3607      just to keep the group in the same order as given in .section
3608      directives, not that it matters.  */
3609   while (elt != NULL)
3610     {
3611       asection *s;
3612
3613       s = elt;
3614       if (!gas)
3615         s = s->output_section;
3616       if (s != NULL
3617           && !bfd_is_abs_section (s))
3618         {
3619           struct bfd_elf_section_data *elf_sec = elf_section_data (s);
3620           struct bfd_elf_section_data *input_elf_sec = elf_section_data (elt);
3621
3622           if (elf_sec->rel.hdr != NULL
3623               && (gas
3624                   || (input_elf_sec->rel.hdr != NULL
3625                       && input_elf_sec->rel.hdr->sh_flags & SHF_GROUP) != 0))
3626             {
3627               elf_sec->rel.hdr->sh_flags |= SHF_GROUP;
3628               loc -= 4;
3629               H_PUT_32 (abfd, elf_sec->rel.idx, loc);
3630             }
3631           if (elf_sec->rela.hdr != NULL
3632               && (gas
3633                   || (input_elf_sec->rela.hdr != NULL
3634                       && input_elf_sec->rela.hdr->sh_flags & SHF_GROUP) != 0))
3635             {
3636               elf_sec->rela.hdr->sh_flags |= SHF_GROUP;
3637               loc -= 4;
3638               H_PUT_32 (abfd, elf_sec->rela.idx, loc);
3639             }
3640           loc -= 4;
3641           H_PUT_32 (abfd, elf_sec->this_idx, loc);
3642         }
3643       elt = elf_next_in_group (elt);
3644       if (elt == first)
3645         break;
3646     }
3647
3648   loc -= 4;
3649   BFD_ASSERT (loc == sec->contents);
3650
3651   H_PUT_32 (abfd, sec->flags & SEC_LINK_ONCE ? GRP_COMDAT : 0, loc);
3652 }
3653
3654 /* Given NAME, the name of a relocation section stripped of its
3655    .rel/.rela prefix, return the section in ABFD to which the
3656    relocations apply.  */
3657
3658 asection *
3659 _bfd_elf_plt_get_reloc_section (bfd *abfd, const char *name)
3660 {
3661   /* If a target needs .got.plt section, relocations in rela.plt/rel.plt
3662      section likely apply to .got.plt or .got section.  */
3663   if (get_elf_backend_data (abfd)->want_got_plt
3664       && strcmp (name, ".plt") == 0)
3665     {
3666       asection *sec;
3667
3668       name = ".got.plt";
3669       sec = bfd_get_section_by_name (abfd, name);
3670       if (sec != NULL)
3671         return sec;
3672       name = ".got";
3673     }
3674
3675   return bfd_get_section_by_name (abfd, name);
3676 }
3677
3678 /* Return the section to which RELOC_SEC applies.  */
3679
3680 static asection *
3681 elf_get_reloc_section (asection *reloc_sec)
3682 {
3683   const char *name;
3684   unsigned int type;
3685   bfd *abfd;
3686   const struct elf_backend_data *bed;
3687
3688   type = elf_section_data (reloc_sec)->this_hdr.sh_type;
3689   if (type != SHT_REL && type != SHT_RELA)
3690     return NULL;
3691
3692   /* We look up the section the relocs apply to by name.  */
3693   name = reloc_sec->name;
3694   if (strncmp (name, ".rel", 4) != 0)
3695     return NULL;
3696   name += 4;
3697   if (type == SHT_RELA && *name++ != 'a')
3698     return NULL;
3699
3700   abfd = reloc_sec->owner;
3701   bed = get_elf_backend_data (abfd);
3702   return bed->get_reloc_section (abfd, name);
3703 }
3704
3705 /* Assign all ELF section numbers.  The dummy first section is handled here
3706    too.  The link/info pointers for the standard section types are filled
3707    in here too, while we're at it.  LINK_INFO will be 0 when arriving
3708    here for objcopy, and when using the generic ELF linker.  */
3709
3710 static bfd_boolean
3711 assign_section_numbers (bfd *abfd, struct bfd_link_info *link_info)
3712 {
3713   struct elf_obj_tdata *t = elf_tdata (abfd);
3714   asection *sec;
3715   unsigned int section_number;
3716   Elf_Internal_Shdr **i_shdrp;
3717   struct bfd_elf_section_data *d;
3718   bfd_boolean need_symtab;
3719   size_t amt;
3720
3721   section_number = 1;
3722
3723   _bfd_elf_strtab_clear_all_refs (elf_shstrtab (abfd));
3724
3725   /* SHT_GROUP sections are in relocatable files only.  */
3726   if (link_info == NULL || !link_info->resolve_section_groups)
3727     {
3728       size_t reloc_count = 0;
3729
3730       /* Put SHT_GROUP sections first.  */
3731       for (sec = abfd->sections; sec != NULL; sec = sec->next)
3732         {
3733           d = elf_section_data (sec);
3734
3735           if (d->this_hdr.sh_type == SHT_GROUP)
3736             {
3737               if (sec->flags & SEC_LINKER_CREATED)
3738                 {
3739                   /* Remove the linker created SHT_GROUP sections.  */
3740                   bfd_section_list_remove (abfd, sec);
3741                   abfd->section_count--;
3742                 }
3743               else
3744                 d->this_idx = section_number++;
3745             }
3746
3747           /* Count relocations.  */
3748           reloc_count += sec->reloc_count;
3749         }
3750
3751       /* Clear HAS_RELOC if there are no relocations.  */
3752       if (reloc_count == 0)
3753         abfd->flags &= ~HAS_RELOC;
3754     }
3755
3756   for (sec = abfd->sections; sec; sec = sec->next)
3757     {
3758       d = elf_section_data (sec);
3759
3760       if (d->this_hdr.sh_type != SHT_GROUP)
3761         d->this_idx = section_number++;
3762       if (d->this_hdr.sh_name != (unsigned int) -1)
3763         _bfd_elf_strtab_addref (elf_shstrtab (abfd), d->this_hdr.sh_name);
3764       if (d->rel.hdr)
3765         {
3766           d->rel.idx = section_number++;
3767           if (d->rel.hdr->sh_name != (unsigned int) -1)
3768             _bfd_elf_strtab_addref (elf_shstrtab (abfd), d->rel.hdr->sh_name);
3769         }
3770       else
3771         d->rel.idx = 0;
3772
3773       if (d->rela.hdr)
3774         {
3775           d->rela.idx = section_number++;
3776           if (d->rela.hdr->sh_name != (unsigned int) -1)
3777             _bfd_elf_strtab_addref (elf_shstrtab (abfd), d->rela.hdr->sh_name);
3778         }
3779       else
3780         d->rela.idx = 0;
3781     }
3782
3783   need_symtab = (bfd_get_symcount (abfd) > 0
3784                 || (link_info == NULL
3785                     && ((abfd->flags & (EXEC_P | DYNAMIC | HAS_RELOC))
3786                         == HAS_RELOC)));
3787   if (need_symtab)
3788     {
3789       elf_onesymtab (abfd) = section_number++;
3790       _bfd_elf_strtab_addref (elf_shstrtab (abfd), t->symtab_hdr.sh_name);
3791       if (section_number > ((SHN_LORESERVE - 2) & 0xFFFF))
3792         {
3793           elf_section_list *entry;
3794
3795           BFD_ASSERT (elf_symtab_shndx_list (abfd) == NULL);
3796
3797           entry = bfd_zalloc (abfd, sizeof (*entry));
3798           entry->ndx = section_number++;
3799           elf_symtab_shndx_list (abfd) = entry;
3800           entry->hdr.sh_name
3801             = (unsigned int) _bfd_elf_strtab_add (elf_shstrtab (abfd),
3802                                                   ".symtab_shndx", FALSE);
3803           if (entry->hdr.sh_name == (unsigned int) -1)
3804             return FALSE;
3805         }
3806       elf_strtab_sec (abfd) = section_number++;
3807       _bfd_elf_strtab_addref (elf_shstrtab (abfd), t->strtab_hdr.sh_name);
3808     }
3809
3810   elf_shstrtab_sec (abfd) = section_number++;
3811   _bfd_elf_strtab_addref (elf_shstrtab (abfd), t->shstrtab_hdr.sh_name);
3812   elf_elfheader (abfd)->e_shstrndx = elf_shstrtab_sec (abfd);
3813
3814   if (section_number >= SHN_LORESERVE)
3815     {
3816       /* xgettext:c-format */
3817       _bfd_error_handler (_("%pB: too many sections: %u"),
3818                           abfd, section_number);
3819       return FALSE;
3820     }
3821
3822   elf_numsections (abfd) = section_number;
3823   elf_elfheader (abfd)->e_shnum = section_number;
3824
3825   /* Set up the list of section header pointers, in agreement with the
3826      indices.  */
3827   amt = section_number * sizeof (Elf_Internal_Shdr *);
3828   i_shdrp = (Elf_Internal_Shdr **) bfd_zalloc (abfd, amt);
3829   if (i_shdrp == NULL)
3830     return FALSE;
3831
3832   i_shdrp[0] = (Elf_Internal_Shdr *) bfd_zalloc (abfd,
3833                                                  sizeof (Elf_Internal_Shdr));
3834   if (i_shdrp[0] == NULL)
3835     {
3836       bfd_release (abfd, i_shdrp);
3837       return FALSE;
3838     }
3839
3840   elf_elfsections (abfd) = i_shdrp;
3841
3842   i_shdrp[elf_shstrtab_sec (abfd)] = &t->shstrtab_hdr;
3843   if (need_symtab)
3844     {
3845       i_shdrp[elf_onesymtab (abfd)] = &t->symtab_hdr;
3846       if (elf_numsections (abfd) > (SHN_LORESERVE & 0xFFFF))
3847         {
3848           elf_section_list * entry = elf_symtab_shndx_list (abfd);
3849           BFD_ASSERT (entry != NULL);
3850           i_shdrp[entry->ndx] = & entry->hdr;
3851           entry->hdr.sh_link = elf_onesymtab (abfd);
3852         }
3853       i_shdrp[elf_strtab_sec (abfd)] = &t->strtab_hdr;
3854       t->symtab_hdr.sh_link = elf_strtab_sec (abfd);
3855     }
3856
3857   for (sec = abfd->sections; sec; sec = sec->next)
3858     {
3859       asection *s;
3860
3861       d = elf_section_data (sec);
3862
3863       i_shdrp[d->this_idx] = &d->this_hdr;
3864       if (d->rel.idx != 0)
3865         i_shdrp[d->rel.idx] = d->rel.hdr;
3866       if (d->rela.idx != 0)
3867         i_shdrp[d->rela.idx] = d->rela.hdr;
3868
3869       /* Fill in the sh_link and sh_info fields while we're at it.  */
3870
3871       /* sh_link of a reloc section is the section index of the symbol
3872          table.  sh_info is the section index of the section to which
3873          the relocation entries apply.  */
3874       if (d->rel.idx != 0)
3875         {
3876           d->rel.hdr->sh_link = elf_onesymtab (abfd);
3877           d->rel.hdr->sh_info = d->this_idx;
3878           d->rel.hdr->sh_flags |= SHF_INFO_LINK;
3879         }
3880       if (d->rela.idx != 0)
3881         {
3882           d->rela.hdr->sh_link = elf_onesymtab (abfd);
3883           d->rela.hdr->sh_info = d->this_idx;
3884           d->rela.hdr->sh_flags |= SHF_INFO_LINK;
3885         }
3886
3887       /* We need to set up sh_link for SHF_LINK_ORDER.  */
3888       if ((d->this_hdr.sh_flags & SHF_LINK_ORDER) != 0)
3889         {
3890           s = elf_linked_to_section (sec);
3891           if (s)
3892             {
3893               /* Check discarded linkonce section.  */
3894               if (discarded_section (s))
3895                 {
3896                   asection *kept;
3897                   _bfd_error_handler
3898                     /* xgettext:c-format */
3899                     (_("%pB: sh_link of section `%pA' points to"
3900                        " discarded section `%pA' of `%pB'"),
3901                      abfd, d->this_hdr.bfd_section, s, s->owner);
3902                   /* Point to the kept section if it has the same
3903                      size as the discarded one.  */
3904                   kept = _bfd_elf_check_kept_section (s, link_info);
3905                   if (kept == NULL)
3906                     {
3907                       bfd_set_error (bfd_error_bad_value);
3908                       return FALSE;
3909                     }
3910                   s = kept;
3911                 }
3912               /* Handle objcopy. */
3913               else if (s->output_section == NULL)
3914                 {
3915                   _bfd_error_handler
3916                     /* xgettext:c-format */
3917                     (_("%pB: sh_link of section `%pA' points to"
3918                        " removed section `%pA' of `%pB'"),
3919                      abfd, d->this_hdr.bfd_section, s, s->owner);
3920                   bfd_set_error (bfd_error_bad_value);
3921                   return FALSE;
3922                 }
3923               s = s->output_section;
3924               d->this_hdr.sh_link = elf_section_data (s)->this_idx;
3925             }
3926           else
3927             {
3928               /* PR 290:
3929                  The Intel C compiler generates SHT_IA_64_UNWIND with
3930                  SHF_LINK_ORDER.  But it doesn't set the sh_link or
3931                  sh_info fields.  Hence we could get the situation
3932                  where s is NULL.  */
3933               const struct elf_backend_data *bed
3934                 = get_elf_backend_data (abfd);
3935               bed->link_order_error_handler
3936                 /* xgettext:c-format */
3937                 (_("%pB: warning: sh_link not set for section `%pA'"),
3938                  abfd, sec);
3939             }
3940         }
3941
3942       switch (d->this_hdr.sh_type)
3943         {
3944         case SHT_REL:
3945         case SHT_RELA:
3946           /* A reloc section which we are treating as a normal BFD
3947              section.  sh_link is the section index of the symbol
3948              table.  sh_info is the section index of the section to
3949              which the relocation entries apply.  We assume that an
3950              allocated reloc section uses the dynamic symbol table.
3951              FIXME: How can we be sure?  */
3952           s = bfd_get_section_by_name (abfd, ".dynsym");
3953           if (s != NULL)
3954             d->this_hdr.sh_link = elf_section_data (s)->this_idx;
3955
3956           s = elf_get_reloc_section (sec);
3957           if (s != NULL)
3958             {
3959               d->this_hdr.sh_info = elf_section_data (s)->this_idx;
3960               d->this_hdr.sh_flags |= SHF_INFO_LINK;
3961             }
3962           break;
3963
3964         case SHT_STRTAB:
3965           /* We assume that a section named .stab*str is a stabs
3966              string section.  We look for a section with the same name
3967              but without the trailing ``str'', and set its sh_link
3968              field to point to this section.  */
3969           if (CONST_STRNEQ (sec->name, ".stab")
3970               && strcmp (sec->name + strlen (sec->name) - 3, "str") == 0)
3971             {
3972               size_t len;
3973               char *alc;
3974
3975               len = strlen (sec->name);
3976               alc = (char *) bfd_malloc (len - 2);
3977               if (alc == NULL)
3978                 return FALSE;
3979               memcpy (alc, sec->name, len - 3);
3980               alc[len - 3] = '\0';
3981               s = bfd_get_section_by_name (abfd, alc);
3982               free (alc);
3983               if (s != NULL)
3984                 {
3985                   elf_section_data (s)->this_hdr.sh_link = d->this_idx;
3986
3987                   /* This is a .stab section.  */
3988                   elf_section_data (s)->this_hdr.sh_entsize = 12;
3989                 }
3990             }
3991           break;
3992
3993         case SHT_DYNAMIC:
3994         case SHT_DYNSYM:
3995         case SHT_GNU_verneed:
3996         case SHT_GNU_verdef:
3997           /* sh_link is the section header index of the string table
3998              used for the dynamic entries, or the symbol table, or the
3999              version strings.  */
4000           s = bfd_get_section_by_name (abfd, ".dynstr");
4001           if (s != NULL)
4002             d->this_hdr.sh_link = elf_section_data (s)->this_idx;
4003           break;
4004
4005         case SHT_GNU_LIBLIST:
4006           /* sh_link is the section header index of the prelink library
4007              list used for the dynamic entries, or the symbol table, or
4008              the version strings.  */
4009           s = bfd_get_section_by_name (abfd, (sec->flags & SEC_ALLOC)
4010                                              ? ".dynstr" : ".gnu.libstr");
4011           if (s != NULL)
4012             d->this_hdr.sh_link = elf_section_data (s)->this_idx;
4013           break;
4014
4015         case SHT_HASH:
4016         case SHT_GNU_HASH:
4017         case SHT_GNU_versym:
4018           /* sh_link is the section header index of the symbol table
4019              this hash table or version table is for.  */
4020           s = bfd_get_section_by_name (abfd, ".dynsym");
4021           if (s != NULL)
4022             d->this_hdr.sh_link = elf_section_data (s)->this_idx;
4023           break;
4024
4025         case SHT_GROUP:
4026           d->this_hdr.sh_link = elf_onesymtab (abfd);
4027         }
4028     }
4029
4030   /* Delay setting sh_name to _bfd_elf_write_object_contents so that
4031      _bfd_elf_assign_file_positions_for_non_load can convert DWARF
4032      debug section name from .debug_* to .zdebug_* if needed.  */
4033
4034   return TRUE;
4035 }
4036
4037 static bfd_boolean
4038 sym_is_global (bfd *abfd, asymbol *sym)
4039 {
4040   /* If the backend has a special mapping, use it.  */
4041   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
4042   if (bed->elf_backend_sym_is_global)
4043     return (*bed->elf_backend_sym_is_global) (abfd, sym);
4044
4045   return ((sym->flags & (BSF_GLOBAL | BSF_WEAK | BSF_GNU_UNIQUE)) != 0
4046           || bfd_is_und_section (bfd_asymbol_section (sym))
4047           || bfd_is_com_section (bfd_asymbol_section (sym)));
4048 }
4049
4050 /* Filter global symbols of ABFD to include in the import library.  All
4051    SYMCOUNT symbols of ABFD can be examined from their pointers in
4052    SYMS.  Pointers of symbols to keep should be stored contiguously at
4053    the beginning of that array.
4054
4055    Returns the number of symbols to keep.  */
4056
4057 unsigned int
4058 _bfd_elf_filter_global_symbols (bfd *abfd, struct bfd_link_info *info,
4059                                 asymbol **syms, long symcount)
4060 {
4061   long src_count, dst_count = 0;
4062
4063   for (src_count = 0; src_count < symcount; src_count++)
4064     {
4065       asymbol *sym = syms[src_count];
4066       char *name = (char *) bfd_asymbol_name (sym);
4067       struct bfd_link_hash_entry *h;
4068
4069       if (!sym_is_global (abfd, sym))
4070         continue;
4071
4072       h = bfd_link_hash_lookup (info->hash, name, FALSE, FALSE, FALSE);
4073       if (h == NULL)
4074         continue;
4075       if (h->type != bfd_link_hash_defined && h->type != bfd_link_hash_defweak)
4076         continue;
4077       if (h->linker_def || h->ldscript_def)
4078         continue;
4079
4080       syms[dst_count++] = sym;
4081     }
4082
4083   syms[dst_count] = NULL;
4084
4085   return dst_count;
4086 }
4087
4088 /* Don't output section symbols for sections that are not going to be
4089    output, that are duplicates or there is no BFD section.  */
4090
4091 static bfd_boolean
4092 ignore_section_sym (bfd *abfd, asymbol *sym)
4093 {
4094   elf_symbol_type *type_ptr;
4095
4096   if (sym == NULL)
4097     return FALSE;
4098
4099   if ((sym->flags & BSF_SECTION_SYM) == 0)
4100     return FALSE;
4101
4102   if (sym->section == NULL)
4103     return TRUE;
4104
4105   type_ptr = elf_symbol_from (abfd, sym);
4106   return ((type_ptr != NULL
4107            && type_ptr->internal_elf_sym.st_shndx != 0
4108            && bfd_is_abs_section (sym->section))
4109           || !(sym->section->owner == abfd
4110                || (sym->section->output_section != NULL
4111                    && sym->section->output_section->owner == abfd
4112                    && sym->section->output_offset == 0)
4113                || bfd_is_abs_section (sym->section)));
4114 }
4115
4116 /* Map symbol from it's internal number to the external number, moving
4117    all local symbols to be at the head of the list.  */
4118
4119 static bfd_boolean
4120 elf_map_symbols (bfd *abfd, unsigned int *pnum_locals)
4121 {
4122   unsigned int symcount = bfd_get_symcount (abfd);
4123   asymbol **syms = bfd_get_outsymbols (abfd);
4124   asymbol **sect_syms;
4125   unsigned int num_locals = 0;
4126   unsigned int num_globals = 0;
4127   unsigned int num_locals2 = 0;
4128   unsigned int num_globals2 = 0;
4129   unsigned int max_index = 0;
4130   unsigned int idx;
4131   asection *asect;
4132   asymbol **new_syms;
4133   size_t amt;
4134
4135 #ifdef DEBUG
4136   fprintf (stderr, "elf_map_symbols\n");
4137   fflush (stderr);
4138 #endif
4139
4140   for (asect = abfd->sections; asect; asect = asect->next)
4141     {
4142       if (max_index < asect->index)
4143         max_index = asect->index;
4144     }
4145
4146   max_index++;
4147   amt = max_index * sizeof (asymbol *);
4148   sect_syms = (asymbol **) bfd_zalloc (abfd, amt);
4149   if (sect_syms == NULL)
4150     return FALSE;
4151   elf_section_syms (abfd) = sect_syms;
4152   elf_num_section_syms (abfd) = max_index;
4153
4154   /* Init sect_syms entries for any section symbols we have already
4155      decided to output.  */
4156   for (idx = 0; idx < symcount; idx++)
4157     {
4158       asymbol *sym = syms[idx];
4159
4160       if ((sym->flags & BSF_SECTION_SYM) != 0
4161           && sym->value == 0
4162           && !ignore_section_sym (abfd, sym)
4163           && !bfd_is_abs_section (sym->section))
4164         {
4165           asection *sec = sym->section;
4166
4167           if (sec->owner != abfd)
4168             sec = sec->output_section;
4169
4170           sect_syms[sec->index] = syms[idx];
4171         }
4172     }
4173
4174   /* Classify all of the symbols.  */
4175   for (idx = 0; idx < symcount; idx++)
4176     {
4177       if (sym_is_global (abfd, syms[idx]))
4178         num_globals++;
4179       else if (!ignore_section_sym (abfd, syms[idx]))
4180         num_locals++;
4181     }
4182
4183   /* We will be adding a section symbol for each normal BFD section.  Most
4184      sections will already have a section symbol in outsymbols, but
4185      eg. SHT_GROUP sections will not, and we need the section symbol mapped
4186      at least in that case.  */
4187   for (asect = abfd->sections; asect; asect = asect->next)
4188     {
4189       if (sect_syms[asect->index] == NULL)
4190         {
4191           if (!sym_is_global (abfd, asect->symbol))
4192             num_locals++;
4193           else
4194             num_globals++;
4195         }
4196     }
4197
4198   /* Now sort the symbols so the local symbols are first.  */
4199   amt = (num_locals + num_globals) * sizeof (asymbol *);
4200   new_syms = (asymbol **) bfd_alloc (abfd, amt);
4201   if (new_syms == NULL)
4202     return FALSE;
4203
4204   for (idx = 0; idx < symcount; idx++)
4205     {
4206       asymbol *sym = syms[idx];
4207       unsigned int i;
4208
4209       if (sym_is_global (abfd, sym))
4210         i = num_locals + num_globals2++;
4211       else if (!ignore_section_sym (abfd, sym))
4212         i = num_locals2++;
4213       else
4214         continue;
4215       new_syms[i] = sym;
4216       sym->udata.i = i + 1;
4217     }
4218   for (asect = abfd->sections; asect; asect = asect->next)
4219     {
4220       if (sect_syms[asect->index] == NULL)
4221         {
4222           asymbol *sym = asect->symbol;
4223           unsigned int i;
4224
4225           sect_syms[asect->index] = sym;
4226           if (!sym_is_global (abfd, sym))
4227             i = num_locals2++;
4228           else
4229             i = num_locals + num_globals2++;
4230           new_syms[i] = sym;
4231           sym->udata.i = i + 1;
4232         }
4233     }
4234
4235   bfd_set_symtab (abfd, new_syms, num_locals + num_globals);
4236
4237   *pnum_locals = num_locals;
4238   return TRUE;
4239 }
4240
4241 /* Align to the maximum file alignment that could be required for any
4242    ELF data structure.  */
4243
4244 static inline file_ptr
4245 align_file_position (file_ptr off, int align)
4246 {
4247   return (off + align - 1) & ~(align - 1);
4248 }
4249
4250 /* Assign a file position to a section, optionally aligning to the
4251    required section alignment.  */
4252
4253 file_ptr
4254 _bfd_elf_assign_file_position_for_section (Elf_Internal_Shdr *i_shdrp,
4255                                            file_ptr offset,
4256                                            bfd_boolean align)
4257 {
4258   if (align && i_shdrp->sh_addralign > 1)
4259     offset = BFD_ALIGN (offset, i_shdrp->sh_addralign);
4260   i_shdrp->sh_offset = offset;
4261   if (i_shdrp->bfd_section != NULL)
4262     i_shdrp->bfd_section->filepos = offset;
4263   if (i_shdrp->sh_type != SHT_NOBITS)
4264     offset += i_shdrp->sh_size;
4265   return offset;
4266 }
4267
4268 /* Compute the file positions we are going to put the sections at, and
4269    otherwise prepare to begin writing out the ELF file.  If LINK_INFO
4270    is not NULL, this is being called by the ELF backend linker.  */
4271
4272 bfd_boolean
4273 _bfd_elf_compute_section_file_positions (bfd *abfd,
4274                                          struct bfd_link_info *link_info)
4275 {
4276   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
4277   struct fake_section_arg fsargs;
4278   bfd_boolean failed;
4279   struct elf_strtab_hash *strtab = NULL;
4280   Elf_Internal_Shdr *shstrtab_hdr;
4281   bfd_boolean need_symtab;
4282
4283   if (abfd->output_has_begun)
4284     return TRUE;
4285
4286   /* Do any elf backend specific processing first.  */
4287   if (bed->elf_backend_begin_write_processing)
4288     (*bed->elf_backend_begin_write_processing) (abfd, link_info);
4289
4290   if (!(*bed->elf_backend_init_file_header) (abfd, link_info))
4291     return FALSE;
4292
4293   fsargs.failed = FALSE;
4294   fsargs.link_info = link_info;
4295   bfd_map_over_sections (abfd, elf_fake_sections, &fsargs);
4296   if (fsargs.failed)
4297     return FALSE;
4298
4299   if (!assign_section_numbers (abfd, link_info))
4300     return FALSE;
4301
4302   /* The backend linker builds symbol table information itself.  */
4303   need_symtab = (link_info == NULL
4304                  && (bfd_get_symcount (abfd) > 0
4305                      || ((abfd->flags & (EXEC_P | DYNAMIC | HAS_RELOC))
4306                          == HAS_RELOC)));
4307   if (need_symtab)
4308     {
4309       /* Non-zero if doing a relocatable link.  */
4310       int relocatable_p = ! (abfd->flags & (EXEC_P | DYNAMIC));
4311
4312       if (! swap_out_syms (abfd, &strtab, relocatable_p))
4313         return FALSE;
4314     }
4315
4316   failed = FALSE;
4317   if (link_info == NULL)
4318     {
4319       bfd_map_over_sections (abfd, bfd_elf_set_group_contents, &failed);
4320       if (failed)
4321         return FALSE;
4322     }
4323
4324   shstrtab_hdr = &elf_tdata (abfd)->shstrtab_hdr;
4325   /* sh_name was set in init_file_header.  */
4326   shstrtab_hdr->sh_type = SHT_STRTAB;
4327   shstrtab_hdr->sh_flags = bed->elf_strtab_flags;
4328   shstrtab_hdr->sh_addr = 0;
4329   /* sh_size is set in _bfd_elf_assign_file_positions_for_non_load.  */
4330   shstrtab_hdr->sh_entsize = 0;
4331   shstrtab_hdr->sh_link = 0;
4332   shstrtab_hdr->sh_info = 0;
4333   /* sh_offset is set in _bfd_elf_assign_file_positions_for_non_load.  */
4334   shstrtab_hdr->sh_addralign = 1;
4335
4336   if (!assign_file_positions_except_relocs (abfd, link_info))
4337     return FALSE;
4338
4339   if (need_symtab)
4340     {
4341       file_ptr off;
4342       Elf_Internal_Shdr *hdr;
4343
4344       off = elf_next_file_pos (abfd);
4345
4346       hdr = & elf_symtab_hdr (abfd);
4347       off = _bfd_elf_assign_file_position_for_section (hdr, off, TRUE);
4348
4349       if (elf_symtab_shndx_list (abfd) != NULL)
4350         {
4351           hdr = & elf_symtab_shndx_list (abfd)->hdr;
4352           if (hdr->sh_size != 0)
4353             off = _bfd_elf_assign_file_position_for_section (hdr, off, TRUE);
4354           /* FIXME: What about other symtab_shndx sections in the list ?  */
4355         }
4356
4357       hdr = &elf_tdata (abfd)->strtab_hdr;
4358       off = _bfd_elf_assign_file_position_for_section (hdr, off, TRUE);
4359
4360       elf_next_file_pos (abfd) = off;
4361
4362       /* Now that we know where the .strtab section goes, write it
4363          out.  */
4364       if (bfd_seek (abfd, hdr->sh_offset, SEEK_SET) != 0
4365           || ! _bfd_elf_strtab_emit (abfd, strtab))
4366         return FALSE;
4367       _bfd_elf_strtab_free (strtab);
4368     }
4369
4370   abfd->output_has_begun = TRUE;
4371
4372   return TRUE;
4373 }
4374
4375 /* Make an initial estimate of the size of the program header.  If we
4376    get the number wrong here, we'll redo section placement.  */
4377
4378 static bfd_size_type
4379 get_program_header_size (bfd *abfd, struct bfd_link_info *info)
4380 {
4381   size_t segs;
4382   asection *s;
4383   const struct elf_backend_data *bed;
4384
4385   /* Assume we will need exactly two PT_LOAD segments: one for text
4386      and one for data.  */
4387   segs = 2;
4388
4389   s = bfd_get_section_by_name (abfd, ".interp");
4390   if (s != NULL && (s->flags & SEC_LOAD) != 0 && s->size != 0)
4391     {
4392       /* If we have a loadable interpreter section, we need a
4393          PT_INTERP segment.  In this case, assume we also need a
4394          PT_PHDR segment, although that may not be true for all
4395          targets.  */
4396       segs += 2;
4397     }
4398
4399   if (bfd_get_section_by_name (abfd, ".dynamic") != NULL)
4400     {
4401       /* We need a PT_DYNAMIC segment.  */
4402       ++segs;
4403     }
4404
4405   if (info != NULL && info->relro)
4406     {
4407       /* We need a PT_GNU_RELRO segment.  */
4408       ++segs;
4409     }
4410
4411   if (elf_eh_frame_hdr (abfd))
4412     {
4413       /* We need a PT_GNU_EH_FRAME segment.  */
4414       ++segs;
4415     }
4416
4417   if (elf_stack_flags (abfd))
4418     {
4419       /* We need a PT_GNU_STACK segment.  */
4420       ++segs;
4421     }
4422
4423   s = bfd_get_section_by_name (abfd,
4424                                NOTE_GNU_PROPERTY_SECTION_NAME);
4425   if (s != NULL && s->size != 0)
4426     {
4427       /* We need a PT_GNU_PROPERTY segment.  */
4428       ++segs;
4429     }
4430
4431   for (s = abfd->sections; s != NULL; s = s->next)
4432     {
4433       if ((s->flags & SEC_LOAD) != 0
4434           && elf_section_type (s) == SHT_NOTE)
4435         {
4436           unsigned int alignment_power;
4437           /* We need a PT_NOTE segment.  */
4438           ++segs;
4439           /* Try to create just one PT_NOTE segment for all adjacent
4440              loadable SHT_NOTE sections.  gABI requires that within a
4441              PT_NOTE segment (and also inside of each SHT_NOTE section)
4442              each note should have the same alignment.  So we check
4443              whether the sections are correctly aligned.  */
4444           alignment_power = s->alignment_power;
4445           while (s->next != NULL
4446                  && s->next->alignment_power == alignment_power
4447                  && (s->next->flags & SEC_LOAD) != 0
4448                  && elf_section_type (s->next) == SHT_NOTE)
4449             s = s->next;
4450         }
4451     }
4452
4453   for (s = abfd->sections; s != NULL; s = s->next)
4454     {
4455       if (s->flags & SEC_THREAD_LOCAL)
4456         {
4457           /* We need a PT_TLS segment.  */
4458           ++segs;
4459           break;
4460         }
4461     }
4462
4463   bed = get_elf_backend_data (abfd);
4464
4465   if ((abfd->flags & D_PAGED) != 0
4466       && (elf_tdata (abfd)->has_gnu_osabi & elf_gnu_osabi_mbind) != 0)
4467     {
4468       /* Add a PT_GNU_MBIND segment for each mbind section.  */
4469       unsigned int page_align_power = bfd_log2 (bed->commonpagesize);
4470       for (s = abfd->sections; s != NULL; s = s->next)
4471         if (elf_section_flags (s) & SHF_GNU_MBIND)
4472           {
4473             if (elf_section_data (s)->this_hdr.sh_info > PT_GNU_MBIND_NUM)
4474               {
4475                 _bfd_error_handler
4476                   /* xgettext:c-format */
4477                   (_("%pB: GNU_MBIND section `%pA' has invalid "
4478                      "sh_info field: %d"),
4479                    abfd, s, elf_section_data (s)->this_hdr.sh_info);
4480                 continue;
4481               }
4482             /* Align mbind section to page size.  */
4483             if (s->alignment_power < page_align_power)
4484               s->alignment_power = page_align_power;
4485             segs ++;
4486           }
4487     }
4488
4489   /* Let the backend count up any program headers it might need.  */
4490   if (bed->elf_backend_additional_program_headers)
4491     {
4492       int a;
4493
4494       a = (*bed->elf_backend_additional_program_headers) (abfd, info);
4495       if (a == -1)
4496         abort ();
4497       segs += a;
4498     }
4499
4500   return segs * bed->s->sizeof_phdr;
4501 }
4502
4503 /* Find the segment that contains the output_section of section.  */
4504
4505 Elf_Internal_Phdr *
4506 _bfd_elf_find_segment_containing_section (bfd * abfd, asection * section)
4507 {
4508   struct elf_segment_map *m;
4509   Elf_Internal_Phdr *p;
4510
4511   for (m = elf_seg_map (abfd), p = elf_tdata (abfd)->phdr;
4512        m != NULL;
4513        m = m->next, p++)
4514     {
4515       int i;
4516
4517       for (i = m->count - 1; i >= 0; i--)
4518         if (m->sections[i] == section)
4519           return p;
4520     }
4521
4522   return NULL;
4523 }
4524
4525 /* Create a mapping from a set of sections to a program segment.  */
4526
4527 static struct elf_segment_map *
4528 make_mapping (bfd *abfd,
4529               asection **sections,
4530               unsigned int from,
4531               unsigned int to,
4532               bfd_boolean phdr)
4533 {
4534   struct elf_segment_map *m;
4535   unsigned int i;
4536   asection **hdrpp;
4537   size_t amt;
4538
4539   amt = sizeof (struct elf_segment_map) - sizeof (asection *);
4540   amt += (to - from) * sizeof (asection *);
4541   m = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
4542   if (m == NULL)
4543     return NULL;
4544   m->next = NULL;
4545   m->p_type = PT_LOAD;
4546   for (i = from, hdrpp = sections + from; i < to; i++, hdrpp++)
4547     m->sections[i - from] = *hdrpp;
4548   m->count = to - from;
4549
4550   if (from == 0 && phdr)
4551     {
4552       /* Include the headers in the first PT_LOAD segment.  */
4553       m->includes_filehdr = 1;
4554       m->includes_phdrs = 1;
4555     }
4556
4557   return m;
4558 }
4559
4560 /* Create the PT_DYNAMIC segment, which includes DYNSEC.  Returns NULL
4561    on failure.  */
4562
4563 struct elf_segment_map *
4564 _bfd_elf_make_dynamic_segment (bfd *abfd, asection *dynsec)
4565 {
4566   struct elf_segment_map *m;
4567
4568   m = (struct elf_segment_map *) bfd_zalloc (abfd,
4569                                              sizeof (struct elf_segment_map));
4570   if (m == NULL)
4571     return NULL;
4572   m->next = NULL;
4573   m->p_type = PT_DYNAMIC;
4574   m->count = 1;
4575   m->sections[0] = dynsec;
4576
4577   return m;
4578 }
4579
4580 /* Possibly add or remove segments from the segment map.  */
4581
4582 static bfd_boolean
4583 elf_modify_segment_map (bfd *abfd,
4584                         struct bfd_link_info *info,
4585                         bfd_boolean remove_empty_load)
4586 {
4587   struct elf_segment_map **m;
4588   const struct elf_backend_data *bed;
4589
4590   /* The placement algorithm assumes that non allocated sections are
4591      not in PT_LOAD segments.  We ensure this here by removing such
4592      sections from the segment map.  We also remove excluded
4593      sections.  Finally, any PT_LOAD segment without sections is
4594      removed.  */
4595   m = &elf_seg_map (abfd);
4596   while (*m)
4597     {
4598       unsigned int i, new_count;
4599
4600       for (new_count = 0, i = 0; i < (*m)->count; i++)
4601         {
4602           if (((*m)->sections[i]->flags & SEC_EXCLUDE) == 0
4603               && (((*m)->sections[i]->flags & SEC_ALLOC) != 0
4604                   || (*m)->p_type != PT_LOAD))
4605             {
4606               (*m)->sections[new_count] = (*m)->sections[i];
4607               new_count++;
4608             }
4609         }
4610       (*m)->count = new_count;
4611
4612       if (remove_empty_load
4613           && (*m)->p_type == PT_LOAD
4614           && (*m)->count == 0
4615           && !(*m)->includes_phdrs)
4616         *m = (*m)->next;
4617       else
4618         m = &(*m)->next;
4619     }
4620
4621   bed = get_elf_backend_data (abfd);
4622   if (bed->elf_backend_modify_segment_map != NULL)
4623     {
4624       if (!(*bed->elf_backend_modify_segment_map) (abfd, info))
4625         return FALSE;
4626     }
4627
4628   return TRUE;
4629 }
4630
4631 #define IS_TBSS(s) \
4632   ((s->flags & (SEC_THREAD_LOCAL | SEC_LOAD)) == SEC_THREAD_LOCAL)
4633
4634 /* Set up a mapping from BFD sections to program segments.  */
4635
4636 bfd_boolean
4637 _bfd_elf_map_sections_to_segments (bfd *abfd, struct bfd_link_info *info)
4638 {
4639   unsigned int count;
4640   struct elf_segment_map *m;
4641   asection **sections = NULL;
4642   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
4643   bfd_boolean no_user_phdrs;
4644
4645   no_user_phdrs = elf_seg_map (abfd) == NULL;
4646
4647   if (info != NULL)
4648     info->user_phdrs = !no_user_phdrs;
4649
4650   if (no_user_phdrs && bfd_count_sections (abfd) != 0)
4651     {
4652       asection *s;
4653       unsigned int i;
4654       struct elf_segment_map *mfirst;
4655       struct elf_segment_map **pm;
4656       asection *last_hdr;
4657       bfd_vma last_size;
4658       unsigned int hdr_index;
4659       bfd_vma maxpagesize;
4660       asection **hdrpp;
4661       bfd_boolean phdr_in_segment;
4662       bfd_boolean writable;
4663       bfd_boolean executable;
4664       unsigned int tls_count = 0;
4665       asection *first_tls = NULL;
4666       asection *first_mbind = NULL;
4667       asection *dynsec, *eh_frame_hdr;
4668       size_t amt;
4669       bfd_vma addr_mask, wrap_to = 0;  /* Bytes.  */
4670       bfd_size_type phdr_size;  /* Octets/bytes.  */
4671       unsigned int opb = bfd_octets_per_byte (abfd, NULL);
4672
4673       /* Select the allocated sections, and sort them.  */
4674
4675       amt = bfd_count_sections (abfd) * sizeof (asection *);
4676       sections = (asection **) bfd_malloc (amt);
4677       if (sections == NULL)
4678         goto error_return;
4679
4680       /* Calculate top address, avoiding undefined behaviour of shift
4681          left operator when shift count is equal to size of type
4682          being shifted.  */
4683       addr_mask = ((bfd_vma) 1 << (bfd_arch_bits_per_address (abfd) - 1)) - 1;
4684       addr_mask = (addr_mask << 1) + 1;
4685
4686       i = 0;
4687       for (s = abfd->sections; s != NULL; s = s->next)
4688         {
4689           if ((s->flags & SEC_ALLOC) != 0)
4690             {
4691               /* target_index is unused until bfd_elf_final_link
4692                  starts output of section symbols.  Use it to make
4693                  qsort stable.  */
4694               s->target_index = i;
4695               sections[i] = s;
4696               ++i;
4697               /* A wrapping section potentially clashes with header.  */
4698               if (((s->lma + s->size / opb) & addr_mask) < (s->lma & addr_mask))
4699                 wrap_to = (s->lma + s->size / opb) & addr_mask;
4700             }
4701         }
4702       BFD_ASSERT (i <= bfd_count_sections (abfd));
4703       count = i;
4704
4705       qsort (sections, (size_t) count, sizeof (asection *), elf_sort_sections);
4706
4707       phdr_size = elf_program_header_size (abfd);
4708       if (phdr_size == (bfd_size_type) -1)
4709         phdr_size = get_program_header_size (abfd, info);
4710       phdr_size += bed->s->sizeof_ehdr;
4711       /* phdr_size is compared to LMA values which are in bytes.  */
4712       phdr_size /= opb;
4713       maxpagesize = bed->maxpagesize;
4714       if (maxpagesize == 0)
4715         maxpagesize = 1;
4716       phdr_in_segment = info != NULL && info->load_phdrs;
4717       if (count != 0
4718           && (((sections[0]->lma & addr_mask) & (maxpagesize - 1))
4719               >= (phdr_size & (maxpagesize - 1))))
4720         /* For compatibility with old scripts that may not be using
4721            SIZEOF_HEADERS, add headers when it looks like space has
4722            been left for them.  */
4723         phdr_in_segment = TRUE;
4724
4725       /* Build the mapping.  */
4726       mfirst = NULL;
4727       pm = &mfirst;
4728
4729       /* If we have a .interp section, then create a PT_PHDR segment for
4730          the program headers and a PT_INTERP segment for the .interp
4731          section.  */
4732       s = bfd_get_section_by_name (abfd, ".interp");
4733       if (s != NULL && (s->flags & SEC_LOAD) != 0 && s->size != 0)
4734         {
4735           amt = sizeof (struct elf_segment_map);
4736           m = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
4737           if (m == NULL)
4738             goto error_return;
4739           m->next = NULL;
4740           m->p_type = PT_PHDR;
4741           m->p_flags = PF_R;
4742           m->p_flags_valid = 1;
4743           m->includes_phdrs = 1;
4744           phdr_in_segment = TRUE;
4745           *pm = m;
4746           pm = &m->next;
4747
4748           amt = sizeof (struct elf_segment_map);
4749           m = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
4750           if (m == NULL)
4751             goto error_return;
4752           m->next = NULL;
4753           m->p_type = PT_INTERP;
4754           m->count = 1;
4755           m->sections[0] = s;
4756
4757           *pm = m;
4758           pm = &m->next;
4759         }
4760
4761       /* Look through the sections.  We put sections in the same program
4762          segment when the start of the second section can be placed within
4763          a few bytes of the end of the first section.  */
4764       last_hdr = NULL;
4765       last_size = 0;
4766       hdr_index = 0;
4767       writable = FALSE;
4768       executable = FALSE;
4769       dynsec = bfd_get_section_by_name (abfd, ".dynamic");
4770       if (dynsec != NULL
4771           && (dynsec->flags & SEC_LOAD) == 0)
4772         dynsec = NULL;
4773
4774       if ((abfd->flags & D_PAGED) == 0)
4775         phdr_in_segment = FALSE;
4776
4777       /* Deal with -Ttext or something similar such that the first section
4778          is not adjacent to the program headers.  This is an
4779          approximation, since at this point we don't know exactly how many
4780          program headers we will need.  */
4781       if (phdr_in_segment && count > 0)
4782         {
4783           bfd_vma phdr_lma;  /* Bytes.  */
4784           bfd_boolean separate_phdr = FALSE;
4785
4786           phdr_lma = (sections[0]->lma - phdr_size) & addr_mask & -maxpagesize;
4787           if (info != NULL
4788               && info->separate_code
4789               && (sections[0]->flags & SEC_CODE) != 0)
4790             {
4791               /* If data sections should be separate from code and
4792                  thus not executable, and the first section is
4793                  executable then put the file and program headers in
4794                  their own PT_LOAD.  */
4795               separate_phdr = TRUE;
4796               if ((((phdr_lma + phdr_size - 1) & addr_mask & -maxpagesize)
4797                    == (sections[0]->lma & addr_mask & -maxpagesize)))
4798                 {
4799                   /* The file and program headers are currently on the
4800                      same page as the first section.  Put them on the
4801                      previous page if we can.  */
4802                   if (phdr_lma >= maxpagesize)
4803                     phdr_lma -= maxpagesize;
4804                   else
4805                     separate_phdr = FALSE;
4806                 }
4807             }
4808           if ((sections[0]->lma & addr_mask) < phdr_lma
4809               || (sections[0]->lma & addr_mask) < phdr_size)
4810             /* If file and program headers would be placed at the end
4811                of memory then it's probably better to omit them.  */
4812             phdr_in_segment = FALSE;
4813           else if (phdr_lma < wrap_to)
4814             /* If a section wraps around to where we'll be placing
4815                file and program headers, then the headers will be
4816                overwritten.  */
4817             phdr_in_segment = FALSE;
4818           else if (separate_phdr)
4819             {
4820               m = make_mapping (abfd, sections, 0, 0, phdr_in_segment);
4821               if (m == NULL)
4822                 goto error_return;
4823               m->p_paddr = phdr_lma * opb;
4824               m->p_vaddr_offset
4825                 = (sections[0]->vma - phdr_size) & addr_mask & -maxpagesize;
4826               m->p_paddr_valid = 1;
4827               *pm = m;
4828               pm = &m->next;
4829               phdr_in_segment = FALSE;
4830             }
4831         }
4832
4833       for (i = 0, hdrpp = sections; i < count; i++, hdrpp++)
4834         {
4835           asection *hdr;
4836           bfd_boolean new_segment;
4837
4838           hdr = *hdrpp;
4839
4840           /* See if this section and the last one will fit in the same
4841              segment.  */
4842
4843           if (last_hdr == NULL)
4844             {
4845               /* If we don't have a segment yet, then we don't need a new
4846                  one (we build the last one after this loop).  */
4847               new_segment = FALSE;
4848             }
4849           else if (last_hdr->lma - last_hdr->vma != hdr->lma - hdr->vma)
4850             {
4851               /* If this section has a different relation between the
4852                  virtual address and the load address, then we need a new
4853                  segment.  */
4854               new_segment = TRUE;
4855             }
4856           else if (hdr->lma < last_hdr->lma + last_size
4857                    || last_hdr->lma + last_size < last_hdr->lma)
4858             {
4859               /* If this section has a load address that makes it overlap
4860                  the previous section, then we need a new segment.  */
4861               new_segment = TRUE;
4862             }
4863           else if ((abfd->flags & D_PAGED) != 0
4864                    && (((last_hdr->lma + last_size - 1) & -maxpagesize)
4865                        == (hdr->lma & -maxpagesize)))
4866             {
4867               /* If we are demand paged then we can't map two disk
4868                  pages onto the same memory page.  */
4869               new_segment = FALSE;
4870             }
4871           /* In the next test we have to be careful when last_hdr->lma is close
4872              to the end of the address space.  If the aligned address wraps
4873              around to the start of the address space, then there are no more
4874              pages left in memory and it is OK to assume that the current
4875              section can be included in the current segment.  */
4876           else if ((BFD_ALIGN (last_hdr->lma + last_size, maxpagesize)
4877                     + maxpagesize > last_hdr->lma)
4878                    && (BFD_ALIGN (last_hdr->lma + last_size, maxpagesize)
4879                        + maxpagesize <= hdr->lma))
4880             {
4881               /* If putting this section in this segment would force us to
4882                  skip a page in the segment, then we need a new segment.  */
4883               new_segment = TRUE;
4884             }
4885           else if ((last_hdr->flags & (SEC_LOAD | SEC_THREAD_LOCAL)) == 0
4886                    && (hdr->flags & (SEC_LOAD | SEC_THREAD_LOCAL)) != 0)
4887             {
4888               /* We don't want to put a loaded section after a
4889                  nonloaded (ie. bss style) section in the same segment
4890                  as that will force the non-loaded section to be loaded.
4891                  Consider .tbss sections as loaded for this purpose.  */
4892               new_segment = TRUE;
4893             }
4894           else if ((abfd->flags & D_PAGED) == 0)
4895             {
4896               /* If the file is not demand paged, which means that we
4897                  don't require the sections to be correctly aligned in the
4898                  file, then there is no other reason for a new segment.  */
4899               new_segment = FALSE;
4900             }
4901           else if (info != NULL
4902                    && info->separate_code
4903                    && executable != ((hdr->flags & SEC_CODE) != 0))
4904             {
4905               new_segment = TRUE;
4906             }
4907           else if (! writable
4908                    && (hdr->flags & SEC_READONLY) == 0)
4909             {
4910               /* We don't want to put a writable section in a read only
4911                  segment.  */
4912               new_segment = TRUE;
4913             }
4914           else
4915             {
4916               /* Otherwise, we can use the same segment.  */
4917               new_segment = FALSE;
4918             }
4919
4920           /* Allow interested parties a chance to override our decision.  */
4921           if (last_hdr != NULL
4922               && info != NULL
4923               && info->callbacks->override_segment_assignment != NULL)
4924             new_segment
4925               = info->callbacks->override_segment_assignment (info, abfd, hdr,
4926                                                               last_hdr,
4927                                                               new_segment);
4928
4929           if (! new_segment)
4930             {
4931               if ((hdr->flags & SEC_READONLY) == 0)
4932                 writable = TRUE;
4933               if ((hdr->flags & SEC_CODE) != 0)
4934                 executable = TRUE;
4935               last_hdr = hdr;
4936               /* .tbss sections effectively have zero size.  */
4937               last_size = (!IS_TBSS (hdr) ? hdr->size : 0) / opb;
4938               continue;
4939             }
4940
4941           /* We need a new program segment.  We must create a new program
4942              header holding all the sections from hdr_index until hdr.  */
4943
4944           m = make_mapping (abfd, sections, hdr_index, i, phdr_in_segment);
4945           if (m == NULL)
4946             goto error_return;
4947
4948           *pm = m;
4949           pm = &m->next;
4950
4951           if ((hdr->flags & SEC_READONLY) == 0)
4952             writable = TRUE;
4953           else
4954             writable = FALSE;
4955
4956           if ((hdr->flags & SEC_CODE) == 0)
4957             executable = FALSE;
4958           else
4959             executable = TRUE;
4960
4961           last_hdr = hdr;
4962           /* .tbss sections effectively have zero size.  */
4963           last_size = (!IS_TBSS (hdr) ? hdr->size : 0) / opb;
4964           hdr_index = i;
4965           phdr_in_segment = FALSE;
4966         }
4967
4968       /* Create a final PT_LOAD program segment, but not if it's just
4969          for .tbss.  */
4970       if (last_hdr != NULL
4971           && (i - hdr_index != 1
4972               || !IS_TBSS (last_hdr)))
4973         {
4974           m = make_mapping (abfd, sections, hdr_index, i, phdr_in_segment);
4975           if (m == NULL)
4976             goto error_return;
4977
4978           *pm = m;
4979           pm = &m->next;
4980         }
4981
4982       /* If there is a .dynamic section, throw in a PT_DYNAMIC segment.  */
4983       if (dynsec != NULL)
4984         {
4985           m = _bfd_elf_make_dynamic_segment (abfd, dynsec);
4986           if (m == NULL)
4987             goto error_return;
4988           *pm = m;
4989           pm = &m->next;
4990         }
4991
4992       /* For each batch of consecutive loadable SHT_NOTE  sections,
4993          add a PT_NOTE segment.  We don't use bfd_get_section_by_name,
4994          because if we link together nonloadable .note sections and
4995          loadable .note sections, we will generate two .note sections
4996          in the output file.  */
4997       for (s = abfd->sections; s != NULL; s = s->next)
4998         {
4999           if ((s->flags & SEC_LOAD) != 0
5000               && elf_section_type (s) == SHT_NOTE)
5001             {
5002               asection *s2;
5003               unsigned int alignment_power = s->alignment_power;
5004
5005               count = 1;
5006               for (s2 = s; s2->next != NULL; s2 = s2->next)
5007                 {
5008                   if (s2->next->alignment_power == alignment_power
5009                       && (s2->next->flags & SEC_LOAD) != 0
5010                       && elf_section_type (s2->next) == SHT_NOTE
5011                       && align_power (s2->lma + s2->size / opb,
5012                                       alignment_power)
5013                       == s2->next->lma)
5014                     count++;
5015                   else
5016                     break;
5017                 }
5018               amt = sizeof (struct elf_segment_map) - sizeof (asection *);
5019               amt += count * sizeof (asection *);
5020               m = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
5021               if (m == NULL)
5022                 goto error_return;
5023               m->next = NULL;
5024               m->p_type = PT_NOTE;
5025               m->count = count;
5026               while (count > 1)
5027                 {
5028                   m->sections[m->count - count--] = s;
5029                   BFD_ASSERT ((s->flags & SEC_THREAD_LOCAL) == 0);
5030                   s = s->next;
5031                 }
5032               m->sections[m->count - 1] = s;
5033               BFD_ASSERT ((s->flags & SEC_THREAD_LOCAL) == 0);
5034               *pm = m;
5035               pm = &m->next;
5036             }
5037           if (s->flags & SEC_THREAD_LOCAL)
5038             {
5039               if (! tls_count)
5040                 first_tls = s;
5041               tls_count++;
5042             }
5043           if (first_mbind == NULL
5044               && (elf_section_flags (s) & SHF_GNU_MBIND) != 0)
5045             first_mbind = s;
5046         }
5047
5048       /* If there are any SHF_TLS output sections, add PT_TLS segment.  */
5049       if (tls_count > 0)
5050         {
5051           amt = sizeof (struct elf_segment_map) - sizeof (asection *);
5052           amt += tls_count * sizeof (asection *);
5053           m = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
5054           if (m == NULL)
5055             goto error_return;
5056           m->next = NULL;
5057           m->p_type = PT_TLS;
5058           m->count = tls_count;
5059           /* Mandated PF_R.  */
5060           m->p_flags = PF_R;
5061           m->p_flags_valid = 1;
5062           s = first_tls;
5063           for (i = 0; i < tls_count; ++i)
5064             {
5065               if ((s->flags & SEC_THREAD_LOCAL) == 0)
5066                 {
5067                   _bfd_error_handler
5068                     (_("%pB: TLS sections are not adjacent:"), abfd);
5069                   s = first_tls;
5070                   i = 0;
5071                   while (i < tls_count)
5072                     {
5073                       if ((s->flags & SEC_THREAD_LOCAL) != 0)
5074                         {
5075                           _bfd_error_handler (_("           TLS: %pA"), s);
5076                           i++;
5077                         }
5078                       else
5079                         _bfd_error_handler (_(" non-TLS: %pA"), s);
5080                       s = s->next;
5081                     }
5082                   bfd_set_error (bfd_error_bad_value);
5083                   goto error_return;
5084                 }
5085               m->sections[i] = s;
5086               s = s->next;
5087             }
5088
5089           *pm = m;
5090           pm = &m->next;
5091         }
5092
5093       if (first_mbind
5094           && (abfd->flags & D_PAGED) != 0
5095           && (elf_tdata (abfd)->has_gnu_osabi & elf_gnu_osabi_mbind) != 0)
5096         for (s = first_mbind; s != NULL; s = s->next)
5097           if ((elf_section_flags (s) & SHF_GNU_MBIND) != 0
5098               && elf_section_data (s)->this_hdr.sh_info <= PT_GNU_MBIND_NUM)
5099             {
5100               /* Mandated PF_R.  */
5101               unsigned long p_flags = PF_R;
5102               if ((s->flags & SEC_READONLY) == 0)
5103                 p_flags |= PF_W;
5104               if ((s->flags & SEC_CODE) != 0)
5105                 p_flags |= PF_X;
5106
5107               amt = sizeof (struct elf_segment_map) + sizeof (asection *);
5108               m = bfd_zalloc (abfd, amt);
5109               if (m == NULL)
5110                 goto error_return;
5111               m->next = NULL;
5112               m->p_type = (PT_GNU_MBIND_LO
5113                            + elf_section_data (s)->this_hdr.sh_info);
5114               m->count = 1;
5115               m->p_flags_valid = 1;
5116               m->sections[0] = s;
5117               m->p_flags = p_flags;
5118
5119               *pm = m;
5120               pm = &m->next;
5121             }
5122
5123       s = bfd_get_section_by_name (abfd,
5124                                    NOTE_GNU_PROPERTY_SECTION_NAME);
5125       if (s != NULL && s->size != 0)
5126         {
5127           amt = sizeof (struct elf_segment_map) + sizeof (asection *);
5128           m = bfd_zalloc (abfd, amt);
5129           if (m == NULL)
5130             goto error_return;
5131           m->next = NULL;
5132           m->p_type = PT_GNU_PROPERTY;
5133           m->count = 1;
5134           m->p_flags_valid = 1;
5135           m->sections[0] = s;
5136           m->p_flags = PF_R;
5137           *pm = m;
5138           pm = &m->next;
5139         }
5140
5141       /* If there is a .eh_frame_hdr section, throw in a PT_GNU_EH_FRAME
5142          segment.  */
5143       eh_frame_hdr = elf_eh_frame_hdr (abfd);
5144       if (eh_frame_hdr != NULL
5145           && (eh_frame_hdr->output_section->flags & SEC_LOAD) != 0)
5146         {
5147           amt = sizeof (struct elf_segment_map);
5148           m = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
5149           if (m == NULL)
5150             goto error_return;
5151           m->next = NULL;
5152           m->p_type = PT_GNU_EH_FRAME;
5153           m->count = 1;
5154           m->sections[0] = eh_frame_hdr->output_section;
5155
5156           *pm = m;
5157           pm = &m->next;
5158         }
5159
5160       if (elf_stack_flags (abfd))
5161         {
5162           amt = sizeof (struct elf_segment_map);
5163           m = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
5164           if (m == NULL)
5165             goto error_return;
5166           m->next = NULL;
5167           m->p_type = PT_GNU_STACK;
5168           m->p_flags = elf_stack_flags (abfd);
5169           m->p_align = bed->stack_align;
5170           m->p_flags_valid = 1;
5171           m->p_align_valid = m->p_align != 0;
5172           if (info->stacksize > 0)
5173             {
5174               m->p_size = info->stacksize;
5175               m->p_size_valid = 1;
5176             }
5177
5178           *pm = m;
5179           pm = &m->next;
5180         }
5181
5182       if (info != NULL && info->relro)
5183         {
5184           for (m = mfirst; m != NULL; m = m->next)
5185             {
5186               if (m->p_type == PT_LOAD
5187                   && m->count != 0
5188                   && m->sections[0]->vma >= info->relro_start
5189                   && m->sections[0]->vma < info->relro_end)
5190                 {
5191                   i = m->count;
5192                   while (--i != (unsigned) -1)
5193                     {
5194                       if (m->sections[i]->size > 0
5195                           && (m->sections[i]->flags & (SEC_LOAD | SEC_HAS_CONTENTS))
5196                           == (SEC_LOAD | SEC_HAS_CONTENTS))
5197                         break;
5198                     }
5199
5200                   if (i != (unsigned) -1)
5201                     break;
5202                 }
5203             }
5204
5205           /* Make a PT_GNU_RELRO segment only when it isn't empty.  */
5206           if (m != NULL)
5207             {
5208               amt = sizeof (struct elf_segment_map);
5209               m = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
5210               if (m == NULL)
5211                 goto error_return;
5212               m->next = NULL;
5213               m->p_type = PT_GNU_RELRO;
5214               *pm = m;
5215               pm = &m->next;
5216             }
5217         }
5218
5219       free (sections);
5220       elf_seg_map (abfd) = mfirst;
5221     }
5222
5223   if (!elf_modify_segment_map (abfd, info, no_user_phdrs))
5224     return FALSE;
5225
5226   for (count = 0, m = elf_seg_map (abfd); m != NULL; m = m->next)
5227     ++count;
5228   elf_program_header_size (abfd) = count * bed->s->sizeof_phdr;
5229
5230   return TRUE;
5231
5232  error_return:
5233   free (sections);
5234   return FALSE;
5235 }
5236
5237 /* Sort sections by address.  */
5238
5239 static int
5240 elf_sort_sections (const void *arg1, const void *arg2)
5241 {
5242   const asection *sec1 = *(const asection **) arg1;
5243   const asection *sec2 = *(const asection **) arg2;
5244   bfd_size_type size1, size2;
5245
5246   /* Sort by LMA first, since this is the address used to
5247      place the section into a segment.  */
5248   if (sec1->lma < sec2->lma)
5249     return -1;
5250   else if (sec1->lma > sec2->lma)
5251     return 1;
5252
5253   /* Then sort by VMA.  Normally the LMA and the VMA will be
5254      the same, and this will do nothing.  */
5255   if (sec1->vma < sec2->vma)
5256     return -1;
5257   else if (sec1->vma > sec2->vma)
5258     return 1;
5259
5260   /* Put !SEC_LOAD sections after SEC_LOAD ones.  */
5261
5262 #define TOEND(x) (((x)->flags & (SEC_LOAD | SEC_THREAD_LOCAL)) == 0)
5263
5264   if (TOEND (sec1))
5265     {
5266       if (!TOEND (sec2))
5267         return 1;
5268     }
5269   else if (TOEND (sec2))
5270     return -1;
5271
5272 #undef TOEND
5273
5274   /* Sort by size, to put zero sized sections
5275      before others at the same address.  */
5276
5277   size1 = (sec1->flags & SEC_LOAD) ? sec1->size : 0;
5278   size2 = (sec2->flags & SEC_LOAD) ? sec2->size : 0;
5279
5280   if (size1 < size2)
5281     return -1;
5282   if (size1 > size2)
5283     return 1;
5284
5285   return sec1->target_index - sec2->target_index;
5286 }
5287
5288 /* This qsort comparison functions sorts PT_LOAD segments first and
5289    by p_paddr, for assign_file_positions_for_load_sections.  */
5290
5291 static int
5292 elf_sort_segments (const void *arg1, const void *arg2)
5293 {
5294   const struct elf_segment_map *m1 = *(const struct elf_segment_map **) arg1;
5295   const struct elf_segment_map *m2 = *(const struct elf_segment_map **) arg2;
5296
5297   if (m1->p_type != m2->p_type)
5298     {
5299       if (m1->p_type == PT_NULL)
5300         return 1;
5301       if (m2->p_type == PT_NULL)
5302         return -1;
5303       return m1->p_type < m2->p_type ? -1 : 1;
5304     }
5305   if (m1->includes_filehdr != m2->includes_filehdr)
5306     return m1->includes_filehdr ? -1 : 1;
5307   if (m1->no_sort_lma != m2->no_sort_lma)
5308     return m1->no_sort_lma ? -1 : 1;
5309   if (m1->p_type == PT_LOAD && !m1->no_sort_lma)
5310     {
5311       bfd_vma lma1, lma2;  /* Octets.  */
5312       lma1 = 0;
5313       if (m1->p_paddr_valid)
5314         lma1 = m1->p_paddr;
5315       else if (m1->count != 0)
5316         {
5317           unsigned int opb = bfd_octets_per_byte (m1->sections[0]->owner,
5318                                                   m1->sections[0]);
5319           lma1 = (m1->sections[0]->lma + m1->p_vaddr_offset) * opb;
5320         }
5321       lma2 = 0;
5322       if (m2->p_paddr_valid)
5323         lma2 = m2->p_paddr;
5324       else if (m2->count != 0)
5325         {
5326           unsigned int opb = bfd_octets_per_byte (m2->sections[0]->owner,
5327                                                   m2->sections[0]);
5328           lma2 = (m2->sections[0]->lma + m2->p_vaddr_offset) * opb;
5329         }
5330       if (lma1 != lma2)
5331         return lma1 < lma2 ? -1 : 1;
5332     }
5333   if (m1->idx != m2->idx)
5334     return m1->idx < m2->idx ? -1 : 1;
5335   return 0;
5336 }
5337
5338 /* Ian Lance Taylor writes:
5339
5340    We shouldn't be using % with a negative signed number.  That's just
5341    not good.  We have to make sure either that the number is not
5342    negative, or that the number has an unsigned type.  When the types
5343    are all the same size they wind up as unsigned.  When file_ptr is a
5344    larger signed type, the arithmetic winds up as signed long long,
5345    which is wrong.
5346
5347    What we're trying to say here is something like ``increase OFF by
5348    the least amount that will cause it to be equal to the VMA modulo
5349    the page size.''  */
5350 /* In other words, something like:
5351
5352    vma_offset = m->sections[0]->vma % bed->maxpagesize;
5353    off_offset = off % bed->maxpagesize;
5354    if (vma_offset < off_offset)
5355      adjustment = vma_offset + bed->maxpagesize - off_offset;
5356    else
5357      adjustment = vma_offset - off_offset;
5358
5359    which can be collapsed into the expression below.  */
5360
5361 static file_ptr
5362 vma_page_aligned_bias (bfd_vma vma, ufile_ptr off, bfd_vma maxpagesize)
5363 {
5364   /* PR binutils/16199: Handle an alignment of zero.  */
5365   if (maxpagesize == 0)
5366     maxpagesize = 1;
5367   return ((vma - off) % maxpagesize);
5368 }
5369
5370 static void
5371 print_segment_map (const struct elf_segment_map *m)
5372 {
5373   unsigned int j;
5374   const char *pt = get_segment_type (m->p_type);
5375   char buf[32];
5376
5377   if (pt == NULL)
5378     {
5379       if (m->p_type >= PT_LOPROC && m->p_type <= PT_HIPROC)
5380         sprintf (buf, "LOPROC+%7.7x",
5381                  (unsigned int) (m->p_type - PT_LOPROC));
5382       else if (m->p_type >= PT_LOOS && m->p_type <= PT_HIOS)
5383         sprintf (buf, "LOOS+%7.7x",
5384                  (unsigned int) (m->p_type - PT_LOOS));
5385       else
5386         snprintf (buf, sizeof (buf), "%8.8x",
5387                   (unsigned int) m->p_type);
5388       pt = buf;
5389     }
5390   fflush (stdout);
5391   fprintf (stderr, "%s:", pt);
5392   for (j = 0; j < m->count; j++)
5393     fprintf (stderr, " %s", m->sections [j]->name);
5394   putc ('\n',stderr);
5395   fflush (stderr);
5396 }
5397
5398 static bfd_boolean
5399 write_zeros (bfd *abfd, file_ptr pos, bfd_size_type len)
5400 {
5401   void *buf;
5402   bfd_boolean ret;
5403
5404   if (bfd_seek (abfd, pos, SEEK_SET) != 0)
5405     return FALSE;
5406   buf = bfd_zmalloc (len);
5407   if (buf == NULL)
5408     return FALSE;
5409   ret = bfd_bwrite (buf, len, abfd) == len;
5410   free (buf);
5411   return ret;
5412 }
5413
5414 /* Assign file positions to the sections based on the mapping from
5415    sections to segments.  This function also sets up some fields in
5416    the file header.  */
5417
5418 static bfd_boolean
5419 assign_file_positions_for_load_sections (bfd *abfd,
5420                                          struct bfd_link_info *link_info)
5421 {
5422   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
5423   struct elf_segment_map *m;
5424   struct elf_segment_map *phdr_load_seg;
5425   Elf_Internal_Phdr *phdrs;
5426   Elf_Internal_Phdr *p;
5427   file_ptr off;  /* Octets.  */
5428   bfd_size_type maxpagesize;
5429   unsigned int alloc, actual;
5430   unsigned int i, j;
5431   struct elf_segment_map **sorted_seg_map;
5432   unsigned int opb = bfd_octets_per_byte (abfd, NULL);
5433
5434   if (link_info == NULL
5435       && !_bfd_elf_map_sections_to_segments (abfd, link_info))
5436     return FALSE;
5437
5438   alloc = 0;
5439   for (m = elf_seg_map (abfd); m != NULL; m = m->next)
5440     m->idx = alloc++;
5441
5442   if (alloc)
5443     {
5444       elf_elfheader (abfd)->e_phoff = bed->s->sizeof_ehdr;
5445       elf_elfheader (abfd)->e_phentsize = bed->s->sizeof_phdr;
5446     }
5447   else
5448     {
5449       /* PR binutils/12467.  */
5450       elf_elfheader (abfd)->e_phoff = 0;
5451       elf_elfheader (abfd)->e_phentsize = 0;
5452     }
5453
5454   elf_elfheader (abfd)->e_phnum = alloc;
5455
5456   if (elf_program_header_size (abfd) == (bfd_size_type) -1)
5457     {
5458       actual = alloc;
5459       elf_program_header_size (abfd) = alloc * bed->s->sizeof_phdr;
5460     }
5461   else
5462     {
5463       actual = elf_program_header_size (abfd) / bed->s->sizeof_phdr;
5464       BFD_ASSERT (elf_program_header_size (abfd)
5465                   == actual * bed->s->sizeof_phdr);
5466       BFD_ASSERT (actual >= alloc);
5467     }
5468
5469   if (alloc == 0)
5470     {
5471       elf_next_file_pos (abfd) = bed->s->sizeof_ehdr;
5472       return TRUE;
5473     }
5474
5475   /* We're writing the size in elf_program_header_size (abfd),
5476      see assign_file_positions_except_relocs, so make sure we have
5477      that amount allocated, with trailing space cleared.
5478      The variable alloc contains the computed need, while
5479      elf_program_header_size (abfd) contains the size used for the
5480      layout.
5481      See ld/emultempl/elf-generic.em:gld${EMULATION_NAME}_map_segments
5482      where the layout is forced to according to a larger size in the
5483      last iterations for the testcase ld-elf/header.  */
5484   phdrs = bfd_zalloc (abfd, (actual * sizeof (*phdrs)
5485                              + alloc * sizeof (*sorted_seg_map)));
5486   sorted_seg_map = (struct elf_segment_map **) (phdrs + actual);
5487   elf_tdata (abfd)->phdr = phdrs;
5488   if (phdrs == NULL)
5489     return FALSE;
5490
5491   for (m = elf_seg_map (abfd), j = 0; m != NULL; m = m->next, j++)
5492     {
5493       sorted_seg_map[j] = m;
5494       /* If elf_segment_map is not from map_sections_to_segments, the
5495          sections may not be correctly ordered.  NOTE: sorting should
5496          not be done to the PT_NOTE section of a corefile, which may
5497          contain several pseudo-sections artificially created by bfd.
5498          Sorting these pseudo-sections breaks things badly.  */
5499       if (m->count > 1
5500           && !(elf_elfheader (abfd)->e_type == ET_CORE
5501                && m->p_type == PT_NOTE))
5502         {
5503           for (i = 0; i < m->count; i++)
5504             m->sections[i]->target_index = i;
5505           qsort (m->sections, (size_t) m->count, sizeof (asection *),
5506                  elf_sort_sections);
5507         }
5508     }
5509   if (alloc > 1)
5510     qsort (sorted_seg_map, alloc, sizeof (*sorted_seg_map),
5511            elf_sort_segments);
5512
5513   maxpagesize = 1;
5514   if ((abfd->flags & D_PAGED) != 0)
5515     maxpagesize = bed->maxpagesize;
5516
5517   /* Sections must map to file offsets past the ELF file header.  */
5518   off = bed->s->sizeof_ehdr;
5519   /* And if one of the PT_LOAD headers doesn't include the program
5520      headers then we'll be mapping program headers in the usual
5521      position after the ELF file header.  */
5522   phdr_load_seg = NULL;
5523   for (j = 0; j < alloc; j++)
5524     {
5525       m = sorted_seg_map[j];
5526       if (m->p_type != PT_LOAD)
5527         break;
5528       if (m->includes_phdrs)
5529         {
5530           phdr_load_seg = m;
5531           break;
5532         }
5533     }
5534   if (phdr_load_seg == NULL)
5535     off += actual * bed->s->sizeof_phdr;
5536
5537   for (j = 0; j < alloc; j++)
5538     {
5539       asection **secpp;
5540       bfd_vma off_adjust;  /* Octets.  */
5541       bfd_boolean no_contents;
5542
5543       /* An ELF segment (described by Elf_Internal_Phdr) may contain a
5544          number of sections with contents contributing to both p_filesz
5545          and p_memsz, followed by a number of sections with no contents
5546          that just contribute to p_memsz.  In this loop, OFF tracks next
5547          available file offset for PT_LOAD and PT_NOTE segments.  */
5548       m = sorted_seg_map[j];
5549       p = phdrs + m->idx;
5550       p->p_type = m->p_type;
5551       p->p_flags = m->p_flags;
5552
5553       if (m->count == 0)
5554         p->p_vaddr = m->p_vaddr_offset * opb;
5555       else
5556         p->p_vaddr = (m->sections[0]->vma + m->p_vaddr_offset) * opb;
5557
5558       if (m->p_paddr_valid)
5559         p->p_paddr = m->p_paddr;
5560       else if (m->count == 0)
5561         p->p_paddr = 0;
5562       else
5563         p->p_paddr = (m->sections[0]->lma + m->p_vaddr_offset) * opb;
5564
5565       if (p->p_type == PT_LOAD
5566           && (abfd->flags & D_PAGED) != 0)
5567         {
5568           /* p_align in demand paged PT_LOAD segments effectively stores
5569              the maximum page size.  When copying an executable with
5570              objcopy, we set m->p_align from the input file.  Use this
5571              value for maxpagesize rather than bed->maxpagesize, which
5572              may be different.  Note that we use maxpagesize for PT_TLS
5573              segment alignment later in this function, so we are relying
5574              on at least one PT_LOAD segment appearing before a PT_TLS
5575              segment.  */
5576           if (m->p_align_valid)
5577             maxpagesize = m->p_align;
5578
5579           p->p_align = maxpagesize;
5580         }
5581       else if (m->p_align_valid)
5582         p->p_align = m->p_align;
5583       else if (m->count == 0)
5584         p->p_align = 1 << bed->s->log_file_align;
5585
5586       if (m == phdr_load_seg)
5587         {
5588           if (!m->includes_filehdr)
5589             p->p_offset = off;
5590           off += actual * bed->s->sizeof_phdr;
5591         }
5592
5593       no_contents = FALSE;
5594       off_adjust = 0;
5595       if (p->p_type == PT_LOAD
5596           && m->count > 0)
5597         {
5598           bfd_size_type align;  /* Bytes.  */
5599           unsigned int align_power = 0;
5600
5601           if (m->p_align_valid)
5602             align = p->p_align;
5603           else
5604             {
5605               for (i = 0, secpp = m->sections; i < m->count; i++, secpp++)
5606                 {
5607                   unsigned int secalign;
5608
5609                   secalign = bfd_section_alignment (*secpp);
5610                   if (secalign > align_power)
5611                     align_power = secalign;
5612                 }
5613               align = (bfd_size_type) 1 << align_power;
5614               if (align < maxpagesize)
5615                 align = maxpagesize;
5616             }
5617
5618           for (i = 0; i < m->count; i++)
5619             if ((m->sections[i]->flags & (SEC_LOAD | SEC_HAS_CONTENTS)) == 0)
5620               /* If we aren't making room for this section, then
5621                  it must be SHT_NOBITS regardless of what we've
5622                  set via struct bfd_elf_special_section.  */
5623               elf_section_type (m->sections[i]) = SHT_NOBITS;
5624
5625           /* Find out whether this segment contains any loadable
5626              sections.  */
5627           no_contents = TRUE;
5628           for (i = 0; i < m->count; i++)
5629             if (elf_section_type (m->sections[i]) != SHT_NOBITS)
5630               {
5631                 no_contents = FALSE;
5632                 break;
5633               }
5634
5635           off_adjust = vma_page_aligned_bias (p->p_vaddr, off, align * opb);
5636
5637           /* Broken hardware and/or kernel require that files do not
5638              map the same page with different permissions on some hppa
5639              processors.  */
5640           if (j != 0
5641               && (abfd->flags & D_PAGED) != 0
5642               && bed->no_page_alias
5643               && (off & (maxpagesize - 1)) != 0
5644               && ((off & -maxpagesize)
5645                   == ((off + off_adjust) & -maxpagesize)))
5646             off_adjust += maxpagesize;
5647           off += off_adjust;
5648           if (no_contents)
5649             {
5650               /* We shouldn't need to align the segment on disk since
5651                  the segment doesn't need file space, but the gABI
5652                  arguably requires the alignment and glibc ld.so
5653                  checks it.  So to comply with the alignment
5654                  requirement but not waste file space, we adjust
5655                  p_offset for just this segment.  (OFF_ADJUST is
5656                  subtracted from OFF later.)  This may put p_offset
5657                  past the end of file, but that shouldn't matter.  */
5658             }
5659           else
5660             off_adjust = 0;
5661         }
5662       /* Make sure the .dynamic section is the first section in the
5663          PT_DYNAMIC segment.  */
5664       else if (p->p_type == PT_DYNAMIC
5665                && m->count > 1
5666                && strcmp (m->sections[0]->name, ".dynamic") != 0)
5667         {
5668           _bfd_error_handler
5669             (_("%pB: The first section in the PT_DYNAMIC segment"
5670                " is not the .dynamic section"),
5671              abfd);
5672           bfd_set_error (bfd_error_bad_value);
5673           return FALSE;
5674         }
5675       /* Set the note section type to SHT_NOTE.  */
5676       else if (p->p_type == PT_NOTE)
5677         for (i = 0; i < m->count; i++)
5678           elf_section_type (m->sections[i]) = SHT_NOTE;
5679
5680       if (m->includes_filehdr)
5681         {
5682           if (!m->p_flags_valid)
5683             p->p_flags |= PF_R;
5684           p->p_filesz = bed->s->sizeof_ehdr;
5685           p->p_memsz = bed->s->sizeof_ehdr;
5686           if (p->p_type == PT_LOAD)
5687             {
5688               if (m->count > 0)
5689                 {
5690                   if (p->p_vaddr < (bfd_vma) off
5691                       || (!m->p_paddr_valid
5692                           && p->p_paddr < (bfd_vma) off))
5693                     {
5694                       _bfd_error_handler
5695                         (_("%pB: not enough room for program headers,"
5696                            " try linking with -N"),
5697                          abfd);
5698                       bfd_set_error (bfd_error_bad_value);
5699                       return FALSE;
5700                     }
5701                   p->p_vaddr -= off;
5702                   if (!m->p_paddr_valid)
5703                     p->p_paddr -= off;
5704                 }
5705             }
5706           else if (sorted_seg_map[0]->includes_filehdr)
5707             {
5708               Elf_Internal_Phdr *filehdr = phdrs + sorted_seg_map[0]->idx;
5709               p->p_vaddr = filehdr->p_vaddr;
5710               if (!m->p_paddr_valid)
5711                 p->p_paddr = filehdr->p_paddr;
5712             }
5713         }
5714
5715       if (m->includes_phdrs)
5716         {
5717           if (!m->p_flags_valid)
5718             p->p_flags |= PF_R;
5719           p->p_filesz += actual * bed->s->sizeof_phdr;
5720           p->p_memsz += actual * bed->s->sizeof_phdr;
5721           if (!m->includes_filehdr)
5722             {
5723               if (p->p_type == PT_LOAD)
5724                 {
5725                   elf_elfheader (abfd)->e_phoff = p->p_offset;
5726                   if (m->count > 0)
5727                     {
5728                       p->p_vaddr -= off - p->p_offset;
5729                       if (!m->p_paddr_valid)
5730                         p->p_paddr -= off - p->p_offset;
5731                     }
5732                 }
5733               else if (phdr_load_seg != NULL)
5734                 {
5735                   Elf_Internal_Phdr *phdr = phdrs + phdr_load_seg->idx;
5736                   bfd_vma phdr_off = 0;  /* Octets.  */
5737                   if (phdr_load_seg->includes_filehdr)
5738                     phdr_off = bed->s->sizeof_ehdr;
5739                   p->p_vaddr = phdr->p_vaddr + phdr_off;
5740                   if (!m->p_paddr_valid)
5741                     p->p_paddr = phdr->p_paddr + phdr_off;
5742                   p->p_offset = phdr->p_offset + phdr_off;
5743                 }
5744               else
5745                 p->p_offset = bed->s->sizeof_ehdr;
5746             }
5747         }
5748
5749       if (p->p_type == PT_LOAD
5750           || (p->p_type == PT_NOTE && bfd_get_format (abfd) == bfd_core))
5751         {
5752           if (!m->includes_filehdr && !m->includes_phdrs)
5753             {
5754               p->p_offset = off;
5755               if (no_contents)
5756                 {
5757                   /* Put meaningless p_offset for PT_LOAD segments
5758                      without file contents somewhere within the first
5759                      page, in an attempt to not point past EOF.  */
5760                   bfd_size_type align = maxpagesize;
5761                   if (align < p->p_align)
5762                     align = p->p_align;
5763                   if (align < 1)
5764                     align = 1;
5765                   p->p_offset = off % align;
5766                 }
5767             }
5768           else
5769             {
5770               file_ptr adjust;  /* Octets.  */
5771
5772               adjust = off - (p->p_offset + p->p_filesz);
5773               if (!no_contents)
5774                 p->p_filesz += adjust;
5775               p->p_memsz += adjust;
5776             }
5777         }
5778
5779       /* Set up p_filesz, p_memsz, p_align and p_flags from the section
5780          maps.  Set filepos for sections in PT_LOAD segments, and in
5781          core files, for sections in PT_NOTE segments.
5782          assign_file_positions_for_non_load_sections will set filepos
5783          for other sections and update p_filesz for other segments.  */
5784       for (i = 0, secpp = m->sections; i < m->count; i++, secpp++)
5785         {
5786           asection *sec;
5787           bfd_size_type align;
5788           Elf_Internal_Shdr *this_hdr;
5789
5790           sec = *secpp;
5791           this_hdr = &elf_section_data (sec)->this_hdr;
5792           align = (bfd_size_type) 1 << bfd_section_alignment (sec);
5793
5794           if ((p->p_type == PT_LOAD
5795                || p->p_type == PT_TLS)
5796               && (this_hdr->sh_type != SHT_NOBITS
5797                   || ((this_hdr->sh_flags & SHF_ALLOC) != 0
5798                       && ((this_hdr->sh_flags & SHF_TLS) == 0
5799                           || p->p_type == PT_TLS))))
5800             {
5801               bfd_vma p_start = p->p_paddr;                /* Octets.  */
5802               bfd_vma p_end = p_start + p->p_memsz;        /* Octets.  */
5803               bfd_vma s_start = sec->lma * opb;            /* Octets.  */
5804               bfd_vma adjust = s_start - p_end;            /* Octets.  */
5805
5806               if (adjust != 0
5807                   && (s_start < p_end
5808                       || p_end < p_start))
5809                 {
5810                   _bfd_error_handler
5811                     /* xgettext:c-format */
5812                     (_("%pB: section %pA lma %#" PRIx64 " adjusted to %#" PRIx64),
5813                      abfd, sec, (uint64_t) s_start / opb,
5814                      (uint64_t) p_end / opb);
5815                   adjust = 0;
5816                   sec->lma = p_end / opb;
5817                 }
5818               p->p_memsz += adjust;
5819
5820               if (p->p_type == PT_LOAD)
5821                 {
5822                   if (this_hdr->sh_type != SHT_NOBITS)
5823                     {
5824                       off_adjust = 0;
5825                       if (p->p_filesz + adjust < p->p_memsz)
5826                         {
5827                           /* We have a PROGBITS section following NOBITS ones.
5828                              Allocate file space for the NOBITS section(s) and
5829                              zero it.  */
5830                           adjust = p->p_memsz - p->p_filesz;
5831                           if (!write_zeros (abfd, off, adjust))
5832                             return FALSE;
5833                         }
5834                     }
5835                   /* We only adjust sh_offset in SHT_NOBITS sections
5836                      as would seem proper for their address when the
5837                      section is first in the segment.  sh_offset
5838                      doesn't really have any significance for
5839                      SHT_NOBITS anyway, apart from a notional position
5840                      relative to other sections.  Historically we
5841                      didn't bother with adjusting sh_offset and some
5842                      programs depend on it not being adjusted.  See
5843                      pr12921 and pr25662.  */
5844                   if (this_hdr->sh_type != SHT_NOBITS || i == 0)
5845                     {
5846                       off += adjust;
5847                       if (this_hdr->sh_type == SHT_NOBITS)
5848                         off_adjust += adjust;
5849                     }
5850                 }
5851               if (this_hdr->sh_type != SHT_NOBITS)
5852                 p->p_filesz += adjust;
5853             }
5854
5855           if (p->p_type == PT_NOTE && bfd_get_format (abfd) == bfd_core)
5856             {
5857               /* The section at i == 0 is the one that actually contains
5858                  everything.  */
5859               if (i == 0)
5860                 {
5861                   this_hdr->sh_offset = sec->filepos = off;
5862                   off += this_hdr->sh_size;
5863                   p->p_filesz = this_hdr->sh_size;
5864                   p->p_memsz = 0;
5865                   p->p_align = 1;
5866                 }
5867               else
5868                 {
5869                   /* The rest are fake sections that shouldn't be written.  */
5870                   sec->filepos = 0;
5871                   sec->size = 0;
5872                   sec->flags = 0;
5873                   continue;
5874                 }
5875             }
5876           else
5877             {
5878               if (p->p_type == PT_LOAD)
5879                 {
5880                   this_hdr->sh_offset = sec->filepos = off;
5881                   if (this_hdr->sh_type != SHT_NOBITS)
5882                     off += this_hdr->sh_size;
5883                 }
5884               else if (this_hdr->sh_type == SHT_NOBITS
5885                        && (this_hdr->sh_flags & SHF_TLS) != 0
5886                        && this_hdr->sh_offset == 0)
5887                 {
5888                   /* This is a .tbss section that didn't get a PT_LOAD.
5889                      (See _bfd_elf_map_sections_to_segments "Create a
5890                      final PT_LOAD".)  Set sh_offset to the value it
5891                      would have if we had created a zero p_filesz and
5892                      p_memsz PT_LOAD header for the section.  This
5893                      also makes the PT_TLS header have the same
5894                      p_offset value.  */
5895                   bfd_vma adjust = vma_page_aligned_bias (this_hdr->sh_addr,
5896                                                           off, align);
5897                   this_hdr->sh_offset = sec->filepos = off + adjust;
5898                 }
5899
5900               if (this_hdr->sh_type != SHT_NOBITS)
5901                 {
5902                   p->p_filesz += this_hdr->sh_size;
5903                   /* A load section without SHF_ALLOC is something like
5904                      a note section in a PT_NOTE segment.  These take
5905                      file space but are not loaded into memory.  */
5906                   if ((this_hdr->sh_flags & SHF_ALLOC) != 0)
5907                     p->p_memsz += this_hdr->sh_size;
5908                 }
5909               else if ((this_hdr->sh_flags & SHF_ALLOC) != 0)
5910                 {
5911                   if (p->p_type == PT_TLS)
5912                     p->p_memsz += this_hdr->sh_size;
5913
5914                   /* .tbss is special.  It doesn't contribute to p_memsz of
5915                      normal segments.  */
5916                   else if ((this_hdr->sh_flags & SHF_TLS) == 0)
5917                     p->p_memsz += this_hdr->sh_size;
5918                 }
5919
5920               if (align > p->p_align
5921                   && !m->p_align_valid
5922                   && (p->p_type != PT_LOAD
5923                       || (abfd->flags & D_PAGED) == 0))
5924                 p->p_align = align;
5925             }
5926
5927           if (!m->p_flags_valid)
5928             {
5929               p->p_flags |= PF_R;
5930               if ((this_hdr->sh_flags & SHF_EXECINSTR) != 0)
5931                 p->p_flags |= PF_X;
5932               if ((this_hdr->sh_flags & SHF_WRITE) != 0)
5933                 p->p_flags |= PF_W;
5934             }
5935         }
5936
5937       off -= off_adjust;
5938
5939       /* PR ld/20815 - Check that the program header segment, if
5940          present, will be loaded into memory.  */
5941       if (p->p_type == PT_PHDR
5942           && phdr_load_seg == NULL
5943           && !(bed->elf_backend_allow_non_load_phdr != NULL
5944                && bed->elf_backend_allow_non_load_phdr (abfd, phdrs, alloc)))
5945         {
5946           /* The fix for this error is usually to edit the linker script being
5947              used and set up the program headers manually.  Either that or
5948              leave room for the headers at the start of the SECTIONS.  */
5949           _bfd_error_handler (_("%pB: error: PHDR segment not covered"
5950                                 " by LOAD segment"),
5951                               abfd);
5952           if (link_info == NULL)
5953             return FALSE;
5954           /* Arrange for the linker to exit with an error, deleting
5955              the output file unless --noinhibit-exec is given.  */
5956           link_info->callbacks->info ("%X");
5957         }
5958
5959       /* Check that all sections are in a PT_LOAD segment.
5960          Don't check funky gdb generated core files.  */
5961       if (p->p_type == PT_LOAD && bfd_get_format (abfd) != bfd_core)
5962         {
5963           bfd_boolean check_vma = TRUE;
5964
5965           for (i = 1; i < m->count; i++)
5966             if (m->sections[i]->vma == m->sections[i - 1]->vma
5967                 && ELF_SECTION_SIZE (&(elf_section_data (m->sections[i])
5968                                        ->this_hdr), p) != 0
5969                 && ELF_SECTION_SIZE (&(elf_section_data (m->sections[i - 1])
5970                                        ->this_hdr), p) != 0)
5971               {
5972                 /* Looks like we have overlays packed into the segment.  */
5973                 check_vma = FALSE;
5974                 break;
5975               }
5976
5977           for (i = 0; i < m->count; i++)
5978             {
5979               Elf_Internal_Shdr *this_hdr;
5980               asection *sec;
5981
5982               sec = m->sections[i];
5983               this_hdr = &(elf_section_data(sec)->this_hdr);
5984               if (!ELF_SECTION_IN_SEGMENT_1 (this_hdr, p, check_vma, 0)
5985                   && !ELF_TBSS_SPECIAL (this_hdr, p))
5986                 {
5987                   _bfd_error_handler
5988                     /* xgettext:c-format */
5989                     (_("%pB: section `%pA' can't be allocated in segment %d"),
5990                      abfd, sec, j);
5991                   print_segment_map (m);
5992                 }
5993             }
5994         }
5995     }
5996
5997   elf_next_file_pos (abfd) = off;
5998
5999   if (link_info != NULL
6000       && phdr_load_seg != NULL
6001       && phdr_load_seg->includes_filehdr)
6002     {
6003       /* There is a segment that contains both the file headers and the
6004          program headers, so provide a symbol __ehdr_start pointing there.
6005          A program can use this to examine itself robustly.  */
6006
6007       struct elf_link_hash_entry *hash
6008         = elf_link_hash_lookup (elf_hash_table (link_info), "__ehdr_start",
6009                                 FALSE, FALSE, TRUE);
6010       /* If the symbol was referenced and not defined, define it.  */
6011       if (hash != NULL
6012           && (hash->root.type == bfd_link_hash_new
6013               || hash->root.type == bfd_link_hash_undefined
6014               || hash->root.type == bfd_link_hash_undefweak
6015               || hash->root.type == bfd_link_hash_common))
6016         {
6017           asection *s = NULL;
6018           bfd_vma filehdr_vaddr = phdrs[phdr_load_seg->idx].p_vaddr / opb;
6019
6020           if (phdr_load_seg->count != 0)
6021             /* The segment contains sections, so use the first one.  */
6022             s = phdr_load_seg->sections[0];
6023           else
6024             /* Use the first (i.e. lowest-addressed) section in any segment.  */
6025             for (m = elf_seg_map (abfd); m != NULL; m = m->next)
6026               if (m->p_type == PT_LOAD && m->count != 0)
6027                 {
6028                   s = m->sections[0];
6029                   break;
6030                 }
6031
6032           if (s != NULL)
6033             {
6034               hash->root.u.def.value = filehdr_vaddr - s->vma;
6035               hash->root.u.def.section = s;
6036             }
6037           else
6038             {
6039               hash->root.u.def.value = filehdr_vaddr;
6040               hash->root.u.def.section = bfd_abs_section_ptr;
6041             }
6042
6043           hash->root.type = bfd_link_hash_defined;
6044           hash->def_regular = 1;
6045           hash->non_elf = 0;
6046         }
6047     }
6048
6049   return TRUE;
6050 }
6051
6052 /* Determine if a bfd is a debuginfo file.  Unfortunately there
6053    is no defined method for detecting such files, so we have to
6054    use heuristics instead.  */
6055
6056 bfd_boolean
6057 is_debuginfo_file (bfd *abfd)
6058 {
6059   if (abfd == NULL || bfd_get_flavour (abfd) != bfd_target_elf_flavour)
6060     return FALSE;
6061
6062   Elf_Internal_Shdr **start_headers = elf_elfsections (abfd);
6063   Elf_Internal_Shdr **end_headers = start_headers + elf_numsections (abfd);
6064   Elf_Internal_Shdr **headerp;
6065
6066   for (headerp = start_headers; headerp < end_headers; headerp ++)
6067     {
6068       Elf_Internal_Shdr *header = * headerp;
6069
6070       /* Debuginfo files do not have any allocated SHT_PROGBITS sections.
6071          The only allocated sections are SHT_NOBITS or SHT_NOTES.  */
6072       if ((header->sh_flags & SHF_ALLOC) == SHF_ALLOC
6073           && header->sh_type != SHT_NOBITS
6074           && header->sh_type != SHT_NOTE)
6075         return FALSE;
6076     }
6077
6078   return TRUE;
6079 }
6080
6081 /* Assign file positions for the other sections, except for compressed debugging
6082    and other sections assigned in _bfd_elf_assign_file_positions_for_non_load().  */
6083
6084 static bfd_boolean
6085 assign_file_positions_for_non_load_sections (bfd *abfd,
6086                                              struct bfd_link_info *link_info)
6087 {
6088   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
6089   Elf_Internal_Shdr **i_shdrpp;
6090   Elf_Internal_Shdr **hdrpp, **end_hdrpp;
6091   Elf_Internal_Phdr *phdrs;
6092   Elf_Internal_Phdr *p;
6093   struct elf_segment_map *m;
6094   file_ptr off;
6095   unsigned int opb = bfd_octets_per_byte (abfd, NULL);
6096
6097   i_shdrpp = elf_elfsections (abfd);
6098   end_hdrpp = i_shdrpp + elf_numsections (abfd);
6099   off = elf_next_file_pos (abfd);
6100   for (hdrpp = i_shdrpp + 1; hdrpp < end_hdrpp; hdrpp++)
6101     {
6102       Elf_Internal_Shdr *hdr;
6103
6104       hdr = *hdrpp;
6105       if (hdr->bfd_section != NULL
6106           && (hdr->bfd_section->filepos != 0
6107               || (hdr->sh_type == SHT_NOBITS
6108                   && hdr->contents == NULL)))
6109         BFD_ASSERT (hdr->sh_offset == hdr->bfd_section->filepos);
6110       else if ((hdr->sh_flags & SHF_ALLOC) != 0)
6111         {
6112           if (hdr->sh_size != 0
6113               /* PR 24717 - debuginfo files are known to be not strictly
6114                  compliant with the ELF standard.  In particular they often
6115                  have .note.gnu.property sections that are outside of any
6116                  loadable segment.  This is not a problem for such files,
6117                  so do not warn about them.  */
6118               && ! is_debuginfo_file (abfd))
6119             _bfd_error_handler
6120               /* xgettext:c-format */
6121               (_("%pB: warning: allocated section `%s' not in segment"),
6122                abfd,
6123                (hdr->bfd_section == NULL
6124                 ? "*unknown*"
6125                 : hdr->bfd_section->name));
6126           /* We don't need to page align empty sections.  */
6127           if ((abfd->flags & D_PAGED) != 0 && hdr->sh_size != 0)
6128             off += vma_page_aligned_bias (hdr->sh_addr, off,
6129                                           bed->maxpagesize);
6130           else
6131             off += vma_page_aligned_bias (hdr->sh_addr, off,
6132                                           hdr->sh_addralign);
6133           off = _bfd_elf_assign_file_position_for_section (hdr, off,
6134                                                            FALSE);
6135         }
6136       else if (((hdr->sh_type == SHT_REL || hdr->sh_type == SHT_RELA)
6137                 && hdr->bfd_section == NULL)
6138                /* We don't know the offset of these sections yet: their size has
6139                   not been decided.  */
6140                || (hdr->bfd_section != NULL
6141                    && (hdr->bfd_section->flags & SEC_ELF_COMPRESS
6142                        || (bfd_section_is_ctf (hdr->bfd_section)
6143                            && abfd->is_linker_output)))
6144                || hdr == i_shdrpp[elf_onesymtab (abfd)]
6145                || (elf_symtab_shndx_list (abfd) != NULL
6146                    && hdr == i_shdrpp[elf_symtab_shndx_list (abfd)->ndx])
6147                || hdr == i_shdrpp[elf_strtab_sec (abfd)]
6148                || hdr == i_shdrpp[elf_shstrtab_sec (abfd)])
6149         hdr->sh_offset = -1;
6150       else
6151         off = _bfd_elf_assign_file_position_for_section (hdr, off, TRUE);
6152     }
6153   elf_next_file_pos (abfd) = off;
6154
6155   /* Now that we have set the section file positions, we can set up
6156      the file positions for the non PT_LOAD segments.  */
6157   phdrs = elf_tdata (abfd)->phdr;
6158   for (m = elf_seg_map (abfd), p = phdrs; m != NULL; m = m->next, p++)
6159     {
6160       if (p->p_type == PT_GNU_RELRO)
6161         {
6162           bfd_vma start, end;  /* Bytes.  */
6163           bfd_boolean ok;
6164
6165           if (link_info != NULL)
6166             {
6167               /* During linking the range of the RELRO segment is passed
6168                  in link_info.  Note that there may be padding between
6169                  relro_start and the first RELRO section.  */
6170               start = link_info->relro_start;
6171               end = link_info->relro_end;
6172             }
6173           else if (m->count != 0)
6174             {
6175               if (!m->p_size_valid)
6176                 abort ();
6177               start = m->sections[0]->vma;
6178               end = start + m->p_size / opb;
6179             }
6180           else
6181             {
6182               start = 0;
6183               end = 0;
6184             }
6185
6186           ok = FALSE;
6187           if (start < end)
6188             {
6189               struct elf_segment_map *lm;
6190               const Elf_Internal_Phdr *lp;
6191               unsigned int i;
6192
6193               /* Find a LOAD segment containing a section in the RELRO
6194                  segment.  */
6195               for (lm = elf_seg_map (abfd), lp = phdrs;
6196                    lm != NULL;
6197                    lm = lm->next, lp++)
6198                 {
6199                   if (lp->p_type == PT_LOAD
6200                       && lm->count != 0
6201                       && (lm->sections[lm->count - 1]->vma
6202                           + (!IS_TBSS (lm->sections[lm->count - 1])
6203                              ? lm->sections[lm->count - 1]->size / opb
6204                              : 0)) > start
6205                       && lm->sections[0]->vma < end)
6206                     break;
6207                 }
6208
6209               if (lm != NULL)
6210                 {
6211                   /* Find the section starting the RELRO segment.  */
6212                   for (i = 0; i < lm->count; i++)
6213                     {
6214                       asection *s = lm->sections[i];
6215                       if (s->vma >= start
6216                           && s->vma < end
6217                           && s->size != 0)
6218                         break;
6219                     }
6220
6221                   if (i < lm->count)
6222                     {
6223                       p->p_vaddr = lm->sections[i]->vma * opb;
6224                       p->p_paddr = lm->sections[i]->lma * opb;
6225                       p->p_offset = lm->sections[i]->filepos;
6226                       p->p_memsz = end * opb - p->p_vaddr;
6227                       p->p_filesz = p->p_memsz;
6228
6229                       /* The RELRO segment typically ends a few bytes
6230                          into .got.plt but other layouts are possible.
6231                          In cases where the end does not match any
6232                          loaded section (for instance is in file
6233                          padding), trim p_filesz back to correspond to
6234                          the end of loaded section contents.  */
6235                       if (p->p_filesz > lp->p_vaddr + lp->p_filesz - p->p_vaddr)
6236                         p->p_filesz = lp->p_vaddr + lp->p_filesz - p->p_vaddr;
6237
6238                       /* Preserve the alignment and flags if they are
6239                          valid.  The gold linker generates RW/4 for
6240                          the PT_GNU_RELRO section.  It is better for
6241                          objcopy/strip to honor these attributes
6242                          otherwise gdb will choke when using separate
6243                          debug files.  */
6244                       if (!m->p_align_valid)
6245                         p->p_align = 1;
6246                       if (!m->p_flags_valid)
6247                         p->p_flags = PF_R;
6248                       ok = TRUE;
6249                     }
6250                 }
6251             }
6252           if (link_info != NULL)
6253             BFD_ASSERT (ok);
6254           if (!ok)
6255             memset (p, 0, sizeof *p);
6256         }
6257       else if (p->p_type == PT_GNU_STACK)
6258         {
6259           if (m->p_size_valid)
6260             p->p_memsz = m->p_size;
6261         }
6262       else if (m->count != 0)
6263         {
6264           unsigned int i;
6265
6266           if (p->p_type != PT_LOAD
6267               && (p->p_type != PT_NOTE
6268                   || bfd_get_format (abfd) != bfd_core))
6269             {
6270               /* A user specified segment layout may include a PHDR
6271                  segment that overlaps with a LOAD segment...  */
6272               if (p->p_type == PT_PHDR)
6273                 {
6274                   m->count = 0;
6275                   continue;
6276                 }
6277
6278               if (m->includes_filehdr || m->includes_phdrs)
6279                 {
6280                   /* PR 17512: file: 2195325e.  */
6281                   _bfd_error_handler
6282                     (_("%pB: error: non-load segment %d includes file header "
6283                        "and/or program header"),
6284                      abfd, (int) (p - phdrs));
6285                   return FALSE;
6286                 }
6287
6288               p->p_filesz = 0;
6289               p->p_offset = m->sections[0]->filepos;
6290               for (i = m->count; i-- != 0;)
6291                 {
6292                   asection *sect = m->sections[i];
6293                   Elf_Internal_Shdr *hdr = &elf_section_data (sect)->this_hdr;
6294                   if (hdr->sh_type != SHT_NOBITS)
6295                     {
6296                       p->p_filesz = (sect->filepos - m->sections[0]->filepos
6297                                      + hdr->sh_size);
6298                       break;
6299                     }
6300                 }
6301             }
6302         }
6303     }
6304
6305   return TRUE;
6306 }
6307
6308 static elf_section_list *
6309 find_section_in_list (unsigned int i, elf_section_list * list)
6310 {
6311   for (;list != NULL; list = list->next)
6312     if (list->ndx == i)
6313       break;
6314   return list;
6315 }
6316
6317 /* Work out the file positions of all the sections.  This is called by
6318    _bfd_elf_compute_section_file_positions.  All the section sizes and
6319    VMAs must be known before this is called.
6320
6321    Reloc sections come in two flavours: Those processed specially as
6322    "side-channel" data attached to a section to which they apply, and those that
6323    bfd doesn't process as relocations.  The latter sort are stored in a normal
6324    bfd section by bfd_section_from_shdr.  We don't consider the former sort
6325    here, unless they form part of the loadable image.  Reloc sections not
6326    assigned here (and compressed debugging sections and CTF sections which
6327    nothing else in the file can rely upon) will be handled later by
6328    assign_file_positions_for_relocs.
6329
6330    We also don't set the positions of the .symtab and .strtab here.  */
6331
6332 static bfd_boolean
6333 assign_file_positions_except_relocs (bfd *abfd,
6334                                      struct bfd_link_info *link_info)
6335 {
6336   struct elf_obj_tdata *tdata = elf_tdata (abfd);
6337   Elf_Internal_Ehdr *i_ehdrp = elf_elfheader (abfd);
6338   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
6339   unsigned int alloc;
6340
6341   if ((abfd->flags & (EXEC_P | DYNAMIC)) == 0
6342       && bfd_get_format (abfd) != bfd_core)
6343     {
6344       Elf_Internal_Shdr ** const i_shdrpp = elf_elfsections (abfd);
6345       unsigned int num_sec = elf_numsections (abfd);
6346       Elf_Internal_Shdr **hdrpp;
6347       unsigned int i;
6348       file_ptr off;
6349
6350       /* Start after the ELF header.  */
6351       off = i_ehdrp->e_ehsize;
6352
6353       /* We are not creating an executable, which means that we are
6354          not creating a program header, and that the actual order of
6355          the sections in the file is unimportant.  */
6356       for (i = 1, hdrpp = i_shdrpp + 1; i < num_sec; i++, hdrpp++)
6357         {
6358           Elf_Internal_Shdr *hdr;
6359
6360           hdr = *hdrpp;
6361           if (((hdr->sh_type == SHT_REL || hdr->sh_type == SHT_RELA)
6362                && hdr->bfd_section == NULL)
6363               /* Do not assign offsets for these sections yet: we don't know
6364                  their sizes.  */
6365               || (hdr->bfd_section != NULL
6366                   && (hdr->bfd_section->flags & SEC_ELF_COMPRESS
6367                       || (bfd_section_is_ctf (hdr->bfd_section)
6368                           && abfd->is_linker_output)))
6369               || i == elf_onesymtab (abfd)
6370               || (elf_symtab_shndx_list (abfd) != NULL
6371                   && hdr == i_shdrpp[elf_symtab_shndx_list (abfd)->ndx])
6372               || i == elf_strtab_sec (abfd)
6373               || i == elf_shstrtab_sec (abfd))
6374             {
6375               hdr->sh_offset = -1;
6376             }
6377           else
6378             off = _bfd_elf_assign_file_position_for_section (hdr, off, TRUE);
6379         }
6380
6381       elf_next_file_pos (abfd) = off;
6382       elf_program_header_size (abfd) = 0;
6383     }
6384   else
6385     {
6386       /* Assign file positions for the loaded sections based on the
6387          assignment of sections to segments.  */
6388       if (!assign_file_positions_for_load_sections (abfd, link_info))
6389         return FALSE;
6390
6391       /* And for non-load sections.  */
6392       if (!assign_file_positions_for_non_load_sections (abfd, link_info))
6393         return FALSE;
6394     }
6395
6396   if (!(*bed->elf_backend_modify_headers) (abfd, link_info))
6397     return FALSE;
6398
6399   /* Write out the program headers.  */
6400   alloc = i_ehdrp->e_phnum;
6401   if (alloc != 0)
6402     {
6403       if (bfd_seek (abfd, i_ehdrp->e_phoff, SEEK_SET) != 0
6404           || bed->s->write_out_phdrs (abfd, tdata->phdr, alloc) != 0)
6405         return FALSE;
6406     }
6407
6408   return TRUE;
6409 }
6410
6411 bfd_boolean
6412 _bfd_elf_init_file_header (bfd *abfd,
6413                            struct bfd_link_info *info ATTRIBUTE_UNUSED)
6414 {
6415   Elf_Internal_Ehdr *i_ehdrp;   /* Elf file header, internal form.  */
6416   struct elf_strtab_hash *shstrtab;
6417   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
6418
6419   i_ehdrp = elf_elfheader (abfd);
6420
6421   shstrtab = _bfd_elf_strtab_init ();
6422   if (shstrtab == NULL)
6423     return FALSE;
6424
6425   elf_shstrtab (abfd) = shstrtab;
6426
6427   i_ehdrp->e_ident[EI_MAG0] = ELFMAG0;
6428   i_ehdrp->e_ident[EI_MAG1] = ELFMAG1;
6429   i_ehdrp->e_ident[EI_MAG2] = ELFMAG2;
6430   i_ehdrp->e_ident[EI_MAG3] = ELFMAG3;
6431
6432   i_ehdrp->e_ident[EI_CLASS] = bed->s->elfclass;
6433   i_ehdrp->e_ident[EI_DATA] =
6434     bfd_big_endian (abfd) ? ELFDATA2MSB : ELFDATA2LSB;
6435   i_ehdrp->e_ident[EI_VERSION] = bed->s->ev_current;
6436
6437   if ((abfd->flags & DYNAMIC) != 0)
6438     i_ehdrp->e_type = ET_DYN;
6439   else if ((abfd->flags & EXEC_P) != 0)
6440     i_ehdrp->e_type = ET_EXEC;
6441   else if (bfd_get_format (abfd) == bfd_core)
6442     i_ehdrp->e_type = ET_CORE;
6443   else
6444     i_ehdrp->e_type = ET_REL;
6445
6446   switch (bfd_get_arch (abfd))
6447     {
6448     case bfd_arch_unknown:
6449       i_ehdrp->e_machine = EM_NONE;
6450       break;
6451
6452       /* There used to be a long list of cases here, each one setting
6453          e_machine to the same EM_* macro #defined as ELF_MACHINE_CODE
6454          in the corresponding bfd definition.  To avoid duplication,
6455          the switch was removed.  Machines that need special handling
6456          can generally do it in elf_backend_final_write_processing(),
6457          unless they need the information earlier than the final write.
6458          Such need can generally be supplied by replacing the tests for
6459          e_machine with the conditions used to determine it.  */
6460     default:
6461       i_ehdrp->e_machine = bed->elf_machine_code;
6462     }
6463
6464   i_ehdrp->e_version = bed->s->ev_current;
6465   i_ehdrp->e_ehsize = bed->s->sizeof_ehdr;
6466
6467   /* No program header, for now.  */
6468   i_ehdrp->e_phoff = 0;
6469   i_ehdrp->e_phentsize = 0;
6470   i_ehdrp->e_phnum = 0;
6471
6472   /* Each bfd section is section header entry.  */
6473   i_ehdrp->e_entry = bfd_get_start_address (abfd);
6474   i_ehdrp->e_shentsize = bed->s->sizeof_shdr;
6475
6476   elf_tdata (abfd)->symtab_hdr.sh_name =
6477     (unsigned int) _bfd_elf_strtab_add (shstrtab, ".symtab", FALSE);
6478   elf_tdata (abfd)->strtab_hdr.sh_name =
6479     (unsigned int) _bfd_elf_strtab_add (shstrtab, ".strtab", FALSE);
6480   elf_tdata (abfd)->shstrtab_hdr.sh_name =
6481     (unsigned int) _bfd_elf_strtab_add (shstrtab, ".shstrtab", FALSE);
6482   if (elf_tdata (abfd)->symtab_hdr.sh_name == (unsigned int) -1
6483       || elf_tdata (abfd)->strtab_hdr.sh_name == (unsigned int) -1
6484       || elf_tdata (abfd)->shstrtab_hdr.sh_name == (unsigned int) -1)
6485     return FALSE;
6486
6487   return TRUE;
6488 }
6489
6490 /* Set e_type in ELF header to ET_EXEC for -pie -Ttext-segment=.
6491
6492    FIXME: We used to have code here to sort the PT_LOAD segments into
6493    ascending order, as per the ELF spec.  But this breaks some programs,
6494    including the Linux kernel.  But really either the spec should be
6495    changed or the programs updated.  */
6496
6497 bfd_boolean
6498 _bfd_elf_modify_headers (bfd *obfd, struct bfd_link_info *link_info)
6499 {
6500   if (link_info != NULL && bfd_link_pie (link_info))
6501     {
6502       Elf_Internal_Ehdr *i_ehdrp = elf_elfheader (obfd);
6503       unsigned int num_segments = i_ehdrp->e_phnum;
6504       struct elf_obj_tdata *tdata = elf_tdata (obfd);
6505       Elf_Internal_Phdr *segment = tdata->phdr;
6506       Elf_Internal_Phdr *end_segment = &segment[num_segments];
6507
6508       /* Find the lowest p_vaddr in PT_LOAD segments.  */
6509       bfd_vma p_vaddr = (bfd_vma) -1;
6510       for (; segment < end_segment; segment++)
6511         if (segment->p_type == PT_LOAD && p_vaddr > segment->p_vaddr)
6512           p_vaddr = segment->p_vaddr;
6513
6514       /* Set e_type to ET_EXEC if the lowest p_vaddr in PT_LOAD
6515          segments is non-zero.  */
6516       if (p_vaddr)
6517         i_ehdrp->e_type = ET_EXEC;
6518     }
6519   return TRUE;
6520 }
6521
6522 /* Assign file positions for all the reloc sections which are not part
6523    of the loadable file image, and the file position of section headers.  */
6524
6525 static bfd_boolean
6526 _bfd_elf_assign_file_positions_for_non_load (bfd *abfd)
6527 {
6528   file_ptr off;
6529   Elf_Internal_Shdr **shdrpp, **end_shdrpp;
6530   Elf_Internal_Shdr *shdrp;
6531   Elf_Internal_Ehdr *i_ehdrp;
6532   const struct elf_backend_data *bed;
6533
6534   off = elf_next_file_pos (abfd);
6535
6536   shdrpp = elf_elfsections (abfd);
6537   end_shdrpp = shdrpp + elf_numsections (abfd);
6538   for (shdrpp++; shdrpp < end_shdrpp; shdrpp++)
6539     {
6540       shdrp = *shdrpp;
6541       if (shdrp->sh_offset == -1)
6542         {
6543           asection *sec = shdrp->bfd_section;
6544           bfd_boolean is_rel = (shdrp->sh_type == SHT_REL
6545                                 || shdrp->sh_type == SHT_RELA);
6546           bfd_boolean is_ctf = sec && bfd_section_is_ctf (sec);
6547           if (is_rel
6548               || is_ctf
6549               || (sec != NULL && (sec->flags & SEC_ELF_COMPRESS)))
6550             {
6551               if (!is_rel && !is_ctf)
6552                 {
6553                   const char *name = sec->name;
6554                   struct bfd_elf_section_data *d;
6555
6556                   /* Compress DWARF debug sections.  */
6557                   if (!bfd_compress_section (abfd, sec,
6558                                              shdrp->contents))
6559                     return FALSE;
6560
6561                   if (sec->compress_status == COMPRESS_SECTION_DONE
6562                       && (abfd->flags & BFD_COMPRESS_GABI) == 0)
6563                     {
6564                       /* If section is compressed with zlib-gnu, convert
6565                          section name from .debug_* to .zdebug_*.  */
6566                       char *new_name
6567                         = convert_debug_to_zdebug (abfd, name);
6568                       if (new_name == NULL)
6569                         return FALSE;
6570                       name = new_name;
6571                     }
6572                   /* Add section name to section name section.  */
6573                   if (shdrp->sh_name != (unsigned int) -1)
6574                     abort ();
6575                   shdrp->sh_name
6576                     = (unsigned int) _bfd_elf_strtab_add (elf_shstrtab (abfd),
6577                                                           name, FALSE);
6578                   d = elf_section_data (sec);
6579
6580                   /* Add reloc section name to section name section.  */
6581                   if (d->rel.hdr
6582                       && !_bfd_elf_set_reloc_sh_name (abfd,
6583                                                       d->rel.hdr,
6584                                                       name, FALSE))
6585                     return FALSE;
6586                   if (d->rela.hdr
6587                       && !_bfd_elf_set_reloc_sh_name (abfd,
6588                                                       d->rela.hdr,
6589                                                       name, TRUE))
6590                     return FALSE;
6591
6592                   /* Update section size and contents.  */
6593                   shdrp->sh_size = sec->size;
6594                   shdrp->contents = sec->contents;
6595                   shdrp->bfd_section->contents = NULL;
6596                 }
6597               else if (is_ctf)
6598                 {
6599                   /* Update section size and contents.  */
6600                   shdrp->sh_size = sec->size;
6601                   shdrp->contents = sec->contents;
6602                 }
6603
6604               off = _bfd_elf_assign_file_position_for_section (shdrp,
6605                                                                off,
6606                                                                TRUE);
6607             }
6608         }
6609     }
6610
6611   /* Place section name section after DWARF debug sections have been
6612      compressed.  */
6613   _bfd_elf_strtab_finalize (elf_shstrtab (abfd));
6614   shdrp = &elf_tdata (abfd)->shstrtab_hdr;
6615   shdrp->sh_size = _bfd_elf_strtab_size (elf_shstrtab (abfd));
6616   off = _bfd_elf_assign_file_position_for_section (shdrp, off, TRUE);
6617
6618   /* Place the section headers.  */
6619   i_ehdrp = elf_elfheader (abfd);
6620   bed = get_elf_backend_data (abfd);
6621   off = align_file_position (off, 1 << bed->s->log_file_align);
6622   i_ehdrp->e_shoff = off;
6623   off += i_ehdrp->e_shnum * i_ehdrp->e_shentsize;
6624   elf_next_file_pos (abfd) = off;
6625
6626   return TRUE;
6627 }
6628
6629 bfd_boolean
6630 _bfd_elf_write_object_contents (bfd *abfd)
6631 {
6632   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
6633   Elf_Internal_Shdr **i_shdrp;
6634   bfd_boolean failed;
6635   unsigned int count, num_sec;
6636   struct elf_obj_tdata *t;
6637
6638   if (! abfd->output_has_begun
6639       && ! _bfd_elf_compute_section_file_positions (abfd, NULL))
6640     return FALSE;
6641   /* Do not rewrite ELF data when the BFD has been opened for update.
6642      abfd->output_has_begun was set to TRUE on opening, so creation of new
6643      sections, and modification of existing section sizes was restricted.
6644      This means the ELF header, program headers and section headers can't have
6645      changed.
6646      If the contents of any sections has been modified, then those changes have
6647      already been written to the BFD.  */
6648   else if (abfd->direction == both_direction)
6649     {
6650       BFD_ASSERT (abfd->output_has_begun);
6651       return TRUE;
6652     }
6653
6654   i_shdrp = elf_elfsections (abfd);
6655
6656   failed = FALSE;
6657   bfd_map_over_sections (abfd, bed->s->write_relocs, &failed);
6658   if (failed)
6659     return FALSE;
6660
6661   if (!_bfd_elf_assign_file_positions_for_non_load (abfd))
6662     return FALSE;
6663
6664   /* After writing the headers, we need to write the sections too...  */
6665   num_sec = elf_numsections (abfd);
6666   for (count = 1; count < num_sec; count++)
6667     {
6668       i_shdrp[count]->sh_name
6669         = _bfd_elf_strtab_offset (elf_shstrtab (abfd),
6670                                   i_shdrp[count]->sh_name);
6671       if (bed->elf_backend_section_processing)
6672         if (!(*bed->elf_backend_section_processing) (abfd, i_shdrp[count]))
6673           return FALSE;
6674       if (i_shdrp[count]->contents)
6675         {
6676           bfd_size_type amt = i_shdrp[count]->sh_size;
6677
6678           if (bfd_seek (abfd, i_shdrp[count]->sh_offset, SEEK_SET) != 0
6679               || bfd_bwrite (i_shdrp[count]->contents, amt, abfd) != amt)
6680             return FALSE;
6681         }
6682     }
6683
6684   /* Write out the section header names.  */
6685   t = elf_tdata (abfd);
6686   if (elf_shstrtab (abfd) != NULL
6687       && (bfd_seek (abfd, t->shstrtab_hdr.sh_offset, SEEK_SET) != 0
6688           || !_bfd_elf_strtab_emit (abfd, elf_shstrtab (abfd))))
6689     return FALSE;
6690
6691   if (!(*bed->elf_backend_final_write_processing) (abfd))
6692     return FALSE;
6693
6694   if (!bed->s->write_shdrs_and_ehdr (abfd))
6695     return FALSE;
6696
6697   /* This is last since write_shdrs_and_ehdr can touch i_shdrp[0].  */
6698   if (t->o->build_id.after_write_object_contents != NULL)
6699     return (*t->o->build_id.after_write_object_contents) (abfd);
6700
6701   return TRUE;
6702 }
6703
6704 bfd_boolean
6705 _bfd_elf_write_corefile_contents (bfd *abfd)
6706 {
6707   /* Hopefully this can be done just like an object file.  */
6708   return _bfd_elf_write_object_contents (abfd);
6709 }
6710
6711 /* Given a section, search the header to find them.  */
6712
6713 unsigned int
6714 _bfd_elf_section_from_bfd_section (bfd *abfd, struct bfd_section *asect)
6715 {
6716   const struct elf_backend_data *bed;
6717   unsigned int sec_index;
6718
6719   if (elf_section_data (asect) != NULL
6720       && elf_section_data (asect)->this_idx != 0)
6721     return elf_section_data (asect)->this_idx;
6722
6723   if (bfd_is_abs_section (asect))
6724     sec_index = SHN_ABS;
6725   else if (bfd_is_com_section (asect))
6726     sec_index = SHN_COMMON;
6727   else if (bfd_is_und_section (asect))
6728     sec_index = SHN_UNDEF;
6729   else
6730     sec_index = SHN_BAD;
6731
6732   bed = get_elf_backend_data (abfd);
6733   if (bed->elf_backend_section_from_bfd_section)
6734     {
6735       int retval = sec_index;
6736
6737       if ((*bed->elf_backend_section_from_bfd_section) (abfd, asect, &retval))
6738         return retval;
6739     }
6740
6741   if (sec_index == SHN_BAD)
6742     bfd_set_error (bfd_error_nonrepresentable_section);
6743
6744   return sec_index;
6745 }
6746
6747 /* Given a BFD symbol, return the index in the ELF symbol table, or -1
6748    on error.  */
6749
6750 int
6751 _bfd_elf_symbol_from_bfd_symbol (bfd *abfd, asymbol **asym_ptr_ptr)
6752 {
6753   asymbol *asym_ptr = *asym_ptr_ptr;
6754   int idx;
6755   flagword flags = asym_ptr->flags;
6756
6757   /* When gas creates relocations against local labels, it creates its
6758      own symbol for the section, but does put the symbol into the
6759      symbol chain, so udata is 0.  When the linker is generating
6760      relocatable output, this section symbol may be for one of the
6761      input sections rather than the output section.  */
6762   if (asym_ptr->udata.i == 0
6763       && (flags & BSF_SECTION_SYM)
6764       && asym_ptr->section)
6765     {
6766       asection *sec;
6767       int indx;
6768
6769       sec = asym_ptr->section;
6770       if (sec->owner != abfd && sec->output_section != NULL)
6771         sec = sec->output_section;
6772       if (sec->owner == abfd
6773           && (indx = sec->index) < elf_num_section_syms (abfd)
6774           && elf_section_syms (abfd)[indx] != NULL)
6775         asym_ptr->udata.i = elf_section_syms (abfd)[indx]->udata.i;
6776     }
6777
6778   idx = asym_ptr->udata.i;
6779
6780   if (idx == 0)
6781     {
6782       /* This case can occur when using --strip-symbol on a symbol
6783          which is used in a relocation entry.  */
6784       _bfd_error_handler
6785         /* xgettext:c-format */
6786         (_("%pB: symbol `%s' required but not present"),
6787          abfd, bfd_asymbol_name (asym_ptr));
6788       bfd_set_error (bfd_error_no_symbols);
6789       return -1;
6790     }
6791
6792 #if DEBUG & 4
6793   {
6794     fprintf (stderr,
6795              "elf_symbol_from_bfd_symbol 0x%.8lx, name = %s, sym num = %d, flags = 0x%.8x\n",
6796              (long) asym_ptr, asym_ptr->name, idx, flags);
6797     fflush (stderr);
6798   }
6799 #endif
6800
6801   return idx;
6802 }
6803
6804 /* Rewrite program header information.  */
6805
6806 static bfd_boolean
6807 rewrite_elf_program_header (bfd *ibfd, bfd *obfd)
6808 {
6809   Elf_Internal_Ehdr *iehdr;
6810   struct elf_segment_map *map;
6811   struct elf_segment_map *map_first;
6812   struct elf_segment_map **pointer_to_map;
6813   Elf_Internal_Phdr *segment;
6814   asection *section;
6815   unsigned int i;
6816   unsigned int num_segments;
6817   bfd_boolean phdr_included = FALSE;
6818   bfd_boolean p_paddr_valid;
6819   bfd_vma maxpagesize;
6820   struct elf_segment_map *phdr_adjust_seg = NULL;
6821   unsigned int phdr_adjust_num = 0;
6822   const struct elf_backend_data *bed;
6823   unsigned int opb = bfd_octets_per_byte (ibfd, NULL);
6824
6825   bed = get_elf_backend_data (ibfd);
6826   iehdr = elf_elfheader (ibfd);
6827
6828   map_first = NULL;
6829   pointer_to_map = &map_first;
6830
6831   num_segments = elf_elfheader (ibfd)->e_phnum;
6832   maxpagesize = get_elf_backend_data (obfd)->maxpagesize;
6833
6834   /* Returns the end address of the segment + 1.  */
6835 #define SEGMENT_END(segment, start)                                     \
6836   (start + (segment->p_memsz > segment->p_filesz                        \
6837             ? segment->p_memsz : segment->p_filesz))
6838
6839 #define SECTION_SIZE(section, segment)                                  \
6840   (((section->flags & (SEC_HAS_CONTENTS | SEC_THREAD_LOCAL))            \
6841     != SEC_THREAD_LOCAL || segment->p_type == PT_TLS)                   \
6842    ? section->size : 0)
6843
6844   /* Returns TRUE if the given section is contained within
6845      the given segment.  VMA addresses are compared.  */
6846 #define IS_CONTAINED_BY_VMA(section, segment, opb)                      \
6847   (section->vma * (opb) >= segment->p_vaddr                             \
6848    && (section->vma * (opb) + SECTION_SIZE (section, segment)           \
6849        <= (SEGMENT_END (segment, segment->p_vaddr))))
6850
6851   /* Returns TRUE if the given section is contained within
6852      the given segment.  LMA addresses are compared.  */
6853 #define IS_CONTAINED_BY_LMA(section, segment, base, opb)                \
6854   (section->lma * (opb) >= base                                         \
6855    && (section->lma + SECTION_SIZE (section, segment) / (opb) >= section->lma) \
6856    && (section->lma * (opb) + SECTION_SIZE (section, segment)           \
6857        <= SEGMENT_END (segment, base)))
6858
6859   /* Handle PT_NOTE segment.  */
6860 #define IS_NOTE(p, s)                                                   \
6861   (p->p_type == PT_NOTE                                                 \
6862    && elf_section_type (s) == SHT_NOTE                                  \
6863    && (bfd_vma) s->filepos >= p->p_offset                               \
6864    && ((bfd_vma) s->filepos + s->size                                   \
6865        <= p->p_offset + p->p_filesz))
6866
6867   /* Special case: corefile "NOTE" section containing regs, prpsinfo
6868      etc.  */
6869 #define IS_COREFILE_NOTE(p, s)                                          \
6870   (IS_NOTE (p, s)                                                       \
6871    && bfd_get_format (ibfd) == bfd_core                                 \
6872    && s->vma == 0                                                       \
6873    && s->lma == 0)
6874
6875   /* The complicated case when p_vaddr is 0 is to handle the Solaris
6876      linker, which generates a PT_INTERP section with p_vaddr and
6877      p_memsz set to 0.  */
6878 #define IS_SOLARIS_PT_INTERP(p, s)                                      \
6879   (p->p_vaddr == 0                                                      \
6880    && p->p_paddr == 0                                                   \
6881    && p->p_memsz == 0                                                   \
6882    && p->p_filesz > 0                                                   \
6883    && (s->flags & SEC_HAS_CONTENTS) != 0                                \
6884    && s->size > 0                                                       \
6885    && (bfd_vma) s->filepos >= p->p_offset                               \
6886    && ((bfd_vma) s->filepos + s->size                                   \
6887        <= p->p_offset + p->p_filesz))
6888
6889   /* Decide if the given section should be included in the given segment.
6890      A section will be included if:
6891        1. It is within the address space of the segment -- we use the LMA
6892           if that is set for the segment and the VMA otherwise,
6893        2. It is an allocated section or a NOTE section in a PT_NOTE
6894           segment.
6895        3. There is an output section associated with it,
6896        4. The section has not already been allocated to a previous segment.
6897        5. PT_GNU_STACK segments do not include any sections.
6898        6. PT_TLS segment includes only SHF_TLS sections.
6899        7. SHF_TLS sections are only in PT_TLS or PT_LOAD segments.
6900        8. PT_DYNAMIC should not contain empty sections at the beginning
6901           (with the possible exception of .dynamic).  */
6902 #define IS_SECTION_IN_INPUT_SEGMENT(section, segment, bed, opb)         \
6903   ((((segment->p_paddr                                                  \
6904       ? IS_CONTAINED_BY_LMA (section, segment, segment->p_paddr, opb)   \
6905       : IS_CONTAINED_BY_VMA (section, segment, opb))                    \
6906      && (section->flags & SEC_ALLOC) != 0)                              \
6907     || IS_NOTE (segment, section))                                      \
6908    && segment->p_type != PT_GNU_STACK                                   \
6909    && (segment->p_type != PT_TLS                                        \
6910        || (section->flags & SEC_THREAD_LOCAL))                          \
6911    && (segment->p_type == PT_LOAD                                       \
6912        || segment->p_type == PT_TLS                                     \
6913        || (section->flags & SEC_THREAD_LOCAL) == 0)                     \
6914    && (segment->p_type != PT_DYNAMIC                                    \
6915        || SECTION_SIZE (section, segment) > 0                           \
6916        || (segment->p_paddr                                             \
6917            ? segment->p_paddr != section->lma * (opb)                   \
6918            : segment->p_vaddr != section->vma * (opb))                  \
6919        || (strcmp (bfd_section_name (section), ".dynamic") == 0))       \
6920    && (segment->p_type != PT_LOAD || !section->segment_mark))
6921
6922 /* If the output section of a section in the input segment is NULL,
6923    it is removed from the corresponding output segment.   */
6924 #define INCLUDE_SECTION_IN_SEGMENT(section, segment, bed, opb)          \
6925   (IS_SECTION_IN_INPUT_SEGMENT (section, segment, bed, opb)             \
6926    && section->output_section != NULL)
6927
6928   /* Returns TRUE iff seg1 starts after the end of seg2.  */
6929 #define SEGMENT_AFTER_SEGMENT(seg1, seg2, field)                        \
6930   (seg1->field >= SEGMENT_END (seg2, seg2->field))
6931
6932   /* Returns TRUE iff seg1 and seg2 overlap. Segments overlap iff both
6933      their VMA address ranges and their LMA address ranges overlap.
6934      It is possible to have overlapping VMA ranges without overlapping LMA
6935      ranges.  RedBoot images for example can have both .data and .bss mapped
6936      to the same VMA range, but with the .data section mapped to a different
6937      LMA.  */
6938 #define SEGMENT_OVERLAPS(seg1, seg2)                                    \
6939   (   !(SEGMENT_AFTER_SEGMENT (seg1, seg2, p_vaddr)                     \
6940         || SEGMENT_AFTER_SEGMENT (seg2, seg1, p_vaddr))                 \
6941    && !(SEGMENT_AFTER_SEGMENT (seg1, seg2, p_paddr)                     \
6942         || SEGMENT_AFTER_SEGMENT (seg2, seg1, p_paddr)))
6943
6944   /* Initialise the segment mark field.  */
6945   for (section = ibfd->sections; section != NULL; section = section->next)
6946     section->segment_mark = FALSE;
6947
6948   /* The Solaris linker creates program headers in which all the
6949      p_paddr fields are zero.  When we try to objcopy or strip such a
6950      file, we get confused.  Check for this case, and if we find it
6951      don't set the p_paddr_valid fields.  */
6952   p_paddr_valid = FALSE;
6953   for (i = 0, segment = elf_tdata (ibfd)->phdr;
6954        i < num_segments;
6955        i++, segment++)
6956     if (segment->p_paddr != 0)
6957       {
6958         p_paddr_valid = TRUE;
6959         break;
6960       }
6961
6962   /* Scan through the segments specified in the program header
6963      of the input BFD.  For this first scan we look for overlaps
6964      in the loadable segments.  These can be created by weird
6965      parameters to objcopy.  Also, fix some solaris weirdness.  */
6966   for (i = 0, segment = elf_tdata (ibfd)->phdr;
6967        i < num_segments;
6968        i++, segment++)
6969     {
6970       unsigned int j;
6971       Elf_Internal_Phdr *segment2;
6972
6973       if (segment->p_type == PT_INTERP)
6974         for (section = ibfd->sections; section; section = section->next)
6975           if (IS_SOLARIS_PT_INTERP (segment, section))
6976             {
6977               /* Mininal change so that the normal section to segment
6978                  assignment code will work.  */
6979               segment->p_vaddr = section->vma * opb;
6980               break;
6981             }
6982
6983       if (segment->p_type != PT_LOAD)
6984         {
6985           /* Remove PT_GNU_RELRO segment.  */
6986           if (segment->p_type == PT_GNU_RELRO)
6987             segment->p_type = PT_NULL;
6988           continue;
6989         }
6990
6991       /* Determine if this segment overlaps any previous segments.  */
6992       for (j = 0, segment2 = elf_tdata (ibfd)->phdr; j < i; j++, segment2++)
6993         {
6994           bfd_signed_vma extra_length;
6995
6996           if (segment2->p_type != PT_LOAD
6997               || !SEGMENT_OVERLAPS (segment, segment2))
6998             continue;
6999
7000           /* Merge the two segments together.  */
7001           if (segment2->p_vaddr < segment->p_vaddr)
7002             {
7003               /* Extend SEGMENT2 to include SEGMENT and then delete
7004                  SEGMENT.  */
7005               extra_length = (SEGMENT_END (segment, segment->p_vaddr)
7006                               - SEGMENT_END (segment2, segment2->p_vaddr));
7007
7008               if (extra_length > 0)
7009                 {
7010                   segment2->p_memsz += extra_length;
7011                   segment2->p_filesz += extra_length;
7012                 }
7013
7014               segment->p_type = PT_NULL;
7015
7016               /* Since we have deleted P we must restart the outer loop.  */
7017               i = 0;
7018               segment = elf_tdata (ibfd)->phdr;
7019               break;
7020             }
7021           else
7022             {
7023               /* Extend SEGMENT to include SEGMENT2 and then delete
7024                  SEGMENT2.  */
7025               extra_length = (SEGMENT_END (segment2, segment2->p_vaddr)
7026                               - SEGMENT_END (segment, segment->p_vaddr));
7027
7028               if (extra_length > 0)
7029                 {
7030                   segment->p_memsz += extra_length;
7031                   segment->p_filesz += extra_length;
7032                 }
7033
7034               segment2->p_type = PT_NULL;
7035             }
7036         }
7037     }
7038
7039   /* The second scan attempts to assign sections to segments.  */
7040   for (i = 0, segment = elf_tdata (ibfd)->phdr;
7041        i < num_segments;
7042        i++, segment++)
7043     {
7044       unsigned int section_count;
7045       asection **sections;
7046       asection *output_section;
7047       unsigned int isec;
7048       asection *matching_lma;
7049       asection *suggested_lma;
7050       unsigned int j;
7051       size_t amt;
7052       asection *first_section;
7053
7054       if (segment->p_type == PT_NULL)
7055         continue;
7056
7057       first_section = NULL;
7058       /* Compute how many sections might be placed into this segment.  */
7059       for (section = ibfd->sections, section_count = 0;
7060            section != NULL;
7061            section = section->next)
7062         {
7063           /* Find the first section in the input segment, which may be
7064              removed from the corresponding output segment.   */
7065           if (IS_SECTION_IN_INPUT_SEGMENT (section, segment, bed, opb))
7066             {
7067               if (first_section == NULL)
7068                 first_section = section;
7069               if (section->output_section != NULL)
7070                 ++section_count;
7071             }
7072         }
7073
7074       /* Allocate a segment map big enough to contain
7075          all of the sections we have selected.  */
7076       amt = sizeof (struct elf_segment_map) - sizeof (asection *);
7077       amt += section_count * sizeof (asection *);
7078       map = (struct elf_segment_map *) bfd_zalloc (obfd, amt);
7079       if (map == NULL)
7080         return FALSE;
7081
7082       /* Initialise the fields of the segment map.  Default to
7083          using the physical address of the segment in the input BFD.  */
7084       map->next = NULL;
7085       map->p_type = segment->p_type;
7086       map->p_flags = segment->p_flags;
7087       map->p_flags_valid = 1;
7088
7089       /* If the first section in the input segment is removed, there is
7090          no need to preserve segment physical address in the corresponding
7091          output segment.  */
7092       if (!first_section || first_section->output_section != NULL)
7093         {
7094           map->p_paddr = segment->p_paddr;
7095           map->p_paddr_valid = p_paddr_valid;
7096         }
7097
7098       /* Determine if this segment contains the ELF file header
7099          and if it contains the program headers themselves.  */
7100       map->includes_filehdr = (segment->p_offset == 0
7101                                && segment->p_filesz >= iehdr->e_ehsize);
7102       map->includes_phdrs = 0;
7103
7104       if (!phdr_included || segment->p_type != PT_LOAD)
7105         {
7106           map->includes_phdrs =
7107             (segment->p_offset <= (bfd_vma) iehdr->e_phoff
7108              && (segment->p_offset + segment->p_filesz
7109                  >= ((bfd_vma) iehdr->e_phoff
7110                      + iehdr->e_phnum * iehdr->e_phentsize)));
7111
7112           if (segment->p_type == PT_LOAD && map->includes_phdrs)
7113             phdr_included = TRUE;
7114         }
7115
7116       if (section_count == 0)
7117         {
7118           /* Special segments, such as the PT_PHDR segment, may contain
7119              no sections, but ordinary, loadable segments should contain
7120              something.  They are allowed by the ELF spec however, so only
7121              a warning is produced.
7122              There is however the valid use case of embedded systems which
7123              have segments with p_filesz of 0 and a p_memsz > 0 to initialize
7124              flash memory with zeros.  No warning is shown for that case.  */
7125           if (segment->p_type == PT_LOAD
7126               && (segment->p_filesz > 0 || segment->p_memsz == 0))
7127             /* xgettext:c-format */
7128             _bfd_error_handler
7129               (_("%pB: warning: empty loadable segment detected"
7130                  " at vaddr=%#" PRIx64 ", is this intentional?"),
7131                ibfd, (uint64_t) segment->p_vaddr);
7132
7133           map->p_vaddr_offset = segment->p_vaddr / opb;
7134           map->count = 0;
7135           *pointer_to_map = map;
7136           pointer_to_map = &map->next;
7137
7138           continue;
7139         }
7140
7141       /* Now scan the sections in the input BFD again and attempt
7142          to add their corresponding output sections to the segment map.
7143          The problem here is how to handle an output section which has
7144          been moved (ie had its LMA changed).  There are four possibilities:
7145
7146          1. None of the sections have been moved.
7147             In this case we can continue to use the segment LMA from the
7148             input BFD.
7149
7150          2. All of the sections have been moved by the same amount.
7151             In this case we can change the segment's LMA to match the LMA
7152             of the first section.
7153
7154          3. Some of the sections have been moved, others have not.
7155             In this case those sections which have not been moved can be
7156             placed in the current segment which will have to have its size,
7157             and possibly its LMA changed, and a new segment or segments will
7158             have to be created to contain the other sections.
7159
7160          4. The sections have been moved, but not by the same amount.
7161             In this case we can change the segment's LMA to match the LMA
7162             of the first section and we will have to create a new segment
7163             or segments to contain the other sections.
7164
7165          In order to save time, we allocate an array to hold the section
7166          pointers that we are interested in.  As these sections get assigned
7167          to a segment, they are removed from this array.  */
7168
7169       amt = section_count * sizeof (asection *);
7170       sections = (asection **) bfd_malloc (amt);
7171       if (sections == NULL)
7172         return FALSE;
7173
7174       /* Step One: Scan for segment vs section LMA conflicts.
7175          Also add the sections to the section array allocated above.
7176          Also add the sections to the current segment.  In the common
7177          case, where the sections have not been moved, this means that
7178          we have completely filled the segment, and there is nothing
7179          more to do.  */
7180       isec = 0;
7181       matching_lma = NULL;
7182       suggested_lma = NULL;
7183
7184       for (section = first_section, j = 0;
7185            section != NULL;
7186            section = section->next)
7187         {
7188           if (INCLUDE_SECTION_IN_SEGMENT (section, segment, bed, opb))
7189             {
7190               output_section = section->output_section;
7191
7192               sections[j++] = section;
7193
7194               /* The Solaris native linker always sets p_paddr to 0.
7195                  We try to catch that case here, and set it to the
7196                  correct value.  Note - some backends require that
7197                  p_paddr be left as zero.  */
7198               if (!p_paddr_valid
7199                   && segment->p_vaddr != 0
7200                   && !bed->want_p_paddr_set_to_zero
7201                   && isec == 0
7202                   && output_section->lma != 0
7203                   && (align_power (segment->p_vaddr
7204                                    + (map->includes_filehdr
7205                                       ? iehdr->e_ehsize : 0)
7206                                    + (map->includes_phdrs
7207                                       ? iehdr->e_phnum * iehdr->e_phentsize
7208                                       : 0),
7209                                    output_section->alignment_power * opb)
7210                       == (output_section->vma * opb)))
7211                 map->p_paddr = segment->p_vaddr;
7212
7213               /* Match up the physical address of the segment with the
7214                  LMA address of the output section.  */
7215               if (IS_CONTAINED_BY_LMA (output_section, segment, map->p_paddr,
7216                                        opb)
7217                   || IS_COREFILE_NOTE (segment, section)
7218                   || (bed->want_p_paddr_set_to_zero
7219                       && IS_CONTAINED_BY_VMA (output_section, segment, opb)))
7220                 {
7221                   if (matching_lma == NULL
7222                       || output_section->lma < matching_lma->lma)
7223                     matching_lma = output_section;
7224
7225                   /* We assume that if the section fits within the segment
7226                      then it does not overlap any other section within that
7227                      segment.  */
7228                   map->sections[isec++] = output_section;
7229                 }
7230               else if (suggested_lma == NULL)
7231                 suggested_lma = output_section;
7232
7233               if (j == section_count)
7234                 break;
7235             }
7236         }
7237
7238       BFD_ASSERT (j == section_count);
7239
7240       /* Step Two: Adjust the physical address of the current segment,
7241          if necessary.  */
7242       if (isec == section_count)
7243         {
7244           /* All of the sections fitted within the segment as currently
7245              specified.  This is the default case.  Add the segment to
7246              the list of built segments and carry on to process the next
7247              program header in the input BFD.  */
7248           map->count = section_count;
7249           *pointer_to_map = map;
7250           pointer_to_map = &map->next;
7251
7252           if (p_paddr_valid
7253               && !bed->want_p_paddr_set_to_zero)
7254             {
7255               bfd_vma hdr_size = 0;
7256               if (map->includes_filehdr)
7257                 hdr_size = iehdr->e_ehsize;
7258               if (map->includes_phdrs)
7259                 hdr_size += iehdr->e_phnum * iehdr->e_phentsize;
7260
7261               /* Account for padding before the first section in the
7262                  segment.  */
7263               map->p_vaddr_offset = ((map->p_paddr + hdr_size) / opb
7264                                      - matching_lma->lma);
7265             }
7266
7267           free (sections);
7268           continue;
7269         }
7270       else
7271         {
7272           /* Change the current segment's physical address to match
7273              the LMA of the first section that fitted, or if no
7274              section fitted, the first section.  */
7275           if (matching_lma == NULL)
7276             matching_lma = suggested_lma;
7277
7278           map->p_paddr = matching_lma->lma * opb;
7279
7280           /* Offset the segment physical address from the lma
7281              to allow for space taken up by elf headers.  */
7282           if (map->includes_phdrs)
7283             {
7284               map->p_paddr -= iehdr->e_phnum * iehdr->e_phentsize;
7285
7286               /* iehdr->e_phnum is just an estimate of the number
7287                  of program headers that we will need.  Make a note
7288                  here of the number we used and the segment we chose
7289                  to hold these headers, so that we can adjust the
7290                  offset when we know the correct value.  */
7291               phdr_adjust_num = iehdr->e_phnum;
7292               phdr_adjust_seg = map;
7293             }
7294
7295           if (map->includes_filehdr)
7296             {
7297               bfd_vma align = (bfd_vma) 1 << matching_lma->alignment_power;
7298               map->p_paddr -= iehdr->e_ehsize;
7299               /* We've subtracted off the size of headers from the
7300                  first section lma, but there may have been some
7301                  alignment padding before that section too.  Try to
7302                  account for that by adjusting the segment lma down to
7303                  the same alignment.  */
7304               if (segment->p_align != 0 && segment->p_align < align)
7305                 align = segment->p_align;
7306               map->p_paddr &= -(align * opb);
7307             }
7308         }
7309
7310       /* Step Three: Loop over the sections again, this time assigning
7311          those that fit to the current segment and removing them from the
7312          sections array; but making sure not to leave large gaps.  Once all
7313          possible sections have been assigned to the current segment it is
7314          added to the list of built segments and if sections still remain
7315          to be assigned, a new segment is constructed before repeating
7316          the loop.  */
7317       isec = 0;
7318       do
7319         {
7320           map->count = 0;
7321           suggested_lma = NULL;
7322
7323           /* Fill the current segment with sections that fit.  */
7324           for (j = 0; j < section_count; j++)
7325             {
7326               section = sections[j];
7327
7328               if (section == NULL)
7329                 continue;
7330
7331               output_section = section->output_section;
7332
7333               BFD_ASSERT (output_section != NULL);
7334
7335               if (IS_CONTAINED_BY_LMA (output_section, segment, map->p_paddr,
7336                                        opb)
7337                   || IS_COREFILE_NOTE (segment, section))
7338                 {
7339                   if (map->count == 0)
7340                     {
7341                       /* If the first section in a segment does not start at
7342                          the beginning of the segment, then something is
7343                          wrong.  */
7344                       if (align_power (map->p_paddr
7345                                        + (map->includes_filehdr
7346                                           ? iehdr->e_ehsize : 0)
7347                                        + (map->includes_phdrs
7348                                           ? iehdr->e_phnum * iehdr->e_phentsize
7349                                           : 0),
7350                                        output_section->alignment_power * opb)
7351                           != output_section->lma * opb)
7352                         goto sorry;
7353                     }
7354                   else
7355                     {
7356                       asection *prev_sec;
7357
7358                       prev_sec = map->sections[map->count - 1];
7359
7360                       /* If the gap between the end of the previous section
7361                          and the start of this section is more than
7362                          maxpagesize then we need to start a new segment.  */
7363                       if ((BFD_ALIGN (prev_sec->lma + prev_sec->size,
7364                                       maxpagesize)
7365                            < BFD_ALIGN (output_section->lma, maxpagesize))
7366                           || (prev_sec->lma + prev_sec->size
7367                               > output_section->lma))
7368                         {
7369                           if (suggested_lma == NULL)
7370                             suggested_lma = output_section;
7371
7372                           continue;
7373                         }
7374                     }
7375
7376                   map->sections[map->count++] = output_section;
7377                   ++isec;
7378                   sections[j] = NULL;
7379                   if (segment->p_type == PT_LOAD)
7380                     section->segment_mark = TRUE;
7381                 }
7382               else if (suggested_lma == NULL)
7383                 suggested_lma = output_section;
7384             }
7385
7386           /* PR 23932.  A corrupt input file may contain sections that cannot
7387              be assigned to any segment - because for example they have a
7388              negative size - or segments that do not contain any sections.
7389              But there are also valid reasons why a segment can be empty.
7390              So allow a count of zero.  */
7391
7392           /* Add the current segment to the list of built segments.  */
7393           *pointer_to_map = map;
7394           pointer_to_map = &map->next;
7395
7396           if (isec < section_count)
7397             {
7398               /* We still have not allocated all of the sections to
7399                  segments.  Create a new segment here, initialise it
7400                  and carry on looping.  */
7401               amt = sizeof (struct elf_segment_map) - sizeof (asection *);
7402               amt += section_count * sizeof (asection *);
7403               map = (struct elf_segment_map *) bfd_zalloc (obfd, amt);
7404               if (map == NULL)
7405                 {
7406                   free (sections);
7407                   return FALSE;
7408                 }
7409
7410               /* Initialise the fields of the segment map.  Set the physical
7411                  physical address to the LMA of the first section that has
7412                  not yet been assigned.  */
7413               map->next = NULL;
7414               map->p_type = segment->p_type;
7415               map->p_flags = segment->p_flags;
7416               map->p_flags_valid = 1;
7417               map->p_paddr = suggested_lma->lma * opb;
7418               map->p_paddr_valid = p_paddr_valid;
7419               map->includes_filehdr = 0;
7420               map->includes_phdrs = 0;
7421             }
7422
7423           continue;
7424         sorry:
7425           bfd_set_error (bfd_error_sorry);
7426           free (sections);
7427           return FALSE;
7428         }
7429       while (isec < section_count);
7430
7431       free (sections);
7432     }
7433
7434   elf_seg_map (obfd) = map_first;
7435
7436   /* If we had to estimate the number of program headers that were
7437      going to be needed, then check our estimate now and adjust
7438      the offset if necessary.  */
7439   if (phdr_adjust_seg != NULL)
7440     {
7441       unsigned int count;
7442
7443       for (count = 0, map = map_first; map != NULL; map = map->next)
7444         count++;
7445
7446       if (count > phdr_adjust_num)
7447         phdr_adjust_seg->p_paddr
7448           -= (count - phdr_adjust_num) * iehdr->e_phentsize;
7449
7450       for (map = map_first; map != NULL; map = map->next)
7451         if (map->p_type == PT_PHDR)
7452           {
7453             bfd_vma adjust
7454               = phdr_adjust_seg->includes_filehdr ? iehdr->e_ehsize : 0;
7455             map->p_paddr = phdr_adjust_seg->p_paddr + adjust;
7456             break;
7457           }
7458     }
7459
7460 #undef SEGMENT_END
7461 #undef SECTION_SIZE
7462 #undef IS_CONTAINED_BY_VMA
7463 #undef IS_CONTAINED_BY_LMA
7464 #undef IS_NOTE
7465 #undef IS_COREFILE_NOTE
7466 #undef IS_SOLARIS_PT_INTERP
7467 #undef IS_SECTION_IN_INPUT_SEGMENT
7468 #undef INCLUDE_SECTION_IN_SEGMENT
7469 #undef SEGMENT_AFTER_SEGMENT
7470 #undef SEGMENT_OVERLAPS
7471   return TRUE;
7472 }
7473
7474 /* Copy ELF program header information.  */
7475
7476 static bfd_boolean
7477 copy_elf_program_header (bfd *ibfd, bfd *obfd)
7478 {
7479   Elf_Internal_Ehdr *iehdr;
7480   struct elf_segment_map *map;
7481   struct elf_segment_map *map_first;
7482   struct elf_segment_map **pointer_to_map;
7483   Elf_Internal_Phdr *segment;
7484   unsigned int i;
7485   unsigned int num_segments;
7486   bfd_boolean phdr_included = FALSE;
7487   bfd_boolean p_paddr_valid;
7488   unsigned int opb = bfd_octets_per_byte (ibfd, NULL);
7489
7490   iehdr = elf_elfheader (ibfd);
7491
7492   map_first = NULL;
7493   pointer_to_map = &map_first;
7494
7495   /* If all the segment p_paddr fields are zero, don't set
7496      map->p_paddr_valid.  */
7497   p_paddr_valid = FALSE;
7498   num_segments = elf_elfheader (ibfd)->e_phnum;
7499   for (i = 0, segment = elf_tdata (ibfd)->phdr;
7500        i < num_segments;
7501        i++, segment++)
7502     if (segment->p_paddr != 0)
7503       {
7504         p_paddr_valid = TRUE;
7505         break;
7506       }
7507
7508   for (i = 0, segment = elf_tdata (ibfd)->phdr;
7509        i < num_segments;
7510        i++, segment++)
7511     {
7512       asection *section;
7513       unsigned int section_count;
7514       size_t amt;
7515       Elf_Internal_Shdr *this_hdr;
7516       asection *first_section = NULL;
7517       asection *lowest_section;
7518
7519       /* Compute how many sections are in this segment.  */
7520       for (section = ibfd->sections, section_count = 0;
7521            section != NULL;
7522            section = section->next)
7523         {
7524           this_hdr = &(elf_section_data(section)->this_hdr);
7525           if (ELF_SECTION_IN_SEGMENT (this_hdr, segment))
7526             {
7527               if (first_section == NULL)
7528                 first_section = section;
7529               section_count++;
7530             }
7531         }
7532
7533       /* Allocate a segment map big enough to contain
7534          all of the sections we have selected.  */
7535       amt = sizeof (struct elf_segment_map) - sizeof (asection *);
7536       amt += section_count * sizeof (asection *);
7537       map = (struct elf_segment_map *) bfd_zalloc (obfd, amt);
7538       if (map == NULL)
7539         return FALSE;
7540
7541       /* Initialize the fields of the output segment map with the
7542          input segment.  */
7543       map->next = NULL;
7544       map->p_type = segment->p_type;
7545       map->p_flags = segment->p_flags;
7546       map->p_flags_valid = 1;
7547       map->p_paddr = segment->p_paddr;
7548       map->p_paddr_valid = p_paddr_valid;
7549       map->p_align = segment->p_align;
7550       map->p_align_valid = 1;
7551       map->p_vaddr_offset = 0;
7552
7553       if (map->p_type == PT_GNU_RELRO
7554           || map->p_type == PT_GNU_STACK)
7555         {
7556           /* The PT_GNU_RELRO segment may contain the first a few
7557              bytes in the .got.plt section even if the whole .got.plt
7558              section isn't in the PT_GNU_RELRO segment.  We won't
7559              change the size of the PT_GNU_RELRO segment.
7560              Similarly, PT_GNU_STACK size is significant on uclinux
7561              systems.    */
7562           map->p_size = segment->p_memsz;
7563           map->p_size_valid = 1;
7564         }
7565
7566       /* Determine if this segment contains the ELF file header
7567          and if it contains the program headers themselves.  */
7568       map->includes_filehdr = (segment->p_offset == 0
7569                                && segment->p_filesz >= iehdr->e_ehsize);
7570
7571       map->includes_phdrs = 0;
7572       if (! phdr_included || segment->p_type != PT_LOAD)
7573         {
7574           map->includes_phdrs =
7575             (segment->p_offset <= (bfd_vma) iehdr->e_phoff
7576              && (segment->p_offset + segment->p_filesz
7577                  >= ((bfd_vma) iehdr->e_phoff
7578                      + iehdr->e_phnum * iehdr->e_phentsize)));
7579
7580           if (segment->p_type == PT_LOAD && map->includes_phdrs)
7581             phdr_included = TRUE;
7582         }
7583
7584       lowest_section = NULL;
7585       if (section_count != 0)
7586         {
7587           unsigned int isec = 0;
7588
7589           for (section = first_section;
7590                section != NULL;
7591                section = section->next)
7592             {
7593               this_hdr = &(elf_section_data(section)->this_hdr);
7594               if (ELF_SECTION_IN_SEGMENT (this_hdr, segment))
7595                 {
7596                   map->sections[isec++] = section->output_section;
7597                   if ((section->flags & SEC_ALLOC) != 0)
7598                     {
7599                       bfd_vma seg_off;
7600
7601                       if (lowest_section == NULL
7602                           || section->lma < lowest_section->lma)
7603                         lowest_section = section;
7604
7605                       /* Section lmas are set up from PT_LOAD header
7606                          p_paddr in _bfd_elf_make_section_from_shdr.
7607                          If this header has a p_paddr that disagrees
7608                          with the section lma, flag the p_paddr as
7609                          invalid.  */
7610                       if ((section->flags & SEC_LOAD) != 0)
7611                         seg_off = this_hdr->sh_offset - segment->p_offset;
7612                       else
7613                         seg_off = this_hdr->sh_addr - segment->p_vaddr;
7614                       if (section->lma * opb - segment->p_paddr != seg_off)
7615                         map->p_paddr_valid = FALSE;
7616                     }
7617                   if (isec == section_count)
7618                     break;
7619                 }
7620             }
7621         }
7622
7623       if (section_count == 0)
7624         map->p_vaddr_offset = segment->p_vaddr / opb;
7625       else if (map->p_paddr_valid)
7626         {
7627           /* Account for padding before the first section in the segment.  */
7628           bfd_vma hdr_size = 0;
7629           if (map->includes_filehdr)
7630             hdr_size = iehdr->e_ehsize;
7631           if (map->includes_phdrs)
7632             hdr_size += iehdr->e_phnum * iehdr->e_phentsize;
7633
7634           map->p_vaddr_offset = ((map->p_paddr + hdr_size) / opb
7635                                  - (lowest_section ? lowest_section->lma : 0));
7636         }
7637
7638       map->count = section_count;
7639       *pointer_to_map = map;
7640       pointer_to_map = &map->next;
7641     }
7642
7643   elf_seg_map (obfd) = map_first;
7644   return TRUE;
7645 }
7646
7647 /* Copy private BFD data.  This copies or rewrites ELF program header
7648    information.  */
7649
7650 static bfd_boolean
7651 copy_private_bfd_data (bfd *ibfd, bfd *obfd)
7652 {
7653   if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
7654       || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
7655     return TRUE;
7656
7657   if (elf_tdata (ibfd)->phdr == NULL)
7658     return TRUE;
7659
7660   if (ibfd->xvec == obfd->xvec)
7661     {
7662       /* Check to see if any sections in the input BFD
7663          covered by ELF program header have changed.  */
7664       Elf_Internal_Phdr *segment;
7665       asection *section, *osec;
7666       unsigned int i, num_segments;
7667       Elf_Internal_Shdr *this_hdr;
7668       const struct elf_backend_data *bed;
7669
7670       bed = get_elf_backend_data (ibfd);
7671
7672       /* Regenerate the segment map if p_paddr is set to 0.  */
7673       if (bed->want_p_paddr_set_to_zero)
7674         goto rewrite;
7675
7676       /* Initialize the segment mark field.  */
7677       for (section = obfd->sections; section != NULL;
7678            section = section->next)
7679         section->segment_mark = FALSE;
7680
7681       num_segments = elf_elfheader (ibfd)->e_phnum;
7682       for (i = 0, segment = elf_tdata (ibfd)->phdr;
7683            i < num_segments;
7684            i++, segment++)
7685         {
7686           /* PR binutils/3535.  The Solaris linker always sets the p_paddr
7687              and p_memsz fields of special segments (DYNAMIC, INTERP) to 0
7688              which severly confuses things, so always regenerate the segment
7689              map in this case.  */
7690           if (segment->p_paddr == 0
7691               && segment->p_memsz == 0
7692               && (segment->p_type == PT_INTERP || segment->p_type == PT_DYNAMIC))
7693             goto rewrite;
7694
7695           for (section = ibfd->sections;
7696                section != NULL; section = section->next)
7697             {
7698               /* We mark the output section so that we know it comes
7699                  from the input BFD.  */
7700               osec = section->output_section;
7701               if (osec)
7702                 osec->segment_mark = TRUE;
7703
7704               /* Check if this section is covered by the segment.  */
7705               this_hdr = &(elf_section_data(section)->this_hdr);
7706               if (ELF_SECTION_IN_SEGMENT (this_hdr, segment))
7707                 {
7708                   /* FIXME: Check if its output section is changed or
7709                      removed.  What else do we need to check?  */
7710                   if (osec == NULL
7711                       || section->flags != osec->flags
7712                       || section->lma != osec->lma
7713                       || section->vma != osec->vma
7714                       || section->size != osec->size
7715                       || section->rawsize != osec->rawsize
7716                       || section->alignment_power != osec->alignment_power)
7717                     goto rewrite;
7718                 }
7719             }
7720         }
7721
7722       /* Check to see if any output section do not come from the
7723          input BFD.  */
7724       for (section = obfd->sections; section != NULL;
7725            section = section->next)
7726         {
7727           if (!section->segment_mark)
7728             goto rewrite;
7729           else
7730             section->segment_mark = FALSE;
7731         }
7732
7733       return copy_elf_program_header (ibfd, obfd);
7734     }
7735
7736  rewrite:
7737   if (ibfd->xvec == obfd->xvec)
7738     {
7739       /* When rewriting program header, set the output maxpagesize to
7740          the maximum alignment of input PT_LOAD segments.  */
7741       Elf_Internal_Phdr *segment;
7742       unsigned int i;
7743       unsigned int num_segments = elf_elfheader (ibfd)->e_phnum;
7744       bfd_vma maxpagesize = 0;
7745
7746       for (i = 0, segment = elf_tdata (ibfd)->phdr;
7747            i < num_segments;
7748            i++, segment++)
7749         if (segment->p_type == PT_LOAD
7750             && maxpagesize < segment->p_align)
7751           {
7752             /* PR 17512: file: f17299af.  */
7753             if (segment->p_align > (bfd_vma) 1 << ((sizeof (bfd_vma) * 8) - 2))
7754               /* xgettext:c-format */
7755               _bfd_error_handler (_("%pB: warning: segment alignment of %#"
7756                                     PRIx64 " is too large"),
7757                                   ibfd, (uint64_t) segment->p_align);
7758             else
7759               maxpagesize = segment->p_align;
7760           }
7761
7762       if (maxpagesize != get_elf_backend_data (obfd)->maxpagesize)
7763         bfd_emul_set_maxpagesize (bfd_get_target (obfd), maxpagesize);
7764     }
7765
7766   return rewrite_elf_program_header (ibfd, obfd);
7767 }
7768
7769 /* Initialize private output section information from input section.  */
7770
7771 bfd_boolean
7772 _bfd_elf_init_private_section_data (bfd *ibfd,
7773                                     asection *isec,
7774                                     bfd *obfd,
7775                                     asection *osec,
7776                                     struct bfd_link_info *link_info)
7777
7778 {
7779   Elf_Internal_Shdr *ihdr, *ohdr;
7780   bfd_boolean final_link = (link_info != NULL
7781                             && !bfd_link_relocatable (link_info));
7782
7783   if (ibfd->xvec->flavour != bfd_target_elf_flavour
7784       || obfd->xvec->flavour != bfd_target_elf_flavour)
7785     return TRUE;
7786
7787   BFD_ASSERT (elf_section_data (osec) != NULL);
7788
7789   /* If this is a known ABI section, ELF section type and flags may
7790      have been set up when OSEC was created.  For normal sections we
7791      allow the user to override the type and flags other than
7792      SHF_MASKOS and SHF_MASKPROC.  */
7793   if (elf_section_type (osec) == SHT_PROGBITS
7794       || elf_section_type (osec) == SHT_NOTE
7795       || elf_section_type (osec) == SHT_NOBITS)
7796     elf_section_type (osec) = SHT_NULL;
7797   /* For objcopy and relocatable link, copy the ELF section type from
7798      the input file if the BFD section flags are the same.  (If they
7799      are different the user may be doing something like
7800      "objcopy --set-section-flags .text=alloc,data".)  For a final
7801      link allow some flags that the linker clears to differ.  */
7802   if (elf_section_type (osec) == SHT_NULL
7803       && (osec->flags == isec->flags
7804           || (final_link
7805               && ((osec->flags ^ isec->flags)
7806                   & ~(SEC_LINK_ONCE | SEC_LINK_DUPLICATES | SEC_RELOC)) == 0)))
7807     elf_section_type (osec) = elf_section_type (isec);
7808
7809   /* FIXME: Is this correct for all OS/PROC specific flags?  */
7810   elf_section_flags (osec) = (elf_section_flags (isec)
7811                               & (SHF_MASKOS | SHF_MASKPROC));
7812
7813   /* Copy sh_info from input for mbind section.  */
7814   if ((elf_tdata (ibfd)->has_gnu_osabi & elf_gnu_osabi_mbind) != 0
7815       && elf_section_flags (isec) & SHF_GNU_MBIND)
7816     elf_section_data (osec)->this_hdr.sh_info
7817       = elf_section_data (isec)->this_hdr.sh_info;
7818
7819   /* Set things up for objcopy and relocatable link.  The output
7820      SHT_GROUP section will have its elf_next_in_group pointing back
7821      to the input group members.  Ignore linker created group section.
7822      See elfNN_ia64_object_p in elfxx-ia64.c.  */
7823   if ((link_info == NULL
7824        || !link_info->resolve_section_groups)
7825       && (elf_sec_group (isec) == NULL
7826           || (elf_sec_group (isec)->flags & SEC_LINKER_CREATED) == 0))
7827     {
7828       if (elf_section_flags (isec) & SHF_GROUP)
7829         elf_section_flags (osec) |= SHF_GROUP;
7830       elf_next_in_group (osec) = elf_next_in_group (isec);
7831       elf_section_data (osec)->group = elf_section_data (isec)->group;
7832     }
7833
7834   /* If not decompress, preserve SHF_COMPRESSED.  */
7835   if (!final_link && (ibfd->flags & BFD_DECOMPRESS) == 0)
7836     elf_section_flags (osec) |= (elf_section_flags (isec)
7837                                  & SHF_COMPRESSED);
7838
7839   ihdr = &elf_section_data (isec)->this_hdr;
7840
7841   /* We need to handle elf_linked_to_section for SHF_LINK_ORDER. We
7842      don't use the output section of the linked-to section since it
7843      may be NULL at this point.  */
7844   if ((ihdr->sh_flags & SHF_LINK_ORDER) != 0)
7845     {
7846       ohdr = &elf_section_data (osec)->this_hdr;
7847       ohdr->sh_flags |= SHF_LINK_ORDER;
7848       elf_linked_to_section (osec) = elf_linked_to_section (isec);
7849     }
7850
7851   osec->use_rela_p = isec->use_rela_p;
7852
7853   return TRUE;
7854 }
7855
7856 /* Copy private section information.  This copies over the entsize
7857    field, and sometimes the info field.  */
7858
7859 bfd_boolean
7860 _bfd_elf_copy_private_section_data (bfd *ibfd,
7861                                     asection *isec,
7862                                     bfd *obfd,
7863                                     asection *osec)
7864 {
7865   Elf_Internal_Shdr *ihdr, *ohdr;
7866
7867   if (ibfd->xvec->flavour != bfd_target_elf_flavour
7868       || obfd->xvec->flavour != bfd_target_elf_flavour)
7869     return TRUE;
7870
7871   ihdr = &elf_section_data (isec)->this_hdr;
7872   ohdr = &elf_section_data (osec)->this_hdr;
7873
7874   ohdr->sh_entsize = ihdr->sh_entsize;
7875
7876   if (ihdr->sh_type == SHT_SYMTAB
7877       || ihdr->sh_type == SHT_DYNSYM
7878       || ihdr->sh_type == SHT_GNU_verneed
7879       || ihdr->sh_type == SHT_GNU_verdef)
7880     ohdr->sh_info = ihdr->sh_info;
7881
7882   return _bfd_elf_init_private_section_data (ibfd, isec, obfd, osec,
7883                                              NULL);
7884 }
7885
7886 /* Look at all the SHT_GROUP sections in IBFD, making any adjustments
7887    necessary if we are removing either the SHT_GROUP section or any of
7888    the group member sections.  DISCARDED is the value that a section's
7889    output_section has if the section will be discarded, NULL when this
7890    function is called from objcopy, bfd_abs_section_ptr when called
7891    from the linker.  */
7892
7893 bfd_boolean
7894 _bfd_elf_fixup_group_sections (bfd *ibfd, asection *discarded)
7895 {
7896   asection *isec;
7897
7898   for (isec = ibfd->sections; isec != NULL; isec = isec->next)
7899     if (elf_section_type (isec) == SHT_GROUP)
7900       {
7901         asection *first = elf_next_in_group (isec);
7902         asection *s = first;
7903         bfd_size_type removed = 0;
7904
7905         while (s != NULL)
7906           {
7907             /* If this member section is being output but the
7908                SHT_GROUP section is not, then clear the group info
7909                set up by _bfd_elf_copy_private_section_data.  */
7910             if (s->output_section != discarded
7911                 && isec->output_section == discarded)
7912               {
7913                 elf_section_flags (s->output_section) &= ~SHF_GROUP;
7914                 elf_group_name (s->output_section) = NULL;
7915               }
7916             else
7917               {
7918                 struct bfd_elf_section_data *elf_sec = elf_section_data (s);
7919                 if (s->output_section == discarded
7920                     && isec->output_section != discarded)
7921                   {
7922                     /* Conversely, if the member section is not being
7923                        output but the SHT_GROUP section is, then adjust
7924                        its size.  */
7925                     removed += 4;
7926                     if (elf_sec->rel.hdr != NULL
7927                         && (elf_sec->rel.hdr->sh_flags & SHF_GROUP) != 0)
7928                       removed += 4;
7929                     if (elf_sec->rela.hdr != NULL
7930                         && (elf_sec->rela.hdr->sh_flags & SHF_GROUP) != 0)
7931                       removed += 4;
7932                   }
7933                 else
7934                   {
7935                     /* Also adjust for zero-sized relocation member
7936                        section.  */
7937                     if (elf_sec->rel.hdr != NULL
7938                         && elf_sec->rel.hdr->sh_size == 0)
7939                       removed += 4;
7940                     if (elf_sec->rela.hdr != NULL
7941                         && elf_sec->rela.hdr->sh_size == 0)
7942                       removed += 4;
7943                   }
7944               }
7945             s = elf_next_in_group (s);
7946             if (s == first)
7947               break;
7948           }
7949         if (removed != 0)
7950           {
7951             if (discarded != NULL)
7952               {
7953                 /* If we've been called for ld -r, then we need to
7954                    adjust the input section size.  */
7955                 if (isec->rawsize == 0)
7956                   isec->rawsize = isec->size;
7957                 isec->size = isec->rawsize - removed;
7958                 if (isec->size <= 4)
7959                   {
7960                     isec->size = 0;
7961                     isec->flags |= SEC_EXCLUDE;
7962                   }
7963               }
7964             else
7965               {
7966                 /* Adjust the output section size when called from
7967                    objcopy. */
7968                 isec->output_section->size -= removed;
7969                 if (isec->output_section->size <= 4)
7970                   {
7971                     isec->output_section->size = 0;
7972                     isec->output_section->flags |= SEC_EXCLUDE;
7973                   }
7974               }
7975           }
7976       }
7977
7978   return TRUE;
7979 }
7980
7981 /* Copy private header information.  */
7982
7983 bfd_boolean
7984 _bfd_elf_copy_private_header_data (bfd *ibfd, bfd *obfd)
7985 {
7986   if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
7987       || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
7988     return TRUE;
7989
7990   /* Copy over private BFD data if it has not already been copied.
7991      This must be done here, rather than in the copy_private_bfd_data
7992      entry point, because the latter is called after the section
7993      contents have been set, which means that the program headers have
7994      already been worked out.  */
7995   if (elf_seg_map (obfd) == NULL && elf_tdata (ibfd)->phdr != NULL)
7996     {
7997       if (! copy_private_bfd_data (ibfd, obfd))
7998         return FALSE;
7999     }
8000
8001   return _bfd_elf_fixup_group_sections (ibfd, NULL);
8002 }
8003
8004 /* Copy private symbol information.  If this symbol is in a section
8005    which we did not map into a BFD section, try to map the section
8006    index correctly.  We use special macro definitions for the mapped
8007    section indices; these definitions are interpreted by the
8008    swap_out_syms function.  */
8009
8010 #define MAP_ONESYMTAB (SHN_HIOS + 1)
8011 #define MAP_DYNSYMTAB (SHN_HIOS + 2)
8012 #define MAP_STRTAB    (SHN_HIOS + 3)
8013 #define MAP_SHSTRTAB  (SHN_HIOS + 4)
8014 #define MAP_SYM_SHNDX (SHN_HIOS + 5)
8015
8016 bfd_boolean
8017 _bfd_elf_copy_private_symbol_data (bfd *ibfd,
8018                                    asymbol *isymarg,
8019                                    bfd *obfd,
8020                                    asymbol *osymarg)
8021 {
8022   elf_symbol_type *isym, *osym;
8023
8024   if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
8025       || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
8026     return TRUE;
8027
8028   isym = elf_symbol_from (ibfd, isymarg);
8029   osym = elf_symbol_from (obfd, osymarg);
8030
8031   if (isym != NULL
8032       && isym->internal_elf_sym.st_shndx != 0
8033       && osym != NULL
8034       && bfd_is_abs_section (isym->symbol.section))
8035     {
8036       unsigned int shndx;
8037
8038       shndx = isym->internal_elf_sym.st_shndx;
8039       if (shndx == elf_onesymtab (ibfd))
8040         shndx = MAP_ONESYMTAB;
8041       else if (shndx == elf_dynsymtab (ibfd))
8042         shndx = MAP_DYNSYMTAB;
8043       else if (shndx == elf_strtab_sec (ibfd))
8044         shndx = MAP_STRTAB;
8045       else if (shndx == elf_shstrtab_sec (ibfd))
8046         shndx = MAP_SHSTRTAB;
8047       else if (find_section_in_list (shndx, elf_symtab_shndx_list (ibfd)))
8048         shndx = MAP_SYM_SHNDX;
8049       osym->internal_elf_sym.st_shndx = shndx;
8050     }
8051
8052   return TRUE;
8053 }
8054
8055 /* Swap out the symbols.  */
8056
8057 static bfd_boolean
8058 swap_out_syms (bfd *abfd,
8059                struct elf_strtab_hash **sttp,
8060                int relocatable_p)
8061 {
8062   const struct elf_backend_data *bed;
8063   unsigned int symcount;
8064   asymbol **syms;
8065   struct elf_strtab_hash *stt;
8066   Elf_Internal_Shdr *symtab_hdr;
8067   Elf_Internal_Shdr *symtab_shndx_hdr;
8068   Elf_Internal_Shdr *symstrtab_hdr;
8069   struct elf_sym_strtab *symstrtab;
8070   bfd_byte *outbound_syms;
8071   bfd_byte *outbound_shndx;
8072   unsigned long outbound_syms_index;
8073   unsigned long outbound_shndx_index;
8074   unsigned int idx;
8075   unsigned int num_locals;
8076   size_t amt;
8077   bfd_boolean name_local_sections;
8078
8079   if (!elf_map_symbols (abfd, &num_locals))
8080     return FALSE;
8081
8082   /* Dump out the symtabs.  */
8083   stt = _bfd_elf_strtab_init ();
8084   if (stt == NULL)
8085     return FALSE;
8086
8087   bed = get_elf_backend_data (abfd);
8088   symcount = bfd_get_symcount (abfd);
8089   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
8090   symtab_hdr->sh_type = SHT_SYMTAB;
8091   symtab_hdr->sh_entsize = bed->s->sizeof_sym;
8092   symtab_hdr->sh_size = symtab_hdr->sh_entsize * (symcount + 1);
8093   symtab_hdr->sh_info = num_locals + 1;
8094   symtab_hdr->sh_addralign = (bfd_vma) 1 << bed->s->log_file_align;
8095
8096   symstrtab_hdr = &elf_tdata (abfd)->strtab_hdr;
8097   symstrtab_hdr->sh_type = SHT_STRTAB;
8098
8099   /* Allocate buffer to swap out the .strtab section.  */
8100   if (_bfd_mul_overflow (symcount + 1, sizeof (*symstrtab), &amt)
8101       || (symstrtab = (struct elf_sym_strtab *) bfd_malloc (amt)) == NULL)
8102     {
8103       bfd_set_error (bfd_error_no_memory);
8104       _bfd_elf_strtab_free (stt);
8105       return FALSE;
8106     }
8107
8108   if (_bfd_mul_overflow (symcount + 1, bed->s->sizeof_sym, &amt)
8109       || (outbound_syms = (bfd_byte *) bfd_alloc (abfd, amt)) == NULL)
8110     {
8111     error_no_mem:
8112       bfd_set_error (bfd_error_no_memory);
8113     error_return:
8114       free (symstrtab);
8115       _bfd_elf_strtab_free (stt);
8116       return FALSE;
8117     }
8118   symtab_hdr->contents = outbound_syms;
8119   outbound_syms_index = 0;
8120
8121   outbound_shndx = NULL;
8122   outbound_shndx_index = 0;
8123
8124   if (elf_symtab_shndx_list (abfd))
8125     {
8126       symtab_shndx_hdr = & elf_symtab_shndx_list (abfd)->hdr;
8127       if (symtab_shndx_hdr->sh_name != 0)
8128         {
8129           if (_bfd_mul_overflow (symcount + 1,
8130                                  sizeof (Elf_External_Sym_Shndx), &amt))
8131             goto error_no_mem;
8132           outbound_shndx =  (bfd_byte *) bfd_zalloc (abfd, amt);
8133           if (outbound_shndx == NULL)
8134             goto error_return;
8135
8136           symtab_shndx_hdr->contents = outbound_shndx;
8137           symtab_shndx_hdr->sh_type = SHT_SYMTAB_SHNDX;
8138           symtab_shndx_hdr->sh_size = amt;
8139           symtab_shndx_hdr->sh_addralign = sizeof (Elf_External_Sym_Shndx);
8140           symtab_shndx_hdr->sh_entsize = sizeof (Elf_External_Sym_Shndx);
8141         }
8142       /* FIXME: What about any other headers in the list ?  */
8143     }
8144
8145   /* Now generate the data (for "contents").  */
8146   {
8147     /* Fill in zeroth symbol and swap it out.  */
8148     Elf_Internal_Sym sym;
8149     sym.st_name = 0;
8150     sym.st_value = 0;
8151     sym.st_size = 0;
8152     sym.st_info = 0;
8153     sym.st_other = 0;
8154     sym.st_shndx = SHN_UNDEF;
8155     sym.st_target_internal = 0;
8156     symstrtab[0].sym = sym;
8157     symstrtab[0].dest_index = outbound_syms_index;
8158     symstrtab[0].destshndx_index = outbound_shndx_index;
8159     outbound_syms_index++;
8160     if (outbound_shndx != NULL)
8161       outbound_shndx_index++;
8162   }
8163
8164   name_local_sections
8165     = (bed->elf_backend_name_local_section_symbols
8166        && bed->elf_backend_name_local_section_symbols (abfd));
8167
8168   syms = bfd_get_outsymbols (abfd);
8169   for (idx = 0; idx < symcount;)
8170     {
8171       Elf_Internal_Sym sym;
8172       bfd_vma value = syms[idx]->value;
8173       elf_symbol_type *type_ptr;
8174       flagword flags = syms[idx]->flags;
8175       int type;
8176
8177       if (!name_local_sections
8178           && (flags & (BSF_SECTION_SYM | BSF_GLOBAL)) == BSF_SECTION_SYM)
8179         {
8180           /* Local section symbols have no name.  */
8181           sym.st_name = (unsigned long) -1;
8182         }
8183       else
8184         {
8185           /* Call _bfd_elf_strtab_offset after _bfd_elf_strtab_finalize
8186              to get the final offset for st_name.  */
8187           sym.st_name
8188             = (unsigned long) _bfd_elf_strtab_add (stt, syms[idx]->name,
8189                                                    FALSE);
8190           if (sym.st_name == (unsigned long) -1)
8191             goto error_return;
8192         }
8193
8194       type_ptr = elf_symbol_from (abfd, syms[idx]);
8195
8196       if ((flags & BSF_SECTION_SYM) == 0
8197           && bfd_is_com_section (syms[idx]->section))
8198         {
8199           /* ELF common symbols put the alignment into the `value' field,
8200              and the size into the `size' field.  This is backwards from
8201              how BFD handles it, so reverse it here.  */
8202           sym.st_size = value;
8203           if (type_ptr == NULL
8204               || type_ptr->internal_elf_sym.st_value == 0)
8205             sym.st_value = value >= 16 ? 16 : (1 << bfd_log2 (value));
8206           else
8207             sym.st_value = type_ptr->internal_elf_sym.st_value;
8208           sym.st_shndx = _bfd_elf_section_from_bfd_section
8209             (abfd, syms[idx]->section);
8210         }
8211       else
8212         {
8213           asection *sec = syms[idx]->section;
8214           unsigned int shndx;
8215
8216           if (sec->output_section)
8217             {
8218               value += sec->output_offset;
8219               sec = sec->output_section;
8220             }
8221
8222           /* Don't add in the section vma for relocatable output.  */
8223           if (! relocatable_p)
8224             value += sec->vma;
8225           sym.st_value = value;
8226           sym.st_size = type_ptr ? type_ptr->internal_elf_sym.st_size : 0;
8227
8228           if (bfd_is_abs_section (sec)
8229               && type_ptr != NULL
8230               && type_ptr->internal_elf_sym.st_shndx != 0)
8231             {
8232               /* This symbol is in a real ELF section which we did
8233                  not create as a BFD section.  Undo the mapping done
8234                  by copy_private_symbol_data.  */
8235               shndx = type_ptr->internal_elf_sym.st_shndx;
8236               switch (shndx)
8237                 {
8238                 case MAP_ONESYMTAB:
8239                   shndx = elf_onesymtab (abfd);
8240                   break;
8241                 case MAP_DYNSYMTAB:
8242                   shndx = elf_dynsymtab (abfd);
8243                   break;
8244                 case MAP_STRTAB:
8245                   shndx = elf_strtab_sec (abfd);
8246                   break;
8247                 case MAP_SHSTRTAB:
8248                   shndx = elf_shstrtab_sec (abfd);
8249                   break;
8250                 case MAP_SYM_SHNDX:
8251                   if (elf_symtab_shndx_list (abfd))
8252                     shndx = elf_symtab_shndx_list (abfd)->ndx;
8253                   break;
8254                 case SHN_COMMON:
8255                 case SHN_ABS:
8256                   shndx = SHN_ABS;
8257                   break;
8258                 default:
8259                   if (shndx >= SHN_LOPROC && shndx <= SHN_HIOS)
8260                     {
8261                       if (bed->symbol_section_index)
8262                         shndx = bed->symbol_section_index (abfd, type_ptr);
8263                       /* Otherwise just leave the index alone.  */
8264                     }
8265                   else
8266                     {
8267                       if (shndx > SHN_HIOS && shndx < SHN_HIRESERVE)
8268                         _bfd_error_handler (_("%pB: \
8269 Unable to handle section index %x in ELF symbol.  Using ABS instead."),
8270                                           abfd, shndx);
8271                       shndx = SHN_ABS;
8272                     }
8273                   break;
8274                 }
8275             }
8276           else
8277             {
8278               shndx = _bfd_elf_section_from_bfd_section (abfd, sec);
8279
8280               if (shndx == SHN_BAD)
8281                 {
8282                   asection *sec2;
8283
8284                   /* Writing this would be a hell of a lot easier if
8285                      we had some decent documentation on bfd, and
8286                      knew what to expect of the library, and what to
8287                      demand of applications.  For example, it
8288                      appears that `objcopy' might not set the
8289                      section of a symbol to be a section that is
8290                      actually in the output file.  */
8291                   sec2 = bfd_get_section_by_name (abfd, sec->name);
8292                   if (sec2 != NULL)
8293                     shndx = _bfd_elf_section_from_bfd_section (abfd, sec2);
8294                   if (shndx == SHN_BAD)
8295                     {
8296                       /* xgettext:c-format */
8297                       _bfd_error_handler
8298                         (_("unable to find equivalent output section"
8299                            " for symbol '%s' from section '%s'"),
8300                          syms[idx]->name ? syms[idx]->name : "<Local sym>",
8301                          sec->name);
8302                       bfd_set_error (bfd_error_invalid_operation);
8303                       goto error_return;
8304                     }
8305                 }
8306             }
8307
8308           sym.st_shndx = shndx;
8309         }
8310
8311       if ((flags & BSF_THREAD_LOCAL) != 0)
8312         type = STT_TLS;
8313       else if ((flags & BSF_GNU_INDIRECT_FUNCTION) != 0)
8314         type = STT_GNU_IFUNC;
8315       else if ((flags & BSF_FUNCTION) != 0)
8316         type = STT_FUNC;
8317       else if ((flags & BSF_OBJECT) != 0)
8318         type = STT_OBJECT;
8319       else if ((flags & BSF_RELC) != 0)
8320         type = STT_RELC;
8321       else if ((flags & BSF_SRELC) != 0)
8322         type = STT_SRELC;
8323       else
8324         type = STT_NOTYPE;
8325
8326       if (syms[idx]->section->flags & SEC_THREAD_LOCAL)
8327         type = STT_TLS;
8328
8329       /* Processor-specific types.  */
8330       if (type_ptr != NULL
8331           && bed->elf_backend_get_symbol_type)
8332         type = ((*bed->elf_backend_get_symbol_type)
8333                 (&type_ptr->internal_elf_sym, type));
8334
8335       if (flags & BSF_SECTION_SYM)
8336         {
8337           if (flags & BSF_GLOBAL)
8338             sym.st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
8339           else
8340             sym.st_info = ELF_ST_INFO (STB_LOCAL, STT_SECTION);
8341         }
8342       else if (bfd_is_com_section (syms[idx]->section))
8343         {
8344           if (type != STT_TLS)
8345             {
8346               if ((abfd->flags & BFD_CONVERT_ELF_COMMON))
8347                 type = ((abfd->flags & BFD_USE_ELF_STT_COMMON)
8348                         ? STT_COMMON : STT_OBJECT);
8349               else
8350                 type = ((flags & BSF_ELF_COMMON) != 0
8351                         ? STT_COMMON : STT_OBJECT);
8352             }
8353           sym.st_info = ELF_ST_INFO (STB_GLOBAL, type);
8354         }
8355       else if (bfd_is_und_section (syms[idx]->section))
8356         sym.st_info = ELF_ST_INFO (((flags & BSF_WEAK)
8357                                     ? STB_WEAK
8358                                     : STB_GLOBAL),
8359                                    type);
8360       else if (flags & BSF_FILE)
8361         sym.st_info = ELF_ST_INFO (STB_LOCAL, STT_FILE);
8362       else
8363         {
8364           int bind = STB_LOCAL;
8365
8366           if (flags & BSF_LOCAL)
8367             bind = STB_LOCAL;
8368           else if (flags & BSF_GNU_UNIQUE)
8369             bind = STB_GNU_UNIQUE;
8370           else if (flags & BSF_WEAK)
8371             bind = STB_WEAK;
8372           else if (flags & BSF_GLOBAL)
8373             bind = STB_GLOBAL;
8374
8375           sym.st_info = ELF_ST_INFO (bind, type);
8376         }
8377
8378       if (type_ptr != NULL)
8379         {
8380           sym.st_other = type_ptr->internal_elf_sym.st_other;
8381           sym.st_target_internal
8382             = type_ptr->internal_elf_sym.st_target_internal;
8383         }
8384       else
8385         {
8386           sym.st_other = 0;
8387           sym.st_target_internal = 0;
8388         }
8389
8390       idx++;
8391       symstrtab[idx].sym = sym;
8392       symstrtab[idx].dest_index = outbound_syms_index;
8393       symstrtab[idx].destshndx_index = outbound_shndx_index;
8394
8395       outbound_syms_index++;
8396       if (outbound_shndx != NULL)
8397         outbound_shndx_index++;
8398     }
8399
8400   /* Finalize the .strtab section.  */
8401   _bfd_elf_strtab_finalize (stt);
8402
8403   /* Swap out the .strtab section.  */
8404   for (idx = 0; idx <= symcount; idx++)
8405     {
8406       struct elf_sym_strtab *elfsym = &symstrtab[idx];
8407       if (elfsym->sym.st_name == (unsigned long) -1)
8408         elfsym->sym.st_name = 0;
8409       else
8410         elfsym->sym.st_name = _bfd_elf_strtab_offset (stt,
8411                                                       elfsym->sym.st_name);
8412       bed->s->swap_symbol_out (abfd, &elfsym->sym,
8413                                (outbound_syms
8414                                 + (elfsym->dest_index
8415                                    * bed->s->sizeof_sym)),
8416                                (outbound_shndx
8417                                 + (elfsym->destshndx_index
8418                                    * sizeof (Elf_External_Sym_Shndx))));
8419     }
8420   free (symstrtab);
8421
8422   *sttp = stt;
8423   symstrtab_hdr->sh_size = _bfd_elf_strtab_size (stt);
8424   symstrtab_hdr->sh_type = SHT_STRTAB;
8425   symstrtab_hdr->sh_flags = bed->elf_strtab_flags;
8426   symstrtab_hdr->sh_addr = 0;
8427   symstrtab_hdr->sh_entsize = 0;
8428   symstrtab_hdr->sh_link = 0;
8429   symstrtab_hdr->sh_info = 0;
8430   symstrtab_hdr->sh_addralign = 1;
8431
8432   return TRUE;
8433 }
8434
8435 /* Return the number of bytes required to hold the symtab vector.
8436
8437    Note that we base it on the count plus 1, since we will null terminate
8438    the vector allocated based on this size.  However, the ELF symbol table
8439    always has a dummy entry as symbol #0, so it ends up even.  */
8440
8441 long
8442 _bfd_elf_get_symtab_upper_bound (bfd *abfd)
8443 {
8444   bfd_size_type symcount;
8445   long symtab_size;
8446   Elf_Internal_Shdr *hdr = &elf_tdata (abfd)->symtab_hdr;
8447
8448   symcount = hdr->sh_size / get_elf_backend_data (abfd)->s->sizeof_sym;
8449   if (symcount > LONG_MAX / sizeof (asymbol *))
8450     {
8451       bfd_set_error (bfd_error_file_too_big);
8452       return -1;
8453     }
8454   symtab_size = symcount * (sizeof (asymbol *));
8455   if (symcount == 0)
8456     symtab_size = sizeof (asymbol *);
8457   else if (!bfd_write_p (abfd))
8458     {
8459       ufile_ptr filesize = bfd_get_file_size (abfd);
8460
8461       if (filesize != 0 && (unsigned long) symtab_size > filesize)
8462         {
8463           bfd_set_error (bfd_error_file_truncated);
8464           return -1;
8465         }
8466     }
8467
8468   return symtab_size;
8469 }
8470
8471 long
8472 _bfd_elf_get_dynamic_symtab_upper_bound (bfd *abfd)
8473 {
8474   bfd_size_type symcount;
8475   long symtab_size;
8476   Elf_Internal_Shdr *hdr = &elf_tdata (abfd)->dynsymtab_hdr;
8477
8478   if (elf_dynsymtab (abfd) == 0)
8479     {
8480       bfd_set_error (bfd_error_invalid_operation);
8481       return -1;
8482     }
8483
8484   symcount = hdr->sh_size / get_elf_backend_data (abfd)->s->sizeof_sym;
8485   if (symcount > LONG_MAX / sizeof (asymbol *))
8486     {
8487       bfd_set_error (bfd_error_file_too_big);
8488       return -1;
8489     }
8490   symtab_size = symcount * (sizeof (asymbol *));
8491   if (symcount == 0)
8492     symtab_size = sizeof (asymbol *);
8493   else if (!bfd_write_p (abfd))
8494     {
8495       ufile_ptr filesize = bfd_get_file_size (abfd);
8496
8497       if (filesize != 0 && (unsigned long) symtab_size > filesize)
8498         {
8499           bfd_set_error (bfd_error_file_truncated);
8500           return -1;
8501         }
8502     }
8503
8504   return symtab_size;
8505 }
8506
8507 long
8508 _bfd_elf_get_reloc_upper_bound (bfd *abfd, sec_ptr asect)
8509 {
8510   if (asect->reloc_count != 0 && !bfd_write_p (abfd))
8511     {
8512       /* Sanity check reloc section size.  */
8513       struct bfd_elf_section_data *d = elf_section_data (asect);
8514       Elf_Internal_Shdr *rel_hdr = &d->this_hdr;
8515       bfd_size_type ext_rel_size = rel_hdr->sh_size;
8516       ufile_ptr filesize = bfd_get_file_size (abfd);
8517
8518       if (filesize != 0 && ext_rel_size > filesize)
8519         {
8520           bfd_set_error (bfd_error_file_truncated);
8521           return -1;
8522         }
8523     }
8524
8525 #if SIZEOF_LONG == SIZEOF_INT
8526   if (asect->reloc_count >= LONG_MAX / sizeof (arelent *))
8527     {
8528       bfd_set_error (bfd_error_file_too_big);
8529       return -1;
8530     }
8531 #endif
8532   return (asect->reloc_count + 1) * sizeof (arelent *);
8533 }
8534
8535 /* Canonicalize the relocs.  */
8536
8537 long
8538 _bfd_elf_canonicalize_reloc (bfd *abfd,
8539                              sec_ptr section,
8540                              arelent **relptr,
8541                              asymbol **symbols)
8542 {
8543   arelent *tblptr;
8544   unsigned int i;
8545   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
8546
8547   if (! bed->s->slurp_reloc_table (abfd, section, symbols, FALSE))
8548     return -1;
8549
8550   tblptr = section->relocation;
8551   for (i = 0; i < section->reloc_count; i++)
8552     *relptr++ = tblptr++;
8553
8554   *relptr = NULL;
8555
8556   return section->reloc_count;
8557 }
8558
8559 long
8560 _bfd_elf_canonicalize_symtab (bfd *abfd, asymbol **allocation)
8561 {
8562   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
8563   long symcount = bed->s->slurp_symbol_table (abfd, allocation, FALSE);
8564
8565   if (symcount >= 0)
8566     abfd->symcount = symcount;
8567   return symcount;
8568 }
8569
8570 long
8571 _bfd_elf_canonicalize_dynamic_symtab (bfd *abfd,
8572                                       asymbol **allocation)
8573 {
8574   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
8575   long symcount = bed->s->slurp_symbol_table (abfd, allocation, TRUE);
8576
8577   if (symcount >= 0)
8578     abfd->dynsymcount = symcount;
8579   return symcount;
8580 }
8581
8582 /* Return the size required for the dynamic reloc entries.  Any loadable
8583    section that was actually installed in the BFD, and has type SHT_REL
8584    or SHT_RELA, and uses the dynamic symbol table, is considered to be a
8585    dynamic reloc section.  */
8586
8587 long
8588 _bfd_elf_get_dynamic_reloc_upper_bound (bfd *abfd)
8589 {
8590   bfd_size_type count, ext_rel_size;
8591   asection *s;
8592
8593   if (elf_dynsymtab (abfd) == 0)
8594     {
8595       bfd_set_error (bfd_error_invalid_operation);
8596       return -1;
8597     }
8598
8599   count = 1;
8600   ext_rel_size = 0;
8601   for (s = abfd->sections; s != NULL; s = s->next)
8602     if (elf_section_data (s)->this_hdr.sh_link == elf_dynsymtab (abfd)
8603         && (elf_section_data (s)->this_hdr.sh_type == SHT_REL
8604             || elf_section_data (s)->this_hdr.sh_type == SHT_RELA))
8605       {
8606         ext_rel_size += s->size;
8607         if (ext_rel_size < s->size)
8608           {
8609             bfd_set_error (bfd_error_file_truncated);
8610             return -1;
8611           }
8612         count += s->size / elf_section_data (s)->this_hdr.sh_entsize;
8613         if (count > LONG_MAX / sizeof (arelent *))
8614           {
8615             bfd_set_error (bfd_error_file_too_big);
8616             return -1;
8617           }
8618       }
8619   if (count > 1 && !bfd_write_p (abfd))
8620     {
8621       /* Sanity check reloc section sizes.  */
8622       ufile_ptr filesize = bfd_get_file_size (abfd);
8623       if (filesize != 0 && ext_rel_size > filesize)
8624         {
8625           bfd_set_error (bfd_error_file_truncated);
8626           return -1;
8627         }
8628     }
8629   return count * sizeof (arelent *);
8630 }
8631
8632 /* Canonicalize the dynamic relocation entries.  Note that we return the
8633    dynamic relocations as a single block, although they are actually
8634    associated with particular sections; the interface, which was
8635    designed for SunOS style shared libraries, expects that there is only
8636    one set of dynamic relocs.  Any loadable section that was actually
8637    installed in the BFD, and has type SHT_REL or SHT_RELA, and uses the
8638    dynamic symbol table, is considered to be a dynamic reloc section.  */
8639
8640 long
8641 _bfd_elf_canonicalize_dynamic_reloc (bfd *abfd,
8642                                      arelent **storage,
8643                                      asymbol **syms)
8644 {
8645   bfd_boolean (*slurp_relocs) (bfd *, asection *, asymbol **, bfd_boolean);
8646   asection *s;
8647   long ret;
8648
8649   if (elf_dynsymtab (abfd) == 0)
8650     {
8651       bfd_set_error (bfd_error_invalid_operation);
8652       return -1;
8653     }
8654
8655   slurp_relocs = get_elf_backend_data (abfd)->s->slurp_reloc_table;
8656   ret = 0;
8657   for (s = abfd->sections; s != NULL; s = s->next)
8658     {
8659       if (elf_section_data (s)->this_hdr.sh_link == elf_dynsymtab (abfd)
8660           && (elf_section_data (s)->this_hdr.sh_type == SHT_REL
8661               || elf_section_data (s)->this_hdr.sh_type == SHT_RELA))
8662         {
8663           arelent *p;
8664           long count, i;
8665
8666           if (! (*slurp_relocs) (abfd, s, syms, TRUE))
8667             return -1;
8668           count = s->size / elf_section_data (s)->this_hdr.sh_entsize;
8669           p = s->relocation;
8670           for (i = 0; i < count; i++)
8671             *storage++ = p++;
8672           ret += count;
8673         }
8674     }
8675
8676   *storage = NULL;
8677
8678   return ret;
8679 }
8680 \f
8681 /* Read in the version information.  */
8682
8683 bfd_boolean
8684 _bfd_elf_slurp_version_tables (bfd *abfd, bfd_boolean default_imported_symver)
8685 {
8686   bfd_byte *contents = NULL;
8687   unsigned int freeidx = 0;
8688   size_t amt;
8689
8690   if (elf_dynverref (abfd) != 0)
8691     {
8692       Elf_Internal_Shdr *hdr;
8693       Elf_External_Verneed *everneed;
8694       Elf_Internal_Verneed *iverneed;
8695       unsigned int i;
8696       bfd_byte *contents_end;
8697
8698       hdr = &elf_tdata (abfd)->dynverref_hdr;
8699
8700       if (hdr->sh_info == 0
8701           || hdr->sh_info > hdr->sh_size / sizeof (Elf_External_Verneed))
8702         {
8703         error_return_bad_verref:
8704           _bfd_error_handler
8705             (_("%pB: .gnu.version_r invalid entry"), abfd);
8706           bfd_set_error (bfd_error_bad_value);
8707         error_return_verref:
8708           elf_tdata (abfd)->verref = NULL;
8709           elf_tdata (abfd)->cverrefs = 0;
8710           goto error_return;
8711         }
8712
8713       if (bfd_seek (abfd, hdr->sh_offset, SEEK_SET) != 0)
8714         goto error_return_verref;
8715       contents = _bfd_malloc_and_read (abfd, hdr->sh_size, hdr->sh_size);
8716       if (contents == NULL)
8717         goto error_return_verref;
8718
8719       if (_bfd_mul_overflow (hdr->sh_info, sizeof (Elf_Internal_Verneed), &amt))
8720         {
8721           bfd_set_error (bfd_error_file_too_big);
8722           goto error_return_verref;
8723         }
8724       elf_tdata (abfd)->verref = (Elf_Internal_Verneed *) bfd_alloc (abfd, amt);
8725       if (elf_tdata (abfd)->verref == NULL)
8726         goto error_return_verref;
8727
8728       BFD_ASSERT (sizeof (Elf_External_Verneed)
8729                   == sizeof (Elf_External_Vernaux));
8730       contents_end = contents + hdr->sh_size - sizeof (Elf_External_Verneed);
8731       everneed = (Elf_External_Verneed *) contents;
8732       iverneed = elf_tdata (abfd)->verref;
8733       for (i = 0; i < hdr->sh_info; i++, iverneed++)
8734         {
8735           Elf_External_Vernaux *evernaux;
8736           Elf_Internal_Vernaux *ivernaux;
8737           unsigned int j;
8738
8739           _bfd_elf_swap_verneed_in (abfd, everneed, iverneed);
8740
8741           iverneed->vn_bfd = abfd;
8742
8743           iverneed->vn_filename =
8744             bfd_elf_string_from_elf_section (abfd, hdr->sh_link,
8745                                              iverneed->vn_file);
8746           if (iverneed->vn_filename == NULL)
8747             goto error_return_bad_verref;
8748
8749           if (iverneed->vn_cnt == 0)
8750             iverneed->vn_auxptr = NULL;
8751           else
8752             {
8753               if (_bfd_mul_overflow (iverneed->vn_cnt,
8754                                      sizeof (Elf_Internal_Vernaux), &amt))
8755                 {
8756                   bfd_set_error (bfd_error_file_too_big);
8757                   goto error_return_verref;
8758                 }
8759               iverneed->vn_auxptr = (struct elf_internal_vernaux *)
8760                 bfd_alloc (abfd, amt);
8761               if (iverneed->vn_auxptr == NULL)
8762                 goto error_return_verref;
8763             }
8764
8765           if (iverneed->vn_aux
8766               > (size_t) (contents_end - (bfd_byte *) everneed))
8767             goto error_return_bad_verref;
8768
8769           evernaux = ((Elf_External_Vernaux *)
8770                       ((bfd_byte *) everneed + iverneed->vn_aux));
8771           ivernaux = iverneed->vn_auxptr;
8772           for (j = 0; j < iverneed->vn_cnt; j++, ivernaux++)
8773             {
8774               _bfd_elf_swap_vernaux_in (abfd, evernaux, ivernaux);
8775
8776               ivernaux->vna_nodename =
8777                 bfd_elf_string_from_elf_section (abfd, hdr->sh_link,
8778                                                  ivernaux->vna_name);
8779               if (ivernaux->vna_nodename == NULL)
8780                 goto error_return_bad_verref;
8781
8782               if (ivernaux->vna_other > freeidx)
8783                 freeidx = ivernaux->vna_other;
8784
8785               ivernaux->vna_nextptr = NULL;
8786               if (ivernaux->vna_next == 0)
8787                 {
8788                   iverneed->vn_cnt = j + 1;
8789                   break;
8790                 }
8791               if (j + 1 < iverneed->vn_cnt)
8792                 ivernaux->vna_nextptr = ivernaux + 1;
8793
8794               if (ivernaux->vna_next
8795                   > (size_t) (contents_end - (bfd_byte *) evernaux))
8796                 goto error_return_bad_verref;
8797
8798               evernaux = ((Elf_External_Vernaux *)
8799                           ((bfd_byte *) evernaux + ivernaux->vna_next));
8800             }
8801
8802           iverneed->vn_nextref = NULL;
8803           if (iverneed->vn_next == 0)
8804             break;
8805           if (i + 1 < hdr->sh_info)
8806             iverneed->vn_nextref = iverneed + 1;
8807
8808           if (iverneed->vn_next
8809               > (size_t) (contents_end - (bfd_byte *) everneed))
8810             goto error_return_bad_verref;
8811
8812           everneed = ((Elf_External_Verneed *)
8813                       ((bfd_byte *) everneed + iverneed->vn_next));
8814         }
8815       elf_tdata (abfd)->cverrefs = i;
8816
8817       free (contents);
8818       contents = NULL;
8819     }
8820
8821   if (elf_dynverdef (abfd) != 0)
8822     {
8823       Elf_Internal_Shdr *hdr;
8824       Elf_External_Verdef *everdef;
8825       Elf_Internal_Verdef *iverdef;
8826       Elf_Internal_Verdef *iverdefarr;
8827       Elf_Internal_Verdef iverdefmem;
8828       unsigned int i;
8829       unsigned int maxidx;
8830       bfd_byte *contents_end_def, *contents_end_aux;
8831
8832       hdr = &elf_tdata (abfd)->dynverdef_hdr;
8833
8834       if (hdr->sh_info == 0 || hdr->sh_size < sizeof (Elf_External_Verdef))
8835         {
8836         error_return_bad_verdef:
8837           _bfd_error_handler
8838             (_("%pB: .gnu.version_d invalid entry"), abfd);
8839           bfd_set_error (bfd_error_bad_value);
8840         error_return_verdef:
8841           elf_tdata (abfd)->verdef = NULL;
8842           elf_tdata (abfd)->cverdefs = 0;
8843           goto error_return;
8844         }
8845
8846       if (bfd_seek (abfd, hdr->sh_offset, SEEK_SET) != 0)
8847         goto error_return_verdef;
8848       contents = _bfd_malloc_and_read (abfd, hdr->sh_size, hdr->sh_size);
8849       if (contents == NULL)
8850         goto error_return_verdef;
8851
8852       BFD_ASSERT (sizeof (Elf_External_Verdef)
8853                   >= sizeof (Elf_External_Verdaux));
8854       contents_end_def = contents + hdr->sh_size
8855                          - sizeof (Elf_External_Verdef);
8856       contents_end_aux = contents + hdr->sh_size
8857                          - sizeof (Elf_External_Verdaux);
8858
8859       /* We know the number of entries in the section but not the maximum
8860          index.  Therefore we have to run through all entries and find
8861          the maximum.  */
8862       everdef = (Elf_External_Verdef *) contents;
8863       maxidx = 0;
8864       for (i = 0; i < hdr->sh_info; ++i)
8865         {
8866           _bfd_elf_swap_verdef_in (abfd, everdef, &iverdefmem);
8867
8868           if ((iverdefmem.vd_ndx & ((unsigned) VERSYM_VERSION)) == 0)
8869             goto error_return_bad_verdef;
8870           if ((iverdefmem.vd_ndx & ((unsigned) VERSYM_VERSION)) > maxidx)
8871             maxidx = iverdefmem.vd_ndx & ((unsigned) VERSYM_VERSION);
8872
8873           if (iverdefmem.vd_next == 0)
8874             break;
8875
8876           if (iverdefmem.vd_next
8877               > (size_t) (contents_end_def - (bfd_byte *) everdef))
8878             goto error_return_bad_verdef;
8879
8880           everdef = ((Elf_External_Verdef *)
8881                      ((bfd_byte *) everdef + iverdefmem.vd_next));
8882         }
8883
8884       if (default_imported_symver)
8885         {
8886           if (freeidx > maxidx)
8887             maxidx = ++freeidx;
8888           else
8889             freeidx = ++maxidx;
8890         }
8891       if (_bfd_mul_overflow (maxidx, sizeof (Elf_Internal_Verdef), &amt))
8892         {
8893           bfd_set_error (bfd_error_file_too_big);
8894           goto error_return_verdef;
8895         }
8896       elf_tdata (abfd)->verdef = (Elf_Internal_Verdef *) bfd_zalloc (abfd, amt);
8897       if (elf_tdata (abfd)->verdef == NULL)
8898         goto error_return_verdef;
8899
8900       elf_tdata (abfd)->cverdefs = maxidx;
8901
8902       everdef = (Elf_External_Verdef *) contents;
8903       iverdefarr = elf_tdata (abfd)->verdef;
8904       for (i = 0; i < hdr->sh_info; i++)
8905         {
8906           Elf_External_Verdaux *everdaux;
8907           Elf_Internal_Verdaux *iverdaux;
8908           unsigned int j;
8909
8910           _bfd_elf_swap_verdef_in (abfd, everdef, &iverdefmem);
8911
8912           if ((iverdefmem.vd_ndx & VERSYM_VERSION) == 0)
8913             goto error_return_bad_verdef;
8914
8915           iverdef = &iverdefarr[(iverdefmem.vd_ndx & VERSYM_VERSION) - 1];
8916           memcpy (iverdef, &iverdefmem, offsetof (Elf_Internal_Verdef, vd_bfd));
8917
8918           iverdef->vd_bfd = abfd;
8919
8920           if (iverdef->vd_cnt == 0)
8921             iverdef->vd_auxptr = NULL;
8922           else
8923             {
8924               if (_bfd_mul_overflow (iverdef->vd_cnt,
8925                                      sizeof (Elf_Internal_Verdaux), &amt))
8926                 {
8927                   bfd_set_error (bfd_error_file_too_big);
8928                   goto error_return_verdef;
8929                 }
8930               iverdef->vd_auxptr = (struct elf_internal_verdaux *)
8931                 bfd_alloc (abfd, amt);
8932               if (iverdef->vd_auxptr == NULL)
8933                 goto error_return_verdef;
8934             }
8935
8936           if (iverdef->vd_aux
8937               > (size_t) (contents_end_aux - (bfd_byte *) everdef))
8938             goto error_return_bad_verdef;
8939
8940           everdaux = ((Elf_External_Verdaux *)
8941                       ((bfd_byte *) everdef + iverdef->vd_aux));
8942           iverdaux = iverdef->vd_auxptr;
8943           for (j = 0; j < iverdef->vd_cnt; j++, iverdaux++)
8944             {
8945               _bfd_elf_swap_verdaux_in (abfd, everdaux, iverdaux);
8946
8947               iverdaux->vda_nodename =
8948                 bfd_elf_string_from_elf_section (abfd, hdr->sh_link,
8949                                                  iverdaux->vda_name);
8950               if (iverdaux->vda_nodename == NULL)
8951                 goto error_return_bad_verdef;
8952
8953               iverdaux->vda_nextptr = NULL;
8954               if (iverdaux->vda_next == 0)
8955                 {
8956                   iverdef->vd_cnt = j + 1;
8957                   break;
8958                 }
8959               if (j + 1 < iverdef->vd_cnt)
8960                 iverdaux->vda_nextptr = iverdaux + 1;
8961
8962               if (iverdaux->vda_next
8963                   > (size_t) (contents_end_aux - (bfd_byte *) everdaux))
8964                 goto error_return_bad_verdef;
8965
8966               everdaux = ((Elf_External_Verdaux *)
8967                           ((bfd_byte *) everdaux + iverdaux->vda_next));
8968             }
8969
8970           iverdef->vd_nodename = NULL;
8971           if (iverdef->vd_cnt)
8972             iverdef->vd_nodename = iverdef->vd_auxptr->vda_nodename;
8973
8974           iverdef->vd_nextdef = NULL;
8975           if (iverdef->vd_next == 0)
8976             break;
8977           if ((size_t) (iverdef - iverdefarr) + 1 < maxidx)
8978             iverdef->vd_nextdef = iverdef + 1;
8979
8980           everdef = ((Elf_External_Verdef *)
8981                      ((bfd_byte *) everdef + iverdef->vd_next));
8982         }
8983
8984       free (contents);
8985       contents = NULL;
8986     }
8987   else if (default_imported_symver)
8988     {
8989       if (freeidx < 3)
8990         freeidx = 3;
8991       else
8992         freeidx++;
8993
8994       if (_bfd_mul_overflow (freeidx, sizeof (Elf_Internal_Verdef), &amt))
8995         {
8996           bfd_set_error (bfd_error_file_too_big);
8997           goto error_return;
8998         }
8999       elf_tdata (abfd)->verdef = (Elf_Internal_Verdef *) bfd_zalloc (abfd, amt);
9000       if (elf_tdata (abfd)->verdef == NULL)
9001         goto error_return;
9002
9003       elf_tdata (abfd)->cverdefs = freeidx;
9004     }
9005
9006   /* Create a default version based on the soname.  */
9007   if (default_imported_symver)
9008     {
9009       Elf_Internal_Verdef *iverdef;
9010       Elf_Internal_Verdaux *iverdaux;
9011
9012       iverdef = &elf_tdata (abfd)->verdef[freeidx - 1];
9013
9014       iverdef->vd_version = VER_DEF_CURRENT;
9015       iverdef->vd_flags = 0;
9016       iverdef->vd_ndx = freeidx;
9017       iverdef->vd_cnt = 1;
9018
9019       iverdef->vd_bfd = abfd;
9020
9021       iverdef->vd_nodename = bfd_elf_get_dt_soname (abfd);
9022       if (iverdef->vd_nodename == NULL)
9023         goto error_return_verdef;
9024       iverdef->vd_nextdef = NULL;
9025       iverdef->vd_auxptr = ((struct elf_internal_verdaux *)
9026                             bfd_zalloc (abfd, sizeof (Elf_Internal_Verdaux)));
9027       if (iverdef->vd_auxptr == NULL)
9028         goto error_return_verdef;
9029
9030       iverdaux = iverdef->vd_auxptr;
9031       iverdaux->vda_nodename = iverdef->vd_nodename;
9032     }
9033
9034   return TRUE;
9035
9036  error_return:
9037   free (contents);
9038   return FALSE;
9039 }
9040 \f
9041 asymbol *
9042 _bfd_elf_make_empty_symbol (bfd *abfd)
9043 {
9044   elf_symbol_type *newsym;
9045
9046   newsym = (elf_symbol_type *) bfd_zalloc (abfd, sizeof (*newsym));
9047   if (!newsym)
9048     return NULL;
9049   newsym->symbol.the_bfd = abfd;
9050   return &newsym->symbol;
9051 }
9052
9053 void
9054 _bfd_elf_get_symbol_info (bfd *abfd ATTRIBUTE_UNUSED,
9055                           asymbol *symbol,
9056                           symbol_info *ret)
9057 {
9058   bfd_symbol_info (symbol, ret);
9059 }
9060
9061 /* Return whether a symbol name implies a local symbol.  Most targets
9062    use this function for the is_local_label_name entry point, but some
9063    override it.  */
9064
9065 bfd_boolean
9066 _bfd_elf_is_local_label_name (bfd *abfd ATTRIBUTE_UNUSED,
9067                               const char *name)
9068 {
9069   /* Normal local symbols start with ``.L''.  */
9070   if (name[0] == '.' && name[1] == 'L')
9071     return TRUE;
9072
9073   /* At least some SVR4 compilers (e.g., UnixWare 2.1 cc) generate
9074      DWARF debugging symbols starting with ``..''.  */
9075   if (name[0] == '.' && name[1] == '.')
9076     return TRUE;
9077
9078   /* gcc will sometimes generate symbols beginning with ``_.L_'' when
9079      emitting DWARF debugging output.  I suspect this is actually a
9080      small bug in gcc (it calls ASM_OUTPUT_LABEL when it should call
9081      ASM_GENERATE_INTERNAL_LABEL, and this causes the leading
9082      underscore to be emitted on some ELF targets).  For ease of use,
9083      we treat such symbols as local.  */
9084   if (name[0] == '_' && name[1] == '.' && name[2] == 'L' && name[3] == '_')
9085     return TRUE;
9086
9087   /* Treat assembler generated fake symbols, dollar local labels and
9088      forward-backward labels (aka local labels) as locals.
9089      These labels have the form:
9090
9091        L0^A.*                                  (fake symbols)
9092
9093        [.]?L[0123456789]+{^A|^B}[0123456789]*  (local labels)
9094
9095      Versions which start with .L will have already been matched above,
9096      so we only need to match the rest.  */
9097   if (name[0] == 'L' && ISDIGIT (name[1]))
9098     {
9099       bfd_boolean ret = FALSE;
9100       const char * p;
9101       char c;
9102
9103       for (p = name + 2; (c = *p); p++)
9104         {
9105           if (c == 1 || c == 2)
9106             {
9107               if (c == 1 && p == name + 2)
9108                 /* A fake symbol.  */
9109                 return TRUE;
9110
9111               /* FIXME: We are being paranoid here and treating symbols like
9112                  L0^Bfoo as if there were non-local, on the grounds that the
9113                  assembler will never generate them.  But can any symbol
9114                  containing an ASCII value in the range 1-31 ever be anything
9115                  other than some kind of local ?  */
9116               ret = TRUE;
9117             }
9118
9119           if (! ISDIGIT (c))
9120             {
9121               ret = FALSE;
9122               break;
9123             }
9124         }
9125       return ret;
9126     }
9127
9128   return FALSE;
9129 }
9130
9131 alent *
9132 _bfd_elf_get_lineno (bfd *abfd ATTRIBUTE_UNUSED,
9133                      asymbol *symbol ATTRIBUTE_UNUSED)
9134 {
9135   abort ();
9136   return NULL;
9137 }
9138
9139 bfd_boolean
9140 _bfd_elf_set_arch_mach (bfd *abfd,
9141                         enum bfd_architecture arch,
9142                         unsigned long machine)
9143 {
9144   /* If this isn't the right architecture for this backend, and this
9145      isn't the generic backend, fail.  */
9146   if (arch != get_elf_backend_data (abfd)->arch
9147       && arch != bfd_arch_unknown
9148       && get_elf_backend_data (abfd)->arch != bfd_arch_unknown)
9149     return FALSE;
9150
9151   return bfd_default_set_arch_mach (abfd, arch, machine);
9152 }
9153
9154 /* Find the nearest line to a particular section and offset,
9155    for error reporting.  */
9156
9157 bfd_boolean
9158 _bfd_elf_find_nearest_line (bfd *abfd,
9159                             asymbol **symbols,
9160                             asection *section,
9161                             bfd_vma offset,
9162                             const char **filename_ptr,
9163                             const char **functionname_ptr,
9164                             unsigned int *line_ptr,
9165                             unsigned int *discriminator_ptr)
9166 {
9167   bfd_boolean found;
9168
9169   if (_bfd_dwarf2_find_nearest_line (abfd, symbols, NULL, section, offset,
9170                                      filename_ptr, functionname_ptr,
9171                                      line_ptr, discriminator_ptr,
9172                                      dwarf_debug_sections,
9173                                      &elf_tdata (abfd)->dwarf2_find_line_info))
9174     return TRUE;
9175
9176   if (_bfd_dwarf1_find_nearest_line (abfd, symbols, section, offset,
9177                                      filename_ptr, functionname_ptr, line_ptr))
9178     {
9179       if (!*functionname_ptr)
9180         _bfd_elf_find_function (abfd, symbols, section, offset,
9181                                 *filename_ptr ? NULL : filename_ptr,
9182                                 functionname_ptr);
9183       return TRUE;
9184     }
9185
9186   if (! _bfd_stab_section_find_nearest_line (abfd, symbols, section, offset,
9187                                              &found, filename_ptr,
9188                                              functionname_ptr, line_ptr,
9189                                              &elf_tdata (abfd)->line_info))
9190     return FALSE;
9191   if (found && (*functionname_ptr || *line_ptr))
9192     return TRUE;
9193
9194   if (symbols == NULL)
9195     return FALSE;
9196
9197   if (! _bfd_elf_find_function (abfd, symbols, section, offset,
9198                                 filename_ptr, functionname_ptr))
9199     return FALSE;
9200
9201   *line_ptr = 0;
9202   return TRUE;
9203 }
9204
9205 /* Find the line for a symbol.  */
9206
9207 bfd_boolean
9208 _bfd_elf_find_line (bfd *abfd, asymbol **symbols, asymbol *symbol,
9209                     const char **filename_ptr, unsigned int *line_ptr)
9210 {
9211   return _bfd_dwarf2_find_nearest_line (abfd, symbols, symbol, NULL, 0,
9212                                         filename_ptr, NULL, line_ptr, NULL,
9213                                         dwarf_debug_sections,
9214                                         &elf_tdata (abfd)->dwarf2_find_line_info);
9215 }
9216
9217 /* After a call to bfd_find_nearest_line, successive calls to
9218    bfd_find_inliner_info can be used to get source information about
9219    each level of function inlining that terminated at the address
9220    passed to bfd_find_nearest_line.  Currently this is only supported
9221    for DWARF2 with appropriate DWARF3 extensions. */
9222
9223 bfd_boolean
9224 _bfd_elf_find_inliner_info (bfd *abfd,
9225                             const char **filename_ptr,
9226                             const char **functionname_ptr,
9227                             unsigned int *line_ptr)
9228 {
9229   bfd_boolean found;
9230   found = _bfd_dwarf2_find_inliner_info (abfd, filename_ptr,
9231                                          functionname_ptr, line_ptr,
9232                                          & elf_tdata (abfd)->dwarf2_find_line_info);
9233   return found;
9234 }
9235
9236 int
9237 _bfd_elf_sizeof_headers (bfd *abfd, struct bfd_link_info *info)
9238 {
9239   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
9240   int ret = bed->s->sizeof_ehdr;
9241
9242   if (!bfd_link_relocatable (info))
9243     {
9244       bfd_size_type phdr_size = elf_program_header_size (abfd);
9245
9246       if (phdr_size == (bfd_size_type) -1)
9247         {
9248           struct elf_segment_map *m;
9249
9250           phdr_size = 0;
9251           for (m = elf_seg_map (abfd); m != NULL; m = m->next)
9252             phdr_size += bed->s->sizeof_phdr;
9253
9254           if (phdr_size == 0)
9255             phdr_size = get_program_header_size (abfd, info);
9256         }
9257
9258       elf_program_header_size (abfd) = phdr_size;
9259       ret += phdr_size;
9260     }
9261
9262   return ret;
9263 }
9264
9265 bfd_boolean
9266 _bfd_elf_set_section_contents (bfd *abfd,
9267                                sec_ptr section,
9268                                const void *location,
9269                                file_ptr offset,
9270                                bfd_size_type count)
9271 {
9272   Elf_Internal_Shdr *hdr;
9273   file_ptr pos;
9274
9275   if (! abfd->output_has_begun
9276       && ! _bfd_elf_compute_section_file_positions (abfd, NULL))
9277     return FALSE;
9278
9279   if (!count)
9280     return TRUE;
9281
9282   hdr = &elf_section_data (section)->this_hdr;
9283   if (hdr->sh_offset == (file_ptr) -1)
9284     {
9285       unsigned char *contents;
9286
9287       if (bfd_section_is_ctf (section))
9288         /* Nothing to do with this section: the contents are generated
9289            later.  */
9290         return TRUE;
9291
9292       if ((section->flags & SEC_ELF_COMPRESS) == 0)
9293         {
9294           _bfd_error_handler
9295             (_("%pB:%pA: error: attempting to write into an unallocated compressed section"),
9296              abfd, section);
9297           bfd_set_error (bfd_error_invalid_operation);
9298           return FALSE;
9299         }
9300       
9301       if ((offset + count) > hdr->sh_size)
9302         {
9303           _bfd_error_handler
9304             (_("%pB:%pA: error: attempting to write over the end of the section"),
9305              abfd, section);
9306
9307           bfd_set_error (bfd_error_invalid_operation);
9308           return FALSE;
9309         }
9310
9311       contents = hdr->contents;
9312       if (contents == NULL)
9313         {
9314           _bfd_error_handler
9315             (_("%pB:%pA: error: attempting to write section into an empty buffer"),
9316              abfd, section);
9317
9318           bfd_set_error (bfd_error_invalid_operation);
9319           return FALSE;
9320         }
9321
9322       memcpy (contents + offset, location, count);
9323       return TRUE;
9324     }
9325
9326   pos = hdr->sh_offset + offset;
9327   if (bfd_seek (abfd, pos, SEEK_SET) != 0
9328       || bfd_bwrite (location, count, abfd) != count)
9329     return FALSE;
9330
9331   return TRUE;
9332 }
9333
9334 bfd_boolean
9335 _bfd_elf_no_info_to_howto (bfd *abfd ATTRIBUTE_UNUSED,
9336                            arelent *cache_ptr ATTRIBUTE_UNUSED,
9337                            Elf_Internal_Rela *dst ATTRIBUTE_UNUSED)
9338 {
9339   abort ();
9340   return FALSE;
9341 }
9342
9343 /* Try to convert a non-ELF reloc into an ELF one.  */
9344
9345 bfd_boolean
9346 _bfd_elf_validate_reloc (bfd *abfd, arelent *areloc)
9347 {
9348   /* Check whether we really have an ELF howto.  */
9349
9350   if ((*areloc->sym_ptr_ptr)->the_bfd->xvec != abfd->xvec)
9351     {
9352       bfd_reloc_code_real_type code;
9353       reloc_howto_type *howto;
9354
9355       /* Alien reloc: Try to determine its type to replace it with an
9356          equivalent ELF reloc.  */
9357
9358       if (areloc->howto->pc_relative)
9359         {
9360           switch (areloc->howto->bitsize)
9361             {
9362             case 8:
9363               code = BFD_RELOC_8_PCREL;
9364               break;
9365             case 12:
9366               code = BFD_RELOC_12_PCREL;
9367               break;
9368             case 16:
9369               code = BFD_RELOC_16_PCREL;
9370               break;
9371             case 24:
9372               code = BFD_RELOC_24_PCREL;
9373               break;
9374             case 32:
9375               code = BFD_RELOC_32_PCREL;
9376               break;
9377             case 64:
9378               code = BFD_RELOC_64_PCREL;
9379               break;
9380             default:
9381               goto fail;
9382             }
9383
9384           howto = bfd_reloc_type_lookup (abfd, code);
9385
9386           if (howto && areloc->howto->pcrel_offset != howto->pcrel_offset)
9387             {
9388               if (howto->pcrel_offset)
9389                 areloc->addend += areloc->address;
9390               else
9391                 areloc->addend -= areloc->address; /* addend is unsigned!! */
9392             }
9393         }
9394       else
9395         {
9396           switch (areloc->howto->bitsize)
9397             {
9398             case 8:
9399               code = BFD_RELOC_8;
9400               break;
9401             case 14:
9402               code = BFD_RELOC_14;
9403               break;
9404             case 16:
9405               code = BFD_RELOC_16;
9406               break;
9407             case 26:
9408               code = BFD_RELOC_26;
9409               break;
9410             case 32:
9411               code = BFD_RELOC_32;
9412               break;
9413             case 64:
9414               code = BFD_RELOC_64;
9415               break;
9416             default:
9417               goto fail;
9418             }
9419
9420           howto = bfd_reloc_type_lookup (abfd, code);
9421         }
9422
9423       if (howto)
9424         areloc->howto = howto;
9425       else
9426         goto fail;
9427     }
9428
9429   return TRUE;
9430
9431  fail:
9432   /* xgettext:c-format */
9433   _bfd_error_handler (_("%pB: %s unsupported"),
9434                       abfd, areloc->howto->name);
9435   bfd_set_error (bfd_error_sorry);
9436   return FALSE;
9437 }
9438
9439 bfd_boolean
9440 _bfd_elf_close_and_cleanup (bfd *abfd)
9441 {
9442   struct elf_obj_tdata *tdata = elf_tdata (abfd);
9443   if (tdata != NULL
9444       && (bfd_get_format (abfd) == bfd_object
9445           || bfd_get_format (abfd) == bfd_core))
9446     {
9447       if (elf_tdata (abfd)->o != NULL && elf_shstrtab (abfd) != NULL)
9448         _bfd_elf_strtab_free (elf_shstrtab (abfd));
9449       _bfd_dwarf2_cleanup_debug_info (abfd, &tdata->dwarf2_find_line_info);
9450     }
9451
9452   return _bfd_generic_close_and_cleanup (abfd);
9453 }
9454
9455 /* For Rel targets, we encode meaningful data for BFD_RELOC_VTABLE_ENTRY
9456    in the relocation's offset.  Thus we cannot allow any sort of sanity
9457    range-checking to interfere.  There is nothing else to do in processing
9458    this reloc.  */
9459
9460 bfd_reloc_status_type
9461 _bfd_elf_rel_vtable_reloc_fn
9462   (bfd *abfd ATTRIBUTE_UNUSED, arelent *re ATTRIBUTE_UNUSED,
9463    struct bfd_symbol *symbol ATTRIBUTE_UNUSED,
9464    void *data ATTRIBUTE_UNUSED, asection *is ATTRIBUTE_UNUSED,
9465    bfd *obfd ATTRIBUTE_UNUSED, char **errmsg ATTRIBUTE_UNUSED)
9466 {
9467   return bfd_reloc_ok;
9468 }
9469 \f
9470 /* Elf core file support.  Much of this only works on native
9471    toolchains, since we rely on knowing the
9472    machine-dependent procfs structure in order to pick
9473    out details about the corefile.  */
9474
9475 #ifdef HAVE_SYS_PROCFS_H
9476 # include <sys/procfs.h>
9477 #endif
9478
9479 /* Return a PID that identifies a "thread" for threaded cores, or the
9480    PID of the main process for non-threaded cores.  */
9481
9482 static int
9483 elfcore_make_pid (bfd *abfd)
9484 {
9485   int pid;
9486
9487   pid = elf_tdata (abfd)->core->lwpid;
9488   if (pid == 0)
9489     pid = elf_tdata (abfd)->core->pid;
9490
9491   return pid;
9492 }
9493
9494 /* If there isn't a section called NAME, make one, using
9495    data from SECT.  Note, this function will generate a
9496    reference to NAME, so you shouldn't deallocate or
9497    overwrite it.  */
9498
9499 static bfd_boolean
9500 elfcore_maybe_make_sect (bfd *abfd, char *name, asection *sect)
9501 {
9502   asection *sect2;
9503
9504   if (bfd_get_section_by_name (abfd, name) != NULL)
9505     return TRUE;
9506
9507   sect2 = bfd_make_section_with_flags (abfd, name, sect->flags);
9508   if (sect2 == NULL)
9509     return FALSE;
9510
9511   sect2->size = sect->size;
9512   sect2->filepos = sect->filepos;
9513   sect2->alignment_power = sect->alignment_power;
9514   return TRUE;
9515 }
9516
9517 /* Create a pseudosection containing SIZE bytes at FILEPOS.  This
9518    actually creates up to two pseudosections:
9519    - For the single-threaded case, a section named NAME, unless
9520      such a section already exists.
9521    - For the multi-threaded case, a section named "NAME/PID", where
9522      PID is elfcore_make_pid (abfd).
9523    Both pseudosections have identical contents.  */
9524 bfd_boolean
9525 _bfd_elfcore_make_pseudosection (bfd *abfd,
9526                                  char *name,
9527                                  size_t size,
9528                                  ufile_ptr filepos)
9529 {
9530   char buf[100];
9531   char *threaded_name;
9532   size_t len;
9533   asection *sect;
9534
9535   /* Build the section name.  */
9536
9537   sprintf (buf, "%s/%d", name, elfcore_make_pid (abfd));
9538   len = strlen (buf) + 1;
9539   threaded_name = (char *) bfd_alloc (abfd, len);
9540   if (threaded_name == NULL)
9541     return FALSE;
9542   memcpy (threaded_name, buf, len);
9543
9544   sect = bfd_make_section_anyway_with_flags (abfd, threaded_name,
9545                                              SEC_HAS_CONTENTS);
9546   if (sect == NULL)
9547     return FALSE;
9548   sect->size = size;
9549   sect->filepos = filepos;
9550   sect->alignment_power = 2;
9551
9552   return elfcore_maybe_make_sect (abfd, name, sect);
9553 }
9554
9555 static bfd_boolean
9556 elfcore_make_auxv_note_section (bfd *abfd, Elf_Internal_Note *note,
9557                                 size_t offs)
9558 {
9559   asection *sect = bfd_make_section_anyway_with_flags (abfd, ".auxv",
9560                                                        SEC_HAS_CONTENTS);
9561
9562   if (sect == NULL)
9563     return FALSE;
9564
9565   sect->size = note->descsz - offs;
9566   sect->filepos = note->descpos + offs;
9567   sect->alignment_power = 1 + bfd_get_arch_size (abfd) / 32;
9568
9569   return TRUE;
9570 }
9571
9572 /* prstatus_t exists on:
9573      solaris 2.5+
9574      linux 2.[01] + glibc
9575      unixware 4.2
9576 */
9577
9578 #if defined (HAVE_PRSTATUS_T)
9579
9580 static bfd_boolean
9581 elfcore_grok_prstatus (bfd *abfd, Elf_Internal_Note *note)
9582 {
9583   size_t size;
9584   int offset;
9585
9586   if (note->descsz == sizeof (prstatus_t))
9587     {
9588       prstatus_t prstat;
9589
9590       size = sizeof (prstat.pr_reg);
9591       offset   = offsetof (prstatus_t, pr_reg);
9592       memcpy (&prstat, note->descdata, sizeof (prstat));
9593
9594       /* Do not overwrite the core signal if it
9595          has already been set by another thread.  */
9596       if (elf_tdata (abfd)->core->signal == 0)
9597         elf_tdata (abfd)->core->signal = prstat.pr_cursig;
9598       if (elf_tdata (abfd)->core->pid == 0)
9599         elf_tdata (abfd)->core->pid = prstat.pr_pid;
9600
9601       /* pr_who exists on:
9602          solaris 2.5+
9603          unixware 4.2
9604          pr_who doesn't exist on:
9605          linux 2.[01]
9606          */
9607 #if defined (HAVE_PRSTATUS_T_PR_WHO)
9608       elf_tdata (abfd)->core->lwpid = prstat.pr_who;
9609 #else
9610       elf_tdata (abfd)->core->lwpid = prstat.pr_pid;
9611 #endif
9612     }
9613 #if defined (HAVE_PRSTATUS32_T)
9614   else if (note->descsz == sizeof (prstatus32_t))
9615     {
9616       /* 64-bit host, 32-bit corefile */
9617       prstatus32_t prstat;
9618
9619       size = sizeof (prstat.pr_reg);
9620       offset   = offsetof (prstatus32_t, pr_reg);
9621       memcpy (&prstat, note->descdata, sizeof (prstat));
9622
9623       /* Do not overwrite the core signal if it
9624          has already been set by another thread.  */
9625       if (elf_tdata (abfd)->core->signal == 0)
9626         elf_tdata (abfd)->core->signal = prstat.pr_cursig;
9627       if (elf_tdata (abfd)->core->pid == 0)
9628         elf_tdata (abfd)->core->pid = prstat.pr_pid;
9629
9630       /* pr_who exists on:
9631          solaris 2.5+
9632          unixware 4.2
9633          pr_who doesn't exist on:
9634          linux 2.[01]
9635          */
9636 #if defined (HAVE_PRSTATUS32_T_PR_WHO)
9637       elf_tdata (abfd)->core->lwpid = prstat.pr_who;
9638 #else
9639       elf_tdata (abfd)->core->lwpid = prstat.pr_pid;
9640 #endif
9641     }
9642 #endif /* HAVE_PRSTATUS32_T */
9643   else
9644     {
9645       /* Fail - we don't know how to handle any other
9646          note size (ie. data object type).  */
9647       return TRUE;
9648     }
9649
9650   /* Make a ".reg/999" section and a ".reg" section.  */
9651   return _bfd_elfcore_make_pseudosection (abfd, ".reg",
9652                                           size, note->descpos + offset);
9653 }
9654 #endif /* defined (HAVE_PRSTATUS_T) */
9655
9656 /* Create a pseudosection containing the exact contents of NOTE.  */
9657 static bfd_boolean
9658 elfcore_make_note_pseudosection (bfd *abfd,
9659                                  char *name,
9660                                  Elf_Internal_Note *note)
9661 {
9662   return _bfd_elfcore_make_pseudosection (abfd, name,
9663                                           note->descsz, note->descpos);
9664 }
9665
9666 /* There isn't a consistent prfpregset_t across platforms,
9667    but it doesn't matter, because we don't have to pick this
9668    data structure apart.  */
9669
9670 static bfd_boolean
9671 elfcore_grok_prfpreg (bfd *abfd, Elf_Internal_Note *note)
9672 {
9673   return elfcore_make_note_pseudosection (abfd, ".reg2", note);
9674 }
9675
9676 /* Linux dumps the Intel SSE regs in a note named "LINUX" with a note
9677    type of NT_PRXFPREG.  Just include the whole note's contents
9678    literally.  */
9679
9680 static bfd_boolean
9681 elfcore_grok_prxfpreg (bfd *abfd, Elf_Internal_Note *note)
9682 {
9683   return elfcore_make_note_pseudosection (abfd, ".reg-xfp", note);
9684 }
9685
9686 /* Linux dumps the Intel XSAVE extended state in a note named "LINUX"
9687    with a note type of NT_X86_XSTATE.  Just include the whole note's
9688    contents literally.  */
9689
9690 static bfd_boolean
9691 elfcore_grok_xstatereg (bfd *abfd, Elf_Internal_Note *note)
9692 {
9693   return elfcore_make_note_pseudosection (abfd, ".reg-xstate", note);
9694 }
9695
9696 static bfd_boolean
9697 elfcore_grok_ppc_vmx (bfd *abfd, Elf_Internal_Note *note)
9698 {
9699   return elfcore_make_note_pseudosection (abfd, ".reg-ppc-vmx", note);
9700 }
9701
9702 static bfd_boolean
9703 elfcore_grok_ppc_vsx (bfd *abfd, Elf_Internal_Note *note)
9704 {
9705   return elfcore_make_note_pseudosection (abfd, ".reg-ppc-vsx", note);
9706 }
9707
9708 static bfd_boolean
9709 elfcore_grok_ppc_tar (bfd *abfd, Elf_Internal_Note *note)
9710 {
9711   return elfcore_make_note_pseudosection (abfd, ".reg-ppc-tar", note);
9712 }
9713
9714 static bfd_boolean
9715 elfcore_grok_ppc_ppr (bfd *abfd, Elf_Internal_Note *note)
9716 {
9717   return elfcore_make_note_pseudosection (abfd, ".reg-ppc-ppr", note);
9718 }
9719
9720 static bfd_boolean
9721 elfcore_grok_ppc_dscr (bfd *abfd, Elf_Internal_Note *note)
9722 {
9723   return elfcore_make_note_pseudosection (abfd, ".reg-ppc-dscr", note);
9724 }
9725
9726 static bfd_boolean
9727 elfcore_grok_ppc_ebb (bfd *abfd, Elf_Internal_Note *note)
9728 {
9729   return elfcore_make_note_pseudosection (abfd, ".reg-ppc-ebb", note);
9730 }
9731
9732 static bfd_boolean
9733 elfcore_grok_ppc_pmu (bfd *abfd, Elf_Internal_Note *note)
9734 {
9735   return elfcore_make_note_pseudosection (abfd, ".reg-ppc-pmu", note);
9736 }
9737
9738 static bfd_boolean
9739 elfcore_grok_ppc_tm_cgpr (bfd *abfd, Elf_Internal_Note *note)
9740 {
9741   return elfcore_make_note_pseudosection (abfd, ".reg-ppc-tm-cgpr", note);
9742 }
9743
9744 static bfd_boolean
9745 elfcore_grok_ppc_tm_cfpr (bfd *abfd, Elf_Internal_Note *note)
9746 {
9747   return elfcore_make_note_pseudosection (abfd, ".reg-ppc-tm-cfpr", note);
9748 }
9749
9750 static bfd_boolean
9751 elfcore_grok_ppc_tm_cvmx (bfd *abfd, Elf_Internal_Note *note)
9752 {
9753   return elfcore_make_note_pseudosection (abfd, ".reg-ppc-tm-cvmx", note);
9754 }
9755
9756 static bfd_boolean
9757 elfcore_grok_ppc_tm_cvsx (bfd *abfd, Elf_Internal_Note *note)
9758 {
9759   return elfcore_make_note_pseudosection (abfd, ".reg-ppc-tm-cvsx", note);
9760 }
9761
9762 static bfd_boolean
9763 elfcore_grok_ppc_tm_spr (bfd *abfd, Elf_Internal_Note *note)
9764 {
9765   return elfcore_make_note_pseudosection (abfd, ".reg-ppc-tm-spr", note);
9766 }
9767
9768 static bfd_boolean
9769 elfcore_grok_ppc_tm_ctar (bfd *abfd, Elf_Internal_Note *note)
9770 {
9771   return elfcore_make_note_pseudosection (abfd, ".reg-ppc-tm-ctar", note);
9772 }
9773
9774 static bfd_boolean
9775 elfcore_grok_ppc_tm_cppr (bfd *abfd, Elf_Internal_Note *note)
9776 {
9777   return elfcore_make_note_pseudosection (abfd, ".reg-ppc-tm-cppr", note);
9778 }
9779
9780 static bfd_boolean
9781 elfcore_grok_ppc_tm_cdscr (bfd *abfd, Elf_Internal_Note *note)
9782 {
9783   return elfcore_make_note_pseudosection (abfd, ".reg-ppc-tm-cdscr", note);
9784 }
9785
9786 static bfd_boolean
9787 elfcore_grok_s390_high_gprs (bfd *abfd, Elf_Internal_Note *note)
9788 {
9789   return elfcore_make_note_pseudosection (abfd, ".reg-s390-high-gprs", note);
9790 }
9791
9792 static bfd_boolean
9793 elfcore_grok_s390_timer (bfd *abfd, Elf_Internal_Note *note)
9794 {
9795   return elfcore_make_note_pseudosection (abfd, ".reg-s390-timer", note);
9796 }
9797
9798 static bfd_boolean
9799 elfcore_grok_s390_todcmp (bfd *abfd, Elf_Internal_Note *note)
9800 {
9801   return elfcore_make_note_pseudosection (abfd, ".reg-s390-todcmp", note);
9802 }
9803
9804 static bfd_boolean
9805 elfcore_grok_s390_todpreg (bfd *abfd, Elf_Internal_Note *note)
9806 {
9807   return elfcore_make_note_pseudosection (abfd, ".reg-s390-todpreg", note);
9808 }
9809
9810 static bfd_boolean
9811 elfcore_grok_s390_ctrs (bfd *abfd, Elf_Internal_Note *note)
9812 {
9813   return elfcore_make_note_pseudosection (abfd, ".reg-s390-ctrs", note);
9814 }
9815
9816 static bfd_boolean
9817 elfcore_grok_s390_prefix (bfd *abfd, Elf_Internal_Note *note)
9818 {
9819   return elfcore_make_note_pseudosection (abfd, ".reg-s390-prefix", note);
9820 }
9821
9822 static bfd_boolean
9823 elfcore_grok_s390_last_break (bfd *abfd, Elf_Internal_Note *note)
9824 {
9825   return elfcore_make_note_pseudosection (abfd, ".reg-s390-last-break", note);
9826 }
9827
9828 static bfd_boolean
9829 elfcore_grok_s390_system_call (bfd *abfd, Elf_Internal_Note *note)
9830 {
9831   return elfcore_make_note_pseudosection (abfd, ".reg-s390-system-call", note);
9832 }
9833
9834 static bfd_boolean
9835 elfcore_grok_s390_tdb (bfd *abfd, Elf_Internal_Note *note)
9836 {
9837   return elfcore_make_note_pseudosection (abfd, ".reg-s390-tdb", note);
9838 }
9839
9840 static bfd_boolean
9841 elfcore_grok_s390_vxrs_low (bfd *abfd, Elf_Internal_Note *note)
9842 {
9843   return elfcore_make_note_pseudosection (abfd, ".reg-s390-vxrs-low", note);
9844 }
9845
9846 static bfd_boolean
9847 elfcore_grok_s390_vxrs_high (bfd *abfd, Elf_Internal_Note *note)
9848 {
9849   return elfcore_make_note_pseudosection (abfd, ".reg-s390-vxrs-high", note);
9850 }
9851
9852 static bfd_boolean
9853 elfcore_grok_s390_gs_cb (bfd *abfd, Elf_Internal_Note *note)
9854 {
9855   return elfcore_make_note_pseudosection (abfd, ".reg-s390-gs-cb", note);
9856 }
9857
9858 static bfd_boolean
9859 elfcore_grok_s390_gs_bc (bfd *abfd, Elf_Internal_Note *note)
9860 {
9861   return elfcore_make_note_pseudosection (abfd, ".reg-s390-gs-bc", note);
9862 }
9863
9864 static bfd_boolean
9865 elfcore_grok_arm_vfp (bfd *abfd, Elf_Internal_Note *note)
9866 {
9867   return elfcore_make_note_pseudosection (abfd, ".reg-arm-vfp", note);
9868 }
9869
9870 static bfd_boolean
9871 elfcore_grok_aarch_tls (bfd *abfd, Elf_Internal_Note *note)
9872 {
9873   return elfcore_make_note_pseudosection (abfd, ".reg-aarch-tls", note);
9874 }
9875
9876 static bfd_boolean
9877 elfcore_grok_aarch_hw_break (bfd *abfd, Elf_Internal_Note *note)
9878 {
9879   return elfcore_make_note_pseudosection (abfd, ".reg-aarch-hw-break", note);
9880 }
9881
9882 static bfd_boolean
9883 elfcore_grok_aarch_hw_watch (bfd *abfd, Elf_Internal_Note *note)
9884 {
9885   return elfcore_make_note_pseudosection (abfd, ".reg-aarch-hw-watch", note);
9886 }
9887
9888 static bfd_boolean
9889 elfcore_grok_aarch_sve (bfd *abfd, Elf_Internal_Note *note)
9890 {
9891   return elfcore_make_note_pseudosection (abfd, ".reg-aarch-sve", note);
9892 }
9893
9894 static bfd_boolean
9895 elfcore_grok_aarch_pauth (bfd *abfd, Elf_Internal_Note *note)
9896 {
9897   return elfcore_make_note_pseudosection (abfd, ".reg-aarch-pauth", note);
9898 }
9899
9900 static bfd_boolean
9901 elfcore_grok_arc_v2 (bfd *abfd, Elf_Internal_Note *note)
9902 {
9903   return elfcore_make_note_pseudosection (abfd, ".reg-arc-v2", note);
9904 }
9905
9906 #if defined (HAVE_PRPSINFO_T)
9907 typedef prpsinfo_t   elfcore_psinfo_t;
9908 #if defined (HAVE_PRPSINFO32_T)         /* Sparc64 cross Sparc32 */
9909 typedef prpsinfo32_t elfcore_psinfo32_t;
9910 #endif
9911 #endif
9912
9913 #if defined (HAVE_PSINFO_T)
9914 typedef psinfo_t   elfcore_psinfo_t;
9915 #if defined (HAVE_PSINFO32_T)           /* Sparc64 cross Sparc32 */
9916 typedef psinfo32_t elfcore_psinfo32_t;
9917 #endif
9918 #endif
9919
9920 /* return a malloc'ed copy of a string at START which is at
9921    most MAX bytes long, possibly without a terminating '\0'.
9922    the copy will always have a terminating '\0'.  */
9923
9924 char *
9925 _bfd_elfcore_strndup (bfd *abfd, char *start, size_t max)
9926 {
9927   char *dups;
9928   char *end = (char *) memchr (start, '\0', max);
9929   size_t len;
9930
9931   if (end == NULL)
9932     len = max;
9933   else
9934     len = end - start;
9935
9936   dups = (char *) bfd_alloc (abfd, len + 1);
9937   if (dups == NULL)
9938     return NULL;
9939
9940   memcpy (dups, start, len);
9941   dups[len] = '\0';
9942
9943   return dups;
9944 }
9945
9946 #if defined (HAVE_PRPSINFO_T) || defined (HAVE_PSINFO_T)
9947 static bfd_boolean
9948 elfcore_grok_psinfo (bfd *abfd, Elf_Internal_Note *note)
9949 {
9950   if (note->descsz == sizeof (elfcore_psinfo_t))
9951     {
9952       elfcore_psinfo_t psinfo;
9953
9954       memcpy (&psinfo, note->descdata, sizeof (psinfo));
9955
9956 #if defined (HAVE_PSINFO_T_PR_PID) || defined (HAVE_PRPSINFO_T_PR_PID)
9957       elf_tdata (abfd)->core->pid = psinfo.pr_pid;
9958 #endif
9959       elf_tdata (abfd)->core->program
9960         = _bfd_elfcore_strndup (abfd, psinfo.pr_fname,
9961                                 sizeof (psinfo.pr_fname));
9962
9963       elf_tdata (abfd)->core->command
9964         = _bfd_elfcore_strndup (abfd, psinfo.pr_psargs,
9965                                 sizeof (psinfo.pr_psargs));
9966     }
9967 #if defined (HAVE_PRPSINFO32_T) || defined (HAVE_PSINFO32_T)
9968   else if (note->descsz == sizeof (elfcore_psinfo32_t))
9969     {
9970       /* 64-bit host, 32-bit corefile */
9971       elfcore_psinfo32_t psinfo;
9972
9973       memcpy (&psinfo, note->descdata, sizeof (psinfo));
9974
9975 #if defined (HAVE_PSINFO32_T_PR_PID) || defined (HAVE_PRPSINFO32_T_PR_PID)
9976       elf_tdata (abfd)->core->pid = psinfo.pr_pid;
9977 #endif
9978       elf_tdata (abfd)->core->program
9979         = _bfd_elfcore_strndup (abfd, psinfo.pr_fname,
9980                                 sizeof (psinfo.pr_fname));
9981
9982       elf_tdata (abfd)->core->command
9983         = _bfd_elfcore_strndup (abfd, psinfo.pr_psargs,
9984                                 sizeof (psinfo.pr_psargs));
9985     }
9986 #endif
9987
9988   else
9989     {
9990       /* Fail - we don't know how to handle any other
9991          note size (ie. data object type).  */
9992       return TRUE;
9993     }
9994
9995   /* Note that for some reason, a spurious space is tacked
9996      onto the end of the args in some (at least one anyway)
9997      implementations, so strip it off if it exists.  */
9998
9999   {
10000     char *command = elf_tdata (abfd)->core->command;
10001     int n = strlen (command);
10002
10003     if (0 < n && command[n - 1] == ' ')
10004       command[n - 1] = '\0';
10005   }
10006
10007   return TRUE;
10008 }
10009 #endif /* defined (HAVE_PRPSINFO_T) || defined (HAVE_PSINFO_T) */
10010
10011 #if defined (HAVE_PSTATUS_T)
10012 static bfd_boolean
10013 elfcore_grok_pstatus (bfd *abfd, Elf_Internal_Note *note)
10014 {
10015   if (note->descsz == sizeof (pstatus_t)
10016 #if defined (HAVE_PXSTATUS_T)
10017       || note->descsz == sizeof (pxstatus_t)
10018 #endif
10019       )
10020     {
10021       pstatus_t pstat;
10022
10023       memcpy (&pstat, note->descdata, sizeof (pstat));
10024
10025       elf_tdata (abfd)->core->pid = pstat.pr_pid;
10026     }
10027 #if defined (HAVE_PSTATUS32_T)
10028   else if (note->descsz == sizeof (pstatus32_t))
10029     {
10030       /* 64-bit host, 32-bit corefile */
10031       pstatus32_t pstat;
10032
10033       memcpy (&pstat, note->descdata, sizeof (pstat));
10034
10035       elf_tdata (abfd)->core->pid = pstat.pr_pid;
10036     }
10037 #endif
10038   /* Could grab some more details from the "representative"
10039      lwpstatus_t in pstat.pr_lwp, but we'll catch it all in an
10040      NT_LWPSTATUS note, presumably.  */
10041
10042   return TRUE;
10043 }
10044 #endif /* defined (HAVE_PSTATUS_T) */
10045
10046 #if defined (HAVE_LWPSTATUS_T)
10047 static bfd_boolean
10048 elfcore_grok_lwpstatus (bfd *abfd, Elf_Internal_Note *note)
10049 {
10050   lwpstatus_t lwpstat;
10051   char buf[100];
10052   char *name;
10053   size_t len;
10054   asection *sect;
10055
10056   if (note->descsz != sizeof (lwpstat)
10057 #if defined (HAVE_LWPXSTATUS_T)
10058       && note->descsz != sizeof (lwpxstatus_t)
10059 #endif
10060       )
10061     return TRUE;
10062
10063   memcpy (&lwpstat, note->descdata, sizeof (lwpstat));
10064
10065   elf_tdata (abfd)->core->lwpid = lwpstat.pr_lwpid;
10066   /* Do not overwrite the core signal if it has already been set by
10067      another thread.  */
10068   if (elf_tdata (abfd)->core->signal == 0)
10069     elf_tdata (abfd)->core->signal = lwpstat.pr_cursig;
10070
10071   /* Make a ".reg/999" section.  */
10072
10073   sprintf (buf, ".reg/%d", elfcore_make_pid (abfd));
10074   len = strlen (buf) + 1;
10075   name = bfd_alloc (abfd, len);
10076   if (name == NULL)
10077     return FALSE;
10078   memcpy (name, buf, len);
10079
10080   sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS);
10081   if (sect == NULL)
10082     return FALSE;
10083
10084 #if defined (HAVE_LWPSTATUS_T_PR_CONTEXT)
10085   sect->size = sizeof (lwpstat.pr_context.uc_mcontext.gregs);
10086   sect->filepos = note->descpos
10087     + offsetof (lwpstatus_t, pr_context.uc_mcontext.gregs);
10088 #endif
10089
10090 #if defined (HAVE_LWPSTATUS_T_PR_REG)
10091   sect->size = sizeof (lwpstat.pr_reg);
10092   sect->filepos = note->descpos + offsetof (lwpstatus_t, pr_reg);
10093 #endif
10094
10095   sect->alignment_power = 2;
10096
10097   if (!elfcore_maybe_make_sect (abfd, ".reg", sect))
10098     return FALSE;
10099
10100   /* Make a ".reg2/999" section */
10101
10102   sprintf (buf, ".reg2/%d", elfcore_make_pid (abfd));
10103   len = strlen (buf) + 1;
10104   name = bfd_alloc (abfd, len);
10105   if (name == NULL)
10106     return FALSE;
10107   memcpy (name, buf, len);
10108
10109   sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS);
10110   if (sect == NULL)
10111     return FALSE;
10112
10113 #if defined (HAVE_LWPSTATUS_T_PR_CONTEXT)
10114   sect->size = sizeof (lwpstat.pr_context.uc_mcontext.fpregs);
10115   sect->filepos = note->descpos
10116     + offsetof (lwpstatus_t, pr_context.uc_mcontext.fpregs);
10117 #endif
10118
10119 #if defined (HAVE_LWPSTATUS_T_PR_FPREG)
10120   sect->size = sizeof (lwpstat.pr_fpreg);
10121   sect->filepos = note->descpos + offsetof (lwpstatus_t, pr_fpreg);
10122 #endif
10123
10124   sect->alignment_power = 2;
10125
10126   return elfcore_maybe_make_sect (abfd, ".reg2", sect);
10127 }
10128 #endif /* defined (HAVE_LWPSTATUS_T) */
10129
10130 /* These constants, and the structure offsets used below, are defined by
10131    Cygwin's core_dump.h */
10132 #define NOTE_INFO_PROCESS  1
10133 #define NOTE_INFO_THREAD   2
10134 #define NOTE_INFO_MODULE   3
10135 #define NOTE_INFO_MODULE64 4
10136
10137 static bfd_boolean
10138 elfcore_grok_win32pstatus (bfd *abfd, Elf_Internal_Note *note)
10139 {
10140   char buf[30];
10141   char *name;
10142   size_t len;
10143   unsigned int name_size;
10144   asection *sect;
10145   unsigned int type;
10146   int is_active_thread;
10147   bfd_vma base_addr;
10148
10149   if (note->descsz < 4)
10150     return TRUE;
10151
10152   if (! CONST_STRNEQ (note->namedata, "win32"))
10153     return TRUE;
10154
10155   type = bfd_get_32 (abfd, note->descdata);
10156
10157   struct {
10158     const char *type_name;
10159     unsigned long min_size;
10160   } size_check[] =
10161       {
10162        { "NOTE_INFO_PROCESS", 12 },
10163        { "NOTE_INFO_THREAD", 12 },
10164        { "NOTE_INFO_MODULE", 12 },
10165        { "NOTE_INFO_MODULE64", 16 },
10166       };
10167
10168   if (type > (sizeof(size_check)/sizeof(size_check[0])))
10169       return TRUE;
10170
10171   if (note->descsz < size_check[type - 1].min_size)
10172     {
10173       _bfd_error_handler (_("%pB: warning: win32pstatus %s of size %lu bytes is too small"),
10174                           abfd, size_check[type - 1].type_name, note->descsz);
10175       return TRUE;
10176     }
10177
10178   switch (type)
10179     {
10180     case NOTE_INFO_PROCESS:
10181       /* FIXME: need to add ->core->command.  */
10182       elf_tdata (abfd)->core->pid = bfd_get_32 (abfd, note->descdata + 4);
10183       elf_tdata (abfd)->core->signal = bfd_get_32 (abfd, note->descdata + 8);
10184       break;
10185
10186     case NOTE_INFO_THREAD:
10187       /* Make a ".reg/<tid>" section containing the Win32 API thread CONTEXT
10188          structure. */
10189       /* thread_info.tid */
10190       sprintf (buf, ".reg/%ld", (long) bfd_get_32 (abfd, note->descdata + 4));
10191
10192       len = strlen (buf) + 1;
10193       name = (char *) bfd_alloc (abfd, len);
10194       if (name == NULL)
10195         return FALSE;
10196
10197       memcpy (name, buf, len);
10198
10199       sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS);
10200       if (sect == NULL)
10201         return FALSE;
10202
10203       /* sizeof (thread_info.thread_context) */
10204       sect->size = note->descsz - 12;
10205       /* offsetof (thread_info.thread_context) */
10206       sect->filepos = note->descpos + 12;
10207       sect->alignment_power = 2;
10208
10209       /* thread_info.is_active_thread */
10210       is_active_thread = bfd_get_32 (abfd, note->descdata + 8);
10211
10212       if (is_active_thread)
10213         if (! elfcore_maybe_make_sect (abfd, ".reg", sect))
10214           return FALSE;
10215       break;
10216
10217     case NOTE_INFO_MODULE:
10218     case NOTE_INFO_MODULE64:
10219       /* Make a ".module/xxxxxxxx" section.  */
10220       if (type == NOTE_INFO_MODULE)
10221         {
10222           /* module_info.base_address */
10223           base_addr = bfd_get_32 (abfd, note->descdata + 4);
10224           sprintf (buf, ".module/%08lx", (unsigned long) base_addr);
10225           /* module_info.module_name_size */
10226           name_size = bfd_get_32 (abfd, note->descdata + 8);
10227         }
10228       else /* NOTE_INFO_MODULE64 */
10229         {
10230           /* module_info.base_address */
10231           base_addr = bfd_get_64 (abfd, note->descdata + 4);
10232           sprintf (buf, ".module/%016lx", (unsigned long) base_addr);
10233           /* module_info.module_name_size */
10234           name_size = bfd_get_32 (abfd, note->descdata + 12);
10235         }
10236
10237       len = strlen (buf) + 1;
10238       name = (char *) bfd_alloc (abfd, len);
10239       if (name == NULL)
10240         return FALSE;
10241
10242       memcpy (name, buf, len);
10243
10244       sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS);
10245
10246       if (sect == NULL)
10247         return FALSE;
10248
10249       if (note->descsz < 12 + name_size)
10250         {
10251           _bfd_error_handler (_("%pB: win32pstatus NOTE_INFO_MODULE of size %lu is too small to contain a name of size %u"),
10252                               abfd, note->descsz, name_size);
10253           return TRUE;
10254         }
10255
10256       sect->size = note->descsz;
10257       sect->filepos = note->descpos;
10258       sect->alignment_power = 2;
10259       break;
10260
10261     default:
10262       return TRUE;
10263     }
10264
10265   return TRUE;
10266 }
10267
10268 static bfd_boolean
10269 elfcore_grok_note (bfd *abfd, Elf_Internal_Note *note)
10270 {
10271   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
10272
10273   switch (note->type)
10274     {
10275     default:
10276       return TRUE;
10277
10278     case NT_PRSTATUS:
10279       if (bed->elf_backend_grok_prstatus)
10280         if ((*bed->elf_backend_grok_prstatus) (abfd, note))
10281           return TRUE;
10282 #if defined (HAVE_PRSTATUS_T)
10283       return elfcore_grok_prstatus (abfd, note);
10284 #else
10285       return TRUE;
10286 #endif
10287
10288 #if defined (HAVE_PSTATUS_T)
10289     case NT_PSTATUS:
10290       return elfcore_grok_pstatus (abfd, note);
10291 #endif
10292
10293 #if defined (HAVE_LWPSTATUS_T)
10294     case NT_LWPSTATUS:
10295       return elfcore_grok_lwpstatus (abfd, note);
10296 #endif
10297
10298     case NT_FPREGSET:           /* FIXME: rename to NT_PRFPREG */
10299       return elfcore_grok_prfpreg (abfd, note);
10300
10301     case NT_WIN32PSTATUS:
10302       return elfcore_grok_win32pstatus (abfd, note);
10303
10304     case NT_PRXFPREG:           /* Linux SSE extension */
10305       if (note->namesz == 6
10306           && strcmp (note->namedata, "LINUX") == 0)
10307         return elfcore_grok_prxfpreg (abfd, note);
10308       else
10309         return TRUE;
10310
10311     case NT_X86_XSTATE:         /* Linux XSAVE extension */
10312       if (note->namesz == 6
10313           && strcmp (note->namedata, "LINUX") == 0)
10314         return elfcore_grok_xstatereg (abfd, note);
10315       else
10316         return TRUE;
10317
10318     case NT_PPC_VMX:
10319       if (note->namesz == 6
10320           && strcmp (note->namedata, "LINUX") == 0)
10321         return elfcore_grok_ppc_vmx (abfd, note);
10322       else
10323         return TRUE;
10324
10325     case NT_PPC_VSX:
10326       if (note->namesz == 6
10327           && strcmp (note->namedata, "LINUX") == 0)
10328         return elfcore_grok_ppc_vsx (abfd, note);
10329       else
10330         return TRUE;
10331
10332     case NT_PPC_TAR:
10333       if (note->namesz == 6
10334           && strcmp (note->namedata, "LINUX") == 0)
10335         return elfcore_grok_ppc_tar (abfd, note);
10336       else
10337         return TRUE;
10338
10339     case NT_PPC_PPR:
10340       if (note->namesz == 6
10341           && strcmp (note->namedata, "LINUX") == 0)
10342         return elfcore_grok_ppc_ppr (abfd, note);
10343       else
10344         return TRUE;
10345
10346     case NT_PPC_DSCR:
10347       if (note->namesz == 6
10348           && strcmp (note->namedata, "LINUX") == 0)
10349         return elfcore_grok_ppc_dscr (abfd, note);
10350       else
10351         return TRUE;
10352
10353     case NT_PPC_EBB:
10354       if (note->namesz == 6
10355           && strcmp (note->namedata, "LINUX") == 0)
10356         return elfcore_grok_ppc_ebb (abfd, note);
10357       else
10358         return TRUE;
10359
10360     case NT_PPC_PMU:
10361       if (note->namesz == 6
10362           && strcmp (note->namedata, "LINUX") == 0)
10363         return elfcore_grok_ppc_pmu (abfd, note);
10364       else
10365         return TRUE;
10366
10367     case NT_PPC_TM_CGPR:
10368       if (note->namesz == 6
10369           && strcmp (note->namedata, "LINUX") == 0)
10370         return elfcore_grok_ppc_tm_cgpr (abfd, note);
10371       else
10372         return TRUE;
10373
10374     case NT_PPC_TM_CFPR:
10375       if (note->namesz == 6
10376           && strcmp (note->namedata, "LINUX") == 0)
10377         return elfcore_grok_ppc_tm_cfpr (abfd, note);
10378       else
10379         return TRUE;
10380
10381     case NT_PPC_TM_CVMX:
10382       if (note->namesz == 6
10383           && strcmp (note->namedata, "LINUX") == 0)
10384         return elfcore_grok_ppc_tm_cvmx (abfd, note);
10385       else
10386         return TRUE;
10387
10388     case NT_PPC_TM_CVSX:
10389       if (note->namesz == 6
10390           && strcmp (note->namedata, "LINUX") == 0)
10391         return elfcore_grok_ppc_tm_cvsx (abfd, note);
10392       else
10393         return TRUE;
10394
10395     case NT_PPC_TM_SPR:
10396       if (note->namesz == 6
10397           && strcmp (note->namedata, "LINUX") == 0)
10398         return elfcore_grok_ppc_tm_spr (abfd, note);
10399       else
10400         return TRUE;
10401
10402     case NT_PPC_TM_CTAR:
10403       if (note->namesz == 6
10404           && strcmp (note->namedata, "LINUX") == 0)
10405         return elfcore_grok_ppc_tm_ctar (abfd, note);
10406       else
10407         return TRUE;
10408
10409     case NT_PPC_TM_CPPR:
10410       if (note->namesz == 6
10411           && strcmp (note->namedata, "LINUX") == 0)
10412         return elfcore_grok_ppc_tm_cppr (abfd, note);
10413       else
10414         return TRUE;
10415
10416     case NT_PPC_TM_CDSCR:
10417       if (note->namesz == 6
10418           && strcmp (note->namedata, "LINUX") == 0)
10419         return elfcore_grok_ppc_tm_cdscr (abfd, note);
10420       else
10421         return TRUE;
10422
10423     case NT_S390_HIGH_GPRS:
10424       if (note->namesz == 6
10425           && strcmp (note->namedata, "LINUX") == 0)
10426         return elfcore_grok_s390_high_gprs (abfd, note);
10427       else
10428         return TRUE;
10429
10430     case NT_S390_TIMER:
10431       if (note->namesz == 6
10432           && strcmp (note->namedata, "LINUX") == 0)
10433         return elfcore_grok_s390_timer (abfd, note);
10434       else
10435         return TRUE;
10436
10437     case NT_S390_TODCMP:
10438       if (note->namesz == 6
10439           && strcmp (note->namedata, "LINUX") == 0)
10440         return elfcore_grok_s390_todcmp (abfd, note);
10441       else
10442         return TRUE;
10443
10444     case NT_S390_TODPREG:
10445       if (note->namesz == 6
10446           && strcmp (note->namedata, "LINUX") == 0)
10447         return elfcore_grok_s390_todpreg (abfd, note);
10448       else
10449         return TRUE;
10450
10451     case NT_S390_CTRS:
10452       if (note->namesz == 6
10453           && strcmp (note->namedata, "LINUX") == 0)
10454         return elfcore_grok_s390_ctrs (abfd, note);
10455       else
10456         return TRUE;
10457
10458     case NT_S390_PREFIX:
10459       if (note->namesz == 6
10460           && strcmp (note->namedata, "LINUX") == 0)
10461         return elfcore_grok_s390_prefix (abfd, note);
10462       else
10463         return TRUE;
10464
10465     case NT_S390_LAST_BREAK:
10466       if (note->namesz == 6
10467           && strcmp (note->namedata, "LINUX") == 0)
10468         return elfcore_grok_s390_last_break (abfd, note);
10469       else
10470         return TRUE;
10471
10472     case NT_S390_SYSTEM_CALL:
10473       if (note->namesz == 6
10474           && strcmp (note->namedata, "LINUX") == 0)
10475         return elfcore_grok_s390_system_call (abfd, note);
10476       else
10477         return TRUE;
10478
10479     case NT_S390_TDB:
10480       if (note->namesz == 6
10481           && strcmp (note->namedata, "LINUX") == 0)
10482         return elfcore_grok_s390_tdb (abfd, note);
10483       else
10484         return TRUE;
10485
10486     case NT_S390_VXRS_LOW:
10487       if (note->namesz == 6
10488           && strcmp (note->namedata, "LINUX") == 0)
10489         return elfcore_grok_s390_vxrs_low (abfd, note);
10490       else
10491         return TRUE;
10492
10493     case NT_S390_VXRS_HIGH:
10494       if (note->namesz == 6
10495           && strcmp (note->namedata, "LINUX") == 0)
10496         return elfcore_grok_s390_vxrs_high (abfd, note);
10497       else
10498         return TRUE;
10499
10500     case NT_S390_GS_CB:
10501       if (note->namesz == 6
10502           && strcmp (note->namedata, "LINUX") == 0)
10503         return elfcore_grok_s390_gs_cb (abfd, note);
10504       else
10505         return TRUE;
10506
10507     case NT_S390_GS_BC:
10508       if (note->namesz == 6
10509           && strcmp (note->namedata, "LINUX") == 0)
10510         return elfcore_grok_s390_gs_bc (abfd, note);
10511       else
10512         return TRUE;
10513
10514     case NT_ARC_V2:
10515       if (note->namesz == 6
10516           && strcmp (note->namedata, "LINUX") == 0)
10517         return elfcore_grok_arc_v2 (abfd, note);
10518       else
10519         return TRUE;
10520
10521     case NT_ARM_VFP:
10522       if (note->namesz == 6
10523           && strcmp (note->namedata, "LINUX") == 0)
10524         return elfcore_grok_arm_vfp (abfd, note);
10525       else
10526         return TRUE;
10527
10528     case NT_ARM_TLS:
10529       if (note->namesz == 6
10530           && strcmp (note->namedata, "LINUX") == 0)
10531         return elfcore_grok_aarch_tls (abfd, note);
10532       else
10533         return TRUE;
10534
10535     case NT_ARM_HW_BREAK:
10536       if (note->namesz == 6
10537           && strcmp (note->namedata, "LINUX") == 0)
10538         return elfcore_grok_aarch_hw_break (abfd, note);
10539       else
10540         return TRUE;
10541
10542     case NT_ARM_HW_WATCH:
10543       if (note->namesz == 6
10544           && strcmp (note->namedata, "LINUX") == 0)
10545         return elfcore_grok_aarch_hw_watch (abfd, note);
10546       else
10547         return TRUE;
10548
10549     case NT_ARM_SVE:
10550       if (note->namesz == 6
10551           && strcmp (note->namedata, "LINUX") == 0)
10552         return elfcore_grok_aarch_sve (abfd, note);
10553       else
10554         return TRUE;
10555
10556     case NT_ARM_PAC_MASK:
10557       if (note->namesz == 6
10558           && strcmp (note->namedata, "LINUX") == 0)
10559         return elfcore_grok_aarch_pauth (abfd, note);
10560       else
10561         return TRUE;
10562
10563     case NT_PRPSINFO:
10564     case NT_PSINFO:
10565       if (bed->elf_backend_grok_psinfo)
10566         if ((*bed->elf_backend_grok_psinfo) (abfd, note))
10567           return TRUE;
10568 #if defined (HAVE_PRPSINFO_T) || defined (HAVE_PSINFO_T)
10569       return elfcore_grok_psinfo (abfd, note);
10570 #else
10571       return TRUE;
10572 #endif
10573
10574     case NT_AUXV:
10575       return elfcore_make_auxv_note_section (abfd, note, 0);
10576
10577     case NT_FILE:
10578       return elfcore_make_note_pseudosection (abfd, ".note.linuxcore.file",
10579                                               note);
10580
10581     case NT_SIGINFO:
10582       return elfcore_make_note_pseudosection (abfd, ".note.linuxcore.siginfo",
10583                                               note);
10584
10585     }
10586 }
10587
10588 static bfd_boolean
10589 elfobj_grok_gnu_build_id (bfd *abfd, Elf_Internal_Note *note)
10590 {
10591   struct bfd_build_id* build_id;
10592
10593   if (note->descsz == 0)
10594     return FALSE;
10595
10596   build_id = bfd_alloc (abfd, sizeof (struct bfd_build_id) - 1 + note->descsz);
10597   if (build_id == NULL)
10598     return FALSE;
10599
10600   build_id->size = note->descsz;
10601   memcpy (build_id->data, note->descdata, note->descsz);
10602   abfd->build_id = build_id;
10603
10604   return TRUE;
10605 }
10606
10607 static bfd_boolean
10608 elfobj_grok_gnu_note (bfd *abfd, Elf_Internal_Note *note)
10609 {
10610   switch (note->type)
10611     {
10612     default:
10613       return TRUE;
10614
10615     case NT_GNU_PROPERTY_TYPE_0:
10616       return _bfd_elf_parse_gnu_properties (abfd, note);
10617
10618     case NT_GNU_BUILD_ID:
10619       return elfobj_grok_gnu_build_id (abfd, note);
10620     }
10621 }
10622
10623 static bfd_boolean
10624 elfobj_grok_stapsdt_note_1 (bfd *abfd, Elf_Internal_Note *note)
10625 {
10626   struct sdt_note *cur =
10627     (struct sdt_note *) bfd_alloc (abfd,
10628                                    sizeof (struct sdt_note) + note->descsz);
10629
10630   cur->next = (struct sdt_note *) (elf_tdata (abfd))->sdt_note_head;
10631   cur->size = (bfd_size_type) note->descsz;
10632   memcpy (cur->data, note->descdata, note->descsz);
10633
10634   elf_tdata (abfd)->sdt_note_head = cur;
10635
10636   return TRUE;
10637 }
10638
10639 static bfd_boolean
10640 elfobj_grok_stapsdt_note (bfd *abfd, Elf_Internal_Note *note)
10641 {
10642   switch (note->type)
10643     {
10644     case NT_STAPSDT:
10645       return elfobj_grok_stapsdt_note_1 (abfd, note);
10646
10647     default:
10648       return TRUE;
10649     }
10650 }
10651
10652 static bfd_boolean
10653 elfcore_grok_freebsd_psinfo (bfd *abfd, Elf_Internal_Note *note)
10654 {
10655   size_t offset;
10656
10657   switch (elf_elfheader (abfd)->e_ident[EI_CLASS])
10658     {
10659     case ELFCLASS32:
10660       if (note->descsz < 108)
10661         return FALSE;
10662       break;
10663
10664     case ELFCLASS64:
10665       if (note->descsz < 120)
10666         return FALSE;
10667       break;
10668
10669     default:
10670       return FALSE;
10671     }
10672
10673   /* Check for version 1 in pr_version.  */
10674   if (bfd_h_get_32 (abfd, (bfd_byte *) note->descdata) != 1)
10675     return FALSE;
10676
10677   offset = 4;
10678
10679   /* Skip over pr_psinfosz. */
10680   if (elf_elfheader (abfd)->e_ident[EI_CLASS] == ELFCLASS32)
10681     offset += 4;
10682   else
10683     {
10684       offset += 4;      /* Padding before pr_psinfosz. */
10685       offset += 8;
10686     }
10687
10688   /* pr_fname is PRFNAMESZ (16) + 1 bytes in size.  */
10689   elf_tdata (abfd)->core->program
10690     = _bfd_elfcore_strndup (abfd, note->descdata + offset, 17);
10691   offset += 17;
10692
10693   /* pr_psargs is PRARGSZ (80) + 1 bytes in size.  */
10694   elf_tdata (abfd)->core->command
10695     = _bfd_elfcore_strndup (abfd, note->descdata + offset, 81);
10696   offset += 81;
10697
10698   /* Padding before pr_pid.  */
10699   offset += 2;
10700
10701   /* The pr_pid field was added in version "1a".  */
10702   if (note->descsz < offset + 4)
10703     return TRUE;
10704
10705   elf_tdata (abfd)->core->pid
10706     = bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + offset);
10707
10708   return TRUE;
10709 }
10710
10711 static bfd_boolean
10712 elfcore_grok_freebsd_prstatus (bfd *abfd, Elf_Internal_Note *note)
10713 {
10714   size_t offset;
10715   size_t size;
10716   size_t min_size;
10717
10718   /* Compute offset of pr_getregsz, skipping over pr_statussz.
10719      Also compute minimum size of this note.  */
10720   switch (elf_elfheader (abfd)->e_ident[EI_CLASS])
10721     {
10722     case ELFCLASS32:
10723       offset = 4 + 4;
10724       min_size = offset + (4 * 2) + 4 + 4 + 4;
10725       break;
10726
10727     case ELFCLASS64:
10728       offset = 4 + 4 + 8;       /* Includes padding before pr_statussz.  */
10729       min_size = offset + (8 * 2) + 4 + 4 + 4 + 4;
10730       break;
10731
10732     default:
10733       return FALSE;
10734     }
10735
10736   if (note->descsz < min_size)
10737     return FALSE;
10738
10739   /* Check for version 1 in pr_version.  */
10740   if (bfd_h_get_32 (abfd, (bfd_byte *) note->descdata) != 1)
10741     return FALSE;
10742
10743   /* Extract size of pr_reg from pr_gregsetsz.  */
10744   /* Skip over pr_gregsetsz and pr_fpregsetsz.  */
10745   if (elf_elfheader (abfd)->e_ident[EI_CLASS] == ELFCLASS32)
10746     {
10747       size = bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + offset);
10748       offset += 4 * 2;
10749     }
10750   else
10751     {
10752       size = bfd_h_get_64 (abfd, (bfd_byte *) note->descdata + offset);
10753       offset += 8 * 2;
10754     }
10755
10756   /* Skip over pr_osreldate.  */
10757   offset += 4;
10758
10759   /* Read signal from pr_cursig.  */
10760   if (elf_tdata (abfd)->core->signal == 0)
10761     elf_tdata (abfd)->core->signal
10762       = bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + offset);
10763   offset += 4;
10764
10765   /* Read TID from pr_pid.  */
10766   elf_tdata (abfd)->core->lwpid
10767       = bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + offset);
10768   offset += 4;
10769
10770   /* Padding before pr_reg.  */
10771   if (elf_elfheader (abfd)->e_ident[EI_CLASS] == ELFCLASS64)
10772     offset += 4;
10773
10774   /* Make sure that there is enough data remaining in the note.  */
10775   if ((note->descsz - offset) < size)
10776     return FALSE;
10777
10778   /* Make a ".reg/999" section and a ".reg" section.  */
10779   return _bfd_elfcore_make_pseudosection (abfd, ".reg",
10780                                           size, note->descpos + offset);
10781 }
10782
10783 static bfd_boolean
10784 elfcore_grok_freebsd_note (bfd *abfd, Elf_Internal_Note *note)
10785 {
10786   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
10787
10788   switch (note->type)
10789     {
10790     case NT_PRSTATUS:
10791       if (bed->elf_backend_grok_freebsd_prstatus)
10792         if ((*bed->elf_backend_grok_freebsd_prstatus) (abfd, note))
10793           return TRUE;
10794       return elfcore_grok_freebsd_prstatus (abfd, note);
10795
10796     case NT_FPREGSET:
10797       return elfcore_grok_prfpreg (abfd, note);
10798
10799     case NT_PRPSINFO:
10800       return elfcore_grok_freebsd_psinfo (abfd, note);
10801
10802     case NT_FREEBSD_THRMISC:
10803       if (note->namesz == 8)
10804         return elfcore_make_note_pseudosection (abfd, ".thrmisc", note);
10805       else
10806         return TRUE;
10807
10808     case NT_FREEBSD_PROCSTAT_PROC:
10809       return elfcore_make_note_pseudosection (abfd, ".note.freebsdcore.proc",
10810                                               note);
10811
10812     case NT_FREEBSD_PROCSTAT_FILES:
10813       return elfcore_make_note_pseudosection (abfd, ".note.freebsdcore.files",
10814                                               note);
10815
10816     case NT_FREEBSD_PROCSTAT_VMMAP:
10817       return elfcore_make_note_pseudosection (abfd, ".note.freebsdcore.vmmap",
10818                                               note);
10819
10820     case NT_FREEBSD_PROCSTAT_AUXV:
10821       return elfcore_make_auxv_note_section (abfd, note, 4);
10822
10823     case NT_X86_XSTATE:
10824       if (note->namesz == 8)
10825         return elfcore_grok_xstatereg (abfd, note);
10826       else
10827         return TRUE;
10828
10829     case NT_FREEBSD_PTLWPINFO:
10830       return elfcore_make_note_pseudosection (abfd, ".note.freebsdcore.lwpinfo",
10831                                               note);
10832
10833     case NT_ARM_VFP:
10834       return elfcore_grok_arm_vfp (abfd, note);
10835
10836     default:
10837       return TRUE;
10838     }
10839 }
10840
10841 static bfd_boolean
10842 elfcore_netbsd_get_lwpid (Elf_Internal_Note *note, int *lwpidp)
10843 {
10844   char *cp;
10845
10846   cp = strchr (note->namedata, '@');
10847   if (cp != NULL)
10848     {
10849       *lwpidp = atoi(cp + 1);
10850       return TRUE;
10851     }
10852   return FALSE;
10853 }
10854
10855 static bfd_boolean
10856 elfcore_grok_netbsd_procinfo (bfd *abfd, Elf_Internal_Note *note)
10857 {
10858   if (note->descsz <= 0x7c + 31)
10859     return FALSE;
10860
10861   /* Signal number at offset 0x08. */
10862   elf_tdata (abfd)->core->signal
10863     = bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + 0x08);
10864
10865   /* Process ID at offset 0x50. */
10866   elf_tdata (abfd)->core->pid
10867     = bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + 0x50);
10868
10869   /* Command name at 0x7c (max 32 bytes, including nul). */
10870   elf_tdata (abfd)->core->command
10871     = _bfd_elfcore_strndup (abfd, note->descdata + 0x7c, 31);
10872
10873   return elfcore_make_note_pseudosection (abfd, ".note.netbsdcore.procinfo",
10874                                           note);
10875 }
10876
10877 static bfd_boolean
10878 elfcore_grok_netbsd_note (bfd *abfd, Elf_Internal_Note *note)
10879 {
10880   int lwp;
10881
10882   if (elfcore_netbsd_get_lwpid (note, &lwp))
10883     elf_tdata (abfd)->core->lwpid = lwp;
10884
10885   switch (note->type)
10886     {
10887     case NT_NETBSDCORE_PROCINFO:
10888       /* NetBSD-specific core "procinfo".  Note that we expect to
10889          find this note before any of the others, which is fine,
10890          since the kernel writes this note out first when it
10891          creates a core file.  */
10892       return elfcore_grok_netbsd_procinfo (abfd, note);
10893 #ifdef NT_NETBSDCORE_AUXV
10894     case NT_NETBSDCORE_AUXV:
10895       /* NetBSD-specific Elf Auxiliary Vector data. */
10896       return elfcore_make_auxv_note_section (abfd, note, 4);
10897 #endif
10898 #ifdef NT_NETBSDCORE_LWPSTATUS
10899     case NT_NETBSDCORE_LWPSTATUS:
10900       return elfcore_make_note_pseudosection (abfd,
10901                                               ".note.netbsdcore.lwpstatus",
10902                                               note);
10903 #endif
10904     default:
10905       break;
10906     }
10907
10908   /* As of March 2020 there are no other machine-independent notes
10909      defined for NetBSD core files.  If the note type is less
10910      than the start of the machine-dependent note types, we don't
10911      understand it.  */
10912
10913   if (note->type < NT_NETBSDCORE_FIRSTMACH)
10914     return TRUE;
10915
10916
10917   switch (bfd_get_arch (abfd))
10918     {
10919       /* On the Alpha, SPARC (32-bit and 64-bit), PT_GETREGS == mach+0 and
10920          PT_GETFPREGS == mach+2.  */
10921
10922     case bfd_arch_aarch64:
10923     case bfd_arch_alpha:
10924     case bfd_arch_sparc:
10925       switch (note->type)
10926         {
10927         case NT_NETBSDCORE_FIRSTMACH+0:
10928           return elfcore_make_note_pseudosection (abfd, ".reg", note);
10929
10930         case NT_NETBSDCORE_FIRSTMACH+2:
10931           return elfcore_make_note_pseudosection (abfd, ".reg2", note);
10932
10933         default:
10934           return TRUE;
10935         }
10936
10937       /* On SuperH, PT_GETREGS == mach+3 and PT_GETFPREGS == mach+5.
10938          There's also old PT___GETREGS40 == mach + 1 for old reg
10939          structure which lacks GBR.  */
10940
10941     case bfd_arch_sh:
10942       switch (note->type)
10943         {
10944         case NT_NETBSDCORE_FIRSTMACH+3:
10945           return elfcore_make_note_pseudosection (abfd, ".reg", note);
10946
10947         case NT_NETBSDCORE_FIRSTMACH+5:
10948           return elfcore_make_note_pseudosection (abfd, ".reg2", note);
10949
10950         default:
10951           return TRUE;
10952         }
10953
10954       /* On all other arch's, PT_GETREGS == mach+1 and
10955          PT_GETFPREGS == mach+3.  */
10956
10957     default:
10958       switch (note->type)
10959         {
10960         case NT_NETBSDCORE_FIRSTMACH+1:
10961           return elfcore_make_note_pseudosection (abfd, ".reg", note);
10962
10963         case NT_NETBSDCORE_FIRSTMACH+3:
10964           return elfcore_make_note_pseudosection (abfd, ".reg2", note);
10965
10966         default:
10967           return TRUE;
10968         }
10969     }
10970     /* NOTREACHED */
10971 }
10972
10973 static bfd_boolean
10974 elfcore_grok_openbsd_procinfo (bfd *abfd, Elf_Internal_Note *note)
10975 {
10976   if (note->descsz <= 0x48 + 31)
10977     return FALSE;
10978
10979   /* Signal number at offset 0x08. */
10980   elf_tdata (abfd)->core->signal
10981     = bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + 0x08);
10982
10983   /* Process ID at offset 0x20. */
10984   elf_tdata (abfd)->core->pid
10985     = bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + 0x20);
10986
10987   /* Command name at 0x48 (max 32 bytes, including nul). */
10988   elf_tdata (abfd)->core->command
10989     = _bfd_elfcore_strndup (abfd, note->descdata + 0x48, 31);
10990
10991   return TRUE;
10992 }
10993
10994 static bfd_boolean
10995 elfcore_grok_openbsd_note (bfd *abfd, Elf_Internal_Note *note)
10996 {
10997   if (note->type == NT_OPENBSD_PROCINFO)
10998     return elfcore_grok_openbsd_procinfo (abfd, note);
10999
11000   if (note->type == NT_OPENBSD_REGS)
11001     return elfcore_make_note_pseudosection (abfd, ".reg", note);
11002
11003   if (note->type == NT_OPENBSD_FPREGS)
11004     return elfcore_make_note_pseudosection (abfd, ".reg2", note);
11005
11006   if (note->type == NT_OPENBSD_XFPREGS)
11007     return elfcore_make_note_pseudosection (abfd, ".reg-xfp", note);
11008
11009   if (note->type == NT_OPENBSD_AUXV)
11010     return elfcore_make_auxv_note_section (abfd, note, 0);
11011
11012   if (note->type == NT_OPENBSD_WCOOKIE)
11013     {
11014       asection *sect = bfd_make_section_anyway_with_flags (abfd, ".wcookie",
11015                                                            SEC_HAS_CONTENTS);
11016
11017       if (sect == NULL)
11018         return FALSE;
11019       sect->size = note->descsz;
11020       sect->filepos = note->descpos;
11021       sect->alignment_power = 1 + bfd_get_arch_size (abfd) / 32;
11022
11023       return TRUE;
11024     }
11025
11026   return TRUE;
11027 }
11028
11029 static bfd_boolean
11030 elfcore_grok_nto_status (bfd *abfd, Elf_Internal_Note *note, long *tid)
11031 {
11032   void *ddata = note->descdata;
11033   char buf[100];
11034   char *name;
11035   asection *sect;
11036   short sig;
11037   unsigned flags;
11038
11039   if (note->descsz < 16)
11040     return FALSE;
11041
11042   /* nto_procfs_status 'pid' field is at offset 0.  */
11043   elf_tdata (abfd)->core->pid = bfd_get_32 (abfd, (bfd_byte *) ddata);
11044
11045   /* nto_procfs_status 'tid' field is at offset 4.  Pass it back.  */
11046   *tid = bfd_get_32 (abfd, (bfd_byte *) ddata + 4);
11047
11048   /* nto_procfs_status 'flags' field is at offset 8.  */
11049   flags = bfd_get_32 (abfd, (bfd_byte *) ddata + 8);
11050
11051   /* nto_procfs_status 'what' field is at offset 14.  */
11052   if ((sig = bfd_get_16 (abfd, (bfd_byte *) ddata + 14)) > 0)
11053     {
11054       elf_tdata (abfd)->core->signal = sig;
11055       elf_tdata (abfd)->core->lwpid = *tid;
11056     }
11057
11058   /* _DEBUG_FLAG_CURTID (current thread) is 0x80.  Some cores
11059      do not come from signals so we make sure we set the current
11060      thread just in case.  */
11061   if (flags & 0x00000080)
11062     elf_tdata (abfd)->core->lwpid = *tid;
11063
11064   /* Make a ".qnx_core_status/%d" section.  */
11065   sprintf (buf, ".qnx_core_status/%ld", *tid);
11066
11067   name = (char *) bfd_alloc (abfd, strlen (buf) + 1);
11068   if (name == NULL)
11069     return FALSE;
11070   strcpy (name, buf);
11071
11072   sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS);
11073   if (sect == NULL)
11074     return FALSE;
11075
11076   sect->size            = note->descsz;
11077   sect->filepos         = note->descpos;
11078   sect->alignment_power = 2;
11079
11080   return (elfcore_maybe_make_sect (abfd, ".qnx_core_status", sect));
11081 }
11082
11083 static bfd_boolean
11084 elfcore_grok_nto_regs (bfd *abfd,
11085                        Elf_Internal_Note *note,
11086                        long tid,
11087                        char *base)
11088 {
11089   char buf[100];
11090   char *name;
11091   asection *sect;
11092
11093   /* Make a "(base)/%d" section.  */
11094   sprintf (buf, "%s/%ld", base, tid);
11095
11096   name = (char *) bfd_alloc (abfd, strlen (buf) + 1);
11097   if (name == NULL)
11098     return FALSE;
11099   strcpy (name, buf);
11100
11101   sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS);
11102   if (sect == NULL)
11103     return FALSE;
11104
11105   sect->size            = note->descsz;
11106   sect->filepos         = note->descpos;
11107   sect->alignment_power = 2;
11108
11109   /* This is the current thread.  */
11110   if (elf_tdata (abfd)->core->lwpid == tid)
11111     return elfcore_maybe_make_sect (abfd, base, sect);
11112
11113   return TRUE;
11114 }
11115
11116 #define BFD_QNT_CORE_INFO       7
11117 #define BFD_QNT_CORE_STATUS     8
11118 #define BFD_QNT_CORE_GREG       9
11119 #define BFD_QNT_CORE_FPREG      10
11120
11121 static bfd_boolean
11122 elfcore_grok_nto_note (bfd *abfd, Elf_Internal_Note *note)
11123 {
11124   /* Every GREG section has a STATUS section before it.  Store the
11125      tid from the previous call to pass down to the next gregs
11126      function.  */
11127   static long tid = 1;
11128
11129   switch (note->type)
11130     {
11131     case BFD_QNT_CORE_INFO:
11132       return elfcore_make_note_pseudosection (abfd, ".qnx_core_info", note);
11133     case BFD_QNT_CORE_STATUS:
11134       return elfcore_grok_nto_status (abfd, note, &tid);
11135     case BFD_QNT_CORE_GREG:
11136       return elfcore_grok_nto_regs (abfd, note, tid, ".reg");
11137     case BFD_QNT_CORE_FPREG:
11138       return elfcore_grok_nto_regs (abfd, note, tid, ".reg2");
11139     default:
11140       return TRUE;
11141     }
11142 }
11143
11144 static bfd_boolean
11145 elfcore_grok_spu_note (bfd *abfd, Elf_Internal_Note *note)
11146 {
11147   char *name;
11148   asection *sect;
11149   size_t len;
11150
11151   /* Use note name as section name.  */
11152   len = note->namesz;
11153   name = (char *) bfd_alloc (abfd, len);
11154   if (name == NULL)
11155     return FALSE;
11156   memcpy (name, note->namedata, len);
11157   name[len - 1] = '\0';
11158
11159   sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS);
11160   if (sect == NULL)
11161     return FALSE;
11162
11163   sect->size            = note->descsz;
11164   sect->filepos         = note->descpos;
11165   sect->alignment_power = 1;
11166
11167   return TRUE;
11168 }
11169
11170 /* Function: elfcore_write_note
11171
11172    Inputs:
11173      buffer to hold note, and current size of buffer
11174      name of note
11175      type of note
11176      data for note
11177      size of data for note
11178
11179    Writes note to end of buffer.  ELF64 notes are written exactly as
11180    for ELF32, despite the current (as of 2006) ELF gabi specifying
11181    that they ought to have 8-byte namesz and descsz field, and have
11182    8-byte alignment.  Other writers, eg. Linux kernel, do the same.
11183
11184    Return:
11185    Pointer to realloc'd buffer, *BUFSIZ updated.  */
11186
11187 char *
11188 elfcore_write_note (bfd *abfd,
11189                     char *buf,
11190                     int *bufsiz,
11191                     const char *name,
11192                     int type,
11193                     const void *input,
11194                     int size)
11195 {
11196   Elf_External_Note *xnp;
11197   size_t namesz;
11198   size_t newspace;
11199   char *dest;
11200
11201   namesz = 0;
11202   if (name != NULL)
11203     namesz = strlen (name) + 1;
11204
11205   newspace = 12 + ((namesz + 3) & -4) + ((size + 3) & -4);
11206
11207   buf = (char *) realloc (buf, *bufsiz + newspace);
11208   if (buf == NULL)
11209     return buf;
11210   dest = buf + *bufsiz;
11211   *bufsiz += newspace;
11212   xnp = (Elf_External_Note *) dest;
11213   H_PUT_32 (abfd, namesz, xnp->namesz);
11214   H_PUT_32 (abfd, size, xnp->descsz);
11215   H_PUT_32 (abfd, type, xnp->type);
11216   dest = xnp->name;
11217   if (name != NULL)
11218     {
11219       memcpy (dest, name, namesz);
11220       dest += namesz;
11221       while (namesz & 3)
11222         {
11223           *dest++ = '\0';
11224           ++namesz;
11225         }
11226     }
11227   memcpy (dest, input, size);
11228   dest += size;
11229   while (size & 3)
11230     {
11231       *dest++ = '\0';
11232       ++size;
11233     }
11234   return buf;
11235 }
11236
11237 /* gcc-8 warns (*) on all the strncpy calls in this function about
11238    possible string truncation.  The "truncation" is not a bug.  We
11239    have an external representation of structs with fields that are not
11240    necessarily NULL terminated and corresponding internal
11241    representation fields that are one larger so that they can always
11242    be NULL terminated.
11243    gcc versions between 4.2 and 4.6 do not allow pragma control of
11244    diagnostics inside functions, giving a hard error if you try to use
11245    the finer control available with later versions.
11246    gcc prior to 4.2 warns about diagnostic push and pop.
11247    gcc-5, gcc-6 and gcc-7 warn that -Wstringop-truncation is unknown,
11248    unless you also add #pragma GCC diagnostic ignored "-Wpragma".
11249    (*) Depending on your system header files!  */
11250 #if GCC_VERSION >= 8000
11251 # pragma GCC diagnostic push
11252 # pragma GCC diagnostic ignored "-Wstringop-truncation"
11253 #endif
11254 char *
11255 elfcore_write_prpsinfo (bfd  *abfd,
11256                         char *buf,
11257                         int  *bufsiz,
11258                         const char *fname,
11259                         const char *psargs)
11260 {
11261   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
11262
11263   if (bed->elf_backend_write_core_note != NULL)
11264     {
11265       char *ret;
11266       ret = (*bed->elf_backend_write_core_note) (abfd, buf, bufsiz,
11267                                                  NT_PRPSINFO, fname, psargs);
11268       if (ret != NULL)
11269         return ret;
11270     }
11271
11272 #if defined (HAVE_PRPSINFO_T) || defined (HAVE_PSINFO_T)
11273 # if defined (HAVE_PRPSINFO32_T) || defined (HAVE_PSINFO32_T)
11274   if (bed->s->elfclass == ELFCLASS32)
11275     {
11276 #  if defined (HAVE_PSINFO32_T)
11277       psinfo32_t data;
11278       int note_type = NT_PSINFO;
11279 #  else
11280       prpsinfo32_t data;
11281       int note_type = NT_PRPSINFO;
11282 #  endif
11283
11284       memset (&data, 0, sizeof (data));
11285       strncpy (data.pr_fname, fname, sizeof (data.pr_fname));
11286       strncpy (data.pr_psargs, psargs, sizeof (data.pr_psargs));
11287       return elfcore_write_note (abfd, buf, bufsiz,
11288                                  "CORE", note_type, &data, sizeof (data));
11289     }
11290   else
11291 # endif
11292     {
11293 # if defined (HAVE_PSINFO_T)
11294       psinfo_t data;
11295       int note_type = NT_PSINFO;
11296 # else
11297       prpsinfo_t data;
11298       int note_type = NT_PRPSINFO;
11299 # endif
11300
11301       memset (&data, 0, sizeof (data));
11302       strncpy (data.pr_fname, fname, sizeof (data.pr_fname));
11303       strncpy (data.pr_psargs, psargs, sizeof (data.pr_psargs));
11304       return elfcore_write_note (abfd, buf, bufsiz,
11305                                  "CORE", note_type, &data, sizeof (data));
11306     }
11307 #endif  /* PSINFO_T or PRPSINFO_T */
11308
11309   free (buf);
11310   return NULL;
11311 }
11312 #if GCC_VERSION >= 8000
11313 # pragma GCC diagnostic pop
11314 #endif
11315
11316 char *
11317 elfcore_write_linux_prpsinfo32
11318   (bfd *abfd, char *buf, int *bufsiz,
11319    const struct elf_internal_linux_prpsinfo *prpsinfo)
11320 {
11321   if (get_elf_backend_data (abfd)->linux_prpsinfo32_ugid16)
11322     {
11323       struct elf_external_linux_prpsinfo32_ugid16 data;
11324
11325       swap_linux_prpsinfo32_ugid16_out (abfd, prpsinfo, &data);
11326       return elfcore_write_note (abfd, buf, bufsiz, "CORE", NT_PRPSINFO,
11327                                  &data, sizeof (data));
11328     }
11329   else
11330     {
11331       struct elf_external_linux_prpsinfo32_ugid32 data;
11332
11333       swap_linux_prpsinfo32_ugid32_out (abfd, prpsinfo, &data);
11334       return elfcore_write_note (abfd, buf, bufsiz, "CORE", NT_PRPSINFO,
11335                                  &data, sizeof (data));
11336     }
11337 }
11338
11339 char *
11340 elfcore_write_linux_prpsinfo64
11341   (bfd *abfd, char *buf, int *bufsiz,
11342    const struct elf_internal_linux_prpsinfo *prpsinfo)
11343 {
11344   if (get_elf_backend_data (abfd)->linux_prpsinfo64_ugid16)
11345     {
11346       struct elf_external_linux_prpsinfo64_ugid16 data;
11347
11348       swap_linux_prpsinfo64_ugid16_out (abfd, prpsinfo, &data);
11349       return elfcore_write_note (abfd, buf, bufsiz,
11350                                  "CORE", NT_PRPSINFO, &data, sizeof (data));
11351     }
11352   else
11353     {
11354       struct elf_external_linux_prpsinfo64_ugid32 data;
11355
11356       swap_linux_prpsinfo64_ugid32_out (abfd, prpsinfo, &data);
11357       return elfcore_write_note (abfd, buf, bufsiz,
11358                                  "CORE", NT_PRPSINFO, &data, sizeof (data));
11359     }
11360 }
11361
11362 char *
11363 elfcore_write_prstatus (bfd *abfd,
11364                         char *buf,
11365                         int *bufsiz,
11366                         long pid,
11367                         int cursig,
11368                         const void *gregs)
11369 {
11370   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
11371
11372   if (bed->elf_backend_write_core_note != NULL)
11373     {
11374       char *ret;
11375       ret = (*bed->elf_backend_write_core_note) (abfd, buf, bufsiz,
11376                                                  NT_PRSTATUS,
11377                                                  pid, cursig, gregs);
11378       if (ret != NULL)
11379         return ret;
11380     }
11381
11382 #if defined (HAVE_PRSTATUS_T)
11383 #if defined (HAVE_PRSTATUS32_T)
11384   if (bed->s->elfclass == ELFCLASS32)
11385     {
11386       prstatus32_t prstat;
11387
11388       memset (&prstat, 0, sizeof (prstat));
11389       prstat.pr_pid = pid;
11390       prstat.pr_cursig = cursig;
11391       memcpy (&prstat.pr_reg, gregs, sizeof (prstat.pr_reg));
11392       return elfcore_write_note (abfd, buf, bufsiz, "CORE",
11393                                  NT_PRSTATUS, &prstat, sizeof (prstat));
11394     }
11395   else
11396 #endif
11397     {
11398       prstatus_t prstat;
11399
11400       memset (&prstat, 0, sizeof (prstat));
11401       prstat.pr_pid = pid;
11402       prstat.pr_cursig = cursig;
11403       memcpy (&prstat.pr_reg, gregs, sizeof (prstat.pr_reg));
11404       return elfcore_write_note (abfd, buf, bufsiz, "CORE",
11405                                  NT_PRSTATUS, &prstat, sizeof (prstat));
11406     }
11407 #endif /* HAVE_PRSTATUS_T */
11408
11409   free (buf);
11410   return NULL;
11411 }
11412
11413 #if defined (HAVE_LWPSTATUS_T)
11414 char *
11415 elfcore_write_lwpstatus (bfd *abfd,
11416                          char *buf,
11417                          int *bufsiz,
11418                          long pid,
11419                          int cursig,
11420                          const void *gregs)
11421 {
11422   lwpstatus_t lwpstat;
11423   const char *note_name = "CORE";
11424
11425   memset (&lwpstat, 0, sizeof (lwpstat));
11426   lwpstat.pr_lwpid  = pid >> 16;
11427   lwpstat.pr_cursig = cursig;
11428 #if defined (HAVE_LWPSTATUS_T_PR_REG)
11429   memcpy (&lwpstat.pr_reg, gregs, sizeof (lwpstat.pr_reg));
11430 #elif defined (HAVE_LWPSTATUS_T_PR_CONTEXT)
11431 #if !defined(gregs)
11432   memcpy (lwpstat.pr_context.uc_mcontext.gregs,
11433           gregs, sizeof (lwpstat.pr_context.uc_mcontext.gregs));
11434 #else
11435   memcpy (lwpstat.pr_context.uc_mcontext.__gregs,
11436           gregs, sizeof (lwpstat.pr_context.uc_mcontext.__gregs));
11437 #endif
11438 #endif
11439   return elfcore_write_note (abfd, buf, bufsiz, note_name,
11440                              NT_LWPSTATUS, &lwpstat, sizeof (lwpstat));
11441 }
11442 #endif /* HAVE_LWPSTATUS_T */
11443
11444 #if defined (HAVE_PSTATUS_T)
11445 char *
11446 elfcore_write_pstatus (bfd *abfd,
11447                        char *buf,
11448                        int *bufsiz,
11449                        long pid,
11450                        int cursig ATTRIBUTE_UNUSED,
11451                        const void *gregs ATTRIBUTE_UNUSED)
11452 {
11453   const char *note_name = "CORE";
11454 #if defined (HAVE_PSTATUS32_T)
11455   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
11456
11457   if (bed->s->elfclass == ELFCLASS32)
11458     {
11459       pstatus32_t pstat;
11460
11461       memset (&pstat, 0, sizeof (pstat));
11462       pstat.pr_pid = pid & 0xffff;
11463       buf = elfcore_write_note (abfd, buf, bufsiz, note_name,
11464                                 NT_PSTATUS, &pstat, sizeof (pstat));
11465       return buf;
11466     }
11467   else
11468 #endif
11469     {
11470       pstatus_t pstat;
11471
11472       memset (&pstat, 0, sizeof (pstat));
11473       pstat.pr_pid = pid & 0xffff;
11474       buf = elfcore_write_note (abfd, buf, bufsiz, note_name,
11475                                 NT_PSTATUS, &pstat, sizeof (pstat));
11476       return buf;
11477     }
11478 }
11479 #endif /* HAVE_PSTATUS_T */
11480
11481 char *
11482 elfcore_write_prfpreg (bfd *abfd,
11483                        char *buf,
11484                        int *bufsiz,
11485                        const void *fpregs,
11486                        int size)
11487 {
11488   const char *note_name = "CORE";
11489   return elfcore_write_note (abfd, buf, bufsiz,
11490                              note_name, NT_FPREGSET, fpregs, size);
11491 }
11492
11493 char *
11494 elfcore_write_prxfpreg (bfd *abfd,
11495                         char *buf,
11496                         int *bufsiz,
11497                         const void *xfpregs,
11498                         int size)
11499 {
11500   char *note_name = "LINUX";
11501   return elfcore_write_note (abfd, buf, bufsiz,
11502                              note_name, NT_PRXFPREG, xfpregs, size);
11503 }
11504
11505 char *
11506 elfcore_write_xstatereg (bfd *abfd, char *buf, int *bufsiz,
11507                          const void *xfpregs, int size)
11508 {
11509   char *note_name;
11510   if (get_elf_backend_data (abfd)->elf_osabi == ELFOSABI_FREEBSD)
11511     note_name = "FreeBSD";
11512   else
11513     note_name = "LINUX";
11514   return elfcore_write_note (abfd, buf, bufsiz,
11515                              note_name, NT_X86_XSTATE, xfpregs, size);
11516 }
11517
11518 char *
11519 elfcore_write_ppc_vmx (bfd *abfd,
11520                        char *buf,
11521                        int *bufsiz,
11522                        const void *ppc_vmx,
11523                        int size)
11524 {
11525   char *note_name = "LINUX";
11526   return elfcore_write_note (abfd, buf, bufsiz,
11527                              note_name, NT_PPC_VMX, ppc_vmx, size);
11528 }
11529
11530 char *
11531 elfcore_write_ppc_vsx (bfd *abfd,
11532                        char *buf,
11533                        int *bufsiz,
11534                        const void *ppc_vsx,
11535                        int size)
11536 {
11537   char *note_name = "LINUX";
11538   return elfcore_write_note (abfd, buf, bufsiz,
11539                              note_name, NT_PPC_VSX, ppc_vsx, size);
11540 }
11541
11542 char *
11543 elfcore_write_ppc_tar (bfd *abfd,
11544                        char *buf,
11545                        int *bufsiz,
11546                        const void *ppc_tar,
11547                        int size)
11548 {
11549   char *note_name = "LINUX";
11550   return elfcore_write_note (abfd, buf, bufsiz,
11551                              note_name, NT_PPC_TAR, ppc_tar, size);
11552 }
11553
11554 char *
11555 elfcore_write_ppc_ppr (bfd *abfd,
11556                        char *buf,
11557                        int *bufsiz,
11558                        const void *ppc_ppr,
11559                        int size)
11560 {
11561   char *note_name = "LINUX";
11562   return elfcore_write_note (abfd, buf, bufsiz,
11563                              note_name, NT_PPC_PPR, ppc_ppr, size);
11564 }
11565
11566 char *
11567 elfcore_write_ppc_dscr (bfd *abfd,
11568                         char *buf,
11569                         int *bufsiz,
11570                         const void *ppc_dscr,
11571                         int size)
11572 {
11573   char *note_name = "LINUX";
11574   return elfcore_write_note (abfd, buf, bufsiz,
11575                              note_name, NT_PPC_DSCR, ppc_dscr, size);
11576 }
11577
11578 char *
11579 elfcore_write_ppc_ebb (bfd *abfd,
11580                        char *buf,
11581                        int *bufsiz,
11582                        const void *ppc_ebb,
11583                        int size)
11584 {
11585   char *note_name = "LINUX";
11586   return elfcore_write_note (abfd, buf, bufsiz,
11587                              note_name, NT_PPC_EBB, ppc_ebb, size);
11588 }
11589
11590 char *
11591 elfcore_write_ppc_pmu (bfd *abfd,
11592                        char *buf,
11593                        int *bufsiz,
11594                        const void *ppc_pmu,
11595                        int size)
11596 {
11597   char *note_name = "LINUX";
11598   return elfcore_write_note (abfd, buf, bufsiz,
11599                              note_name, NT_PPC_PMU, ppc_pmu, size);
11600 }
11601
11602 char *
11603 elfcore_write_ppc_tm_cgpr (bfd *abfd,
11604                            char *buf,
11605                            int *bufsiz,
11606                            const void *ppc_tm_cgpr,
11607                            int size)
11608 {
11609   char *note_name = "LINUX";
11610   return elfcore_write_note (abfd, buf, bufsiz,
11611                              note_name, NT_PPC_TM_CGPR, ppc_tm_cgpr, size);
11612 }
11613
11614 char *
11615 elfcore_write_ppc_tm_cfpr (bfd *abfd,
11616                            char *buf,
11617                            int *bufsiz,
11618                            const void *ppc_tm_cfpr,
11619                            int size)
11620 {
11621   char *note_name = "LINUX";
11622   return elfcore_write_note (abfd, buf, bufsiz,
11623                              note_name, NT_PPC_TM_CFPR, ppc_tm_cfpr, size);
11624 }
11625
11626 char *
11627 elfcore_write_ppc_tm_cvmx (bfd *abfd,
11628                            char *buf,
11629                            int *bufsiz,
11630                            const void *ppc_tm_cvmx,
11631                            int size)
11632 {
11633   char *note_name = "LINUX";
11634   return elfcore_write_note (abfd, buf, bufsiz,
11635                              note_name, NT_PPC_TM_CVMX, ppc_tm_cvmx, size);
11636 }
11637
11638 char *
11639 elfcore_write_ppc_tm_cvsx (bfd *abfd,
11640                            char *buf,
11641                            int *bufsiz,
11642                            const void *ppc_tm_cvsx,
11643                            int size)
11644 {
11645   char *note_name = "LINUX";
11646   return elfcore_write_note (abfd, buf, bufsiz,
11647                              note_name, NT_PPC_TM_CVSX, ppc_tm_cvsx, size);
11648 }
11649
11650 char *
11651 elfcore_write_ppc_tm_spr (bfd *abfd,
11652                           char *buf,
11653                           int *bufsiz,
11654                           const void *ppc_tm_spr,
11655                           int size)
11656 {
11657   char *note_name = "LINUX";
11658   return elfcore_write_note (abfd, buf, bufsiz,
11659                              note_name, NT_PPC_TM_SPR, ppc_tm_spr, size);
11660 }
11661
11662 char *
11663 elfcore_write_ppc_tm_ctar (bfd *abfd,
11664                            char *buf,
11665                            int *bufsiz,
11666                            const void *ppc_tm_ctar,
11667                            int size)
11668 {
11669   char *note_name = "LINUX";
11670   return elfcore_write_note (abfd, buf, bufsiz,
11671                              note_name, NT_PPC_TM_CTAR, ppc_tm_ctar, size);
11672 }
11673
11674 char *
11675 elfcore_write_ppc_tm_cppr (bfd *abfd,
11676                            char *buf,
11677                            int *bufsiz,
11678                            const void *ppc_tm_cppr,
11679                            int size)
11680 {
11681   char *note_name = "LINUX";
11682   return elfcore_write_note (abfd, buf, bufsiz,
11683                              note_name, NT_PPC_TM_CPPR, ppc_tm_cppr, size);
11684 }
11685
11686 char *
11687 elfcore_write_ppc_tm_cdscr (bfd *abfd,
11688                             char *buf,
11689                             int *bufsiz,
11690                             const void *ppc_tm_cdscr,
11691                             int size)
11692 {
11693   char *note_name = "LINUX";
11694   return elfcore_write_note (abfd, buf, bufsiz,
11695                              note_name, NT_PPC_TM_CDSCR, ppc_tm_cdscr, size);
11696 }
11697
11698 static char *
11699 elfcore_write_s390_high_gprs (bfd *abfd,
11700                               char *buf,
11701                               int *bufsiz,
11702                               const void *s390_high_gprs,
11703                               int size)
11704 {
11705   char *note_name = "LINUX";
11706   return elfcore_write_note (abfd, buf, bufsiz,
11707                              note_name, NT_S390_HIGH_GPRS,
11708                              s390_high_gprs, size);
11709 }
11710
11711 char *
11712 elfcore_write_s390_timer (bfd *abfd,
11713                           char *buf,
11714                           int *bufsiz,
11715                           const void *s390_timer,
11716                           int size)
11717 {
11718   char *note_name = "LINUX";
11719   return elfcore_write_note (abfd, buf, bufsiz,
11720                              note_name, NT_S390_TIMER, s390_timer, size);
11721 }
11722
11723 char *
11724 elfcore_write_s390_todcmp (bfd *abfd,
11725                            char *buf,
11726                            int *bufsiz,
11727                            const void *s390_todcmp,
11728                            int size)
11729 {
11730   char *note_name = "LINUX";
11731   return elfcore_write_note (abfd, buf, bufsiz,
11732                              note_name, NT_S390_TODCMP, s390_todcmp, size);
11733 }
11734
11735 char *
11736 elfcore_write_s390_todpreg (bfd *abfd,
11737                             char *buf,
11738                             int *bufsiz,
11739                             const void *s390_todpreg,
11740                             int size)
11741 {
11742   char *note_name = "LINUX";
11743   return elfcore_write_note (abfd, buf, bufsiz,
11744                              note_name, NT_S390_TODPREG, s390_todpreg, size);
11745 }
11746
11747 char *
11748 elfcore_write_s390_ctrs (bfd *abfd,
11749                          char *buf,
11750                          int *bufsiz,
11751                          const void *s390_ctrs,
11752                          int size)
11753 {
11754   char *note_name = "LINUX";
11755   return elfcore_write_note (abfd, buf, bufsiz,
11756                              note_name, NT_S390_CTRS, s390_ctrs, size);
11757 }
11758
11759 char *
11760 elfcore_write_s390_prefix (bfd *abfd,
11761                            char *buf,
11762                            int *bufsiz,
11763                            const void *s390_prefix,
11764                            int size)
11765 {
11766   char *note_name = "LINUX";
11767   return elfcore_write_note (abfd, buf, bufsiz,
11768                              note_name, NT_S390_PREFIX, s390_prefix, size);
11769 }
11770
11771 char *
11772 elfcore_write_s390_last_break (bfd *abfd,
11773                                char *buf,
11774                                int *bufsiz,
11775                                const void *s390_last_break,
11776                                int size)
11777 {
11778   char *note_name = "LINUX";
11779   return elfcore_write_note (abfd, buf, bufsiz,
11780                              note_name, NT_S390_LAST_BREAK,
11781                              s390_last_break, size);
11782 }
11783
11784 char *
11785 elfcore_write_s390_system_call (bfd *abfd,
11786                                 char *buf,
11787                                 int *bufsiz,
11788                                 const void *s390_system_call,
11789                                 int size)
11790 {
11791   char *note_name = "LINUX";
11792   return elfcore_write_note (abfd, buf, bufsiz,
11793                              note_name, NT_S390_SYSTEM_CALL,
11794                              s390_system_call, size);
11795 }
11796
11797 char *
11798 elfcore_write_s390_tdb (bfd *abfd,
11799                         char *buf,
11800                         int *bufsiz,
11801                         const void *s390_tdb,
11802                         int size)
11803 {
11804   char *note_name = "LINUX";
11805   return elfcore_write_note (abfd, buf, bufsiz,
11806                              note_name, NT_S390_TDB, s390_tdb, size);
11807 }
11808
11809 char *
11810 elfcore_write_s390_vxrs_low (bfd *abfd,
11811                              char *buf,
11812                              int *bufsiz,
11813                              const void *s390_vxrs_low,
11814                              int size)
11815 {
11816   char *note_name = "LINUX";
11817   return elfcore_write_note (abfd, buf, bufsiz,
11818                              note_name, NT_S390_VXRS_LOW, s390_vxrs_low, size);
11819 }
11820
11821 char *
11822 elfcore_write_s390_vxrs_high (bfd *abfd,
11823                              char *buf,
11824                              int *bufsiz,
11825                              const void *s390_vxrs_high,
11826                              int size)
11827 {
11828   char *note_name = "LINUX";
11829   return elfcore_write_note (abfd, buf, bufsiz,
11830                              note_name, NT_S390_VXRS_HIGH,
11831                              s390_vxrs_high, size);
11832 }
11833
11834 char *
11835 elfcore_write_s390_gs_cb (bfd *abfd,
11836                           char *buf,
11837                           int *bufsiz,
11838                           const void *s390_gs_cb,
11839                           int size)
11840 {
11841   char *note_name = "LINUX";
11842   return elfcore_write_note (abfd, buf, bufsiz,
11843                              note_name, NT_S390_GS_CB,
11844                              s390_gs_cb, size);
11845 }
11846
11847 char *
11848 elfcore_write_s390_gs_bc (bfd *abfd,
11849                           char *buf,
11850                           int *bufsiz,
11851                           const void *s390_gs_bc,
11852                           int size)
11853 {
11854   char *note_name = "LINUX";
11855   return elfcore_write_note (abfd, buf, bufsiz,
11856                              note_name, NT_S390_GS_BC,
11857                              s390_gs_bc, size);
11858 }
11859
11860 char *
11861 elfcore_write_arm_vfp (bfd *abfd,
11862                        char *buf,
11863                        int *bufsiz,
11864                        const void *arm_vfp,
11865                        int size)
11866 {
11867   char *note_name = "LINUX";
11868   return elfcore_write_note (abfd, buf, bufsiz,
11869                              note_name, NT_ARM_VFP, arm_vfp, size);
11870 }
11871
11872 char *
11873 elfcore_write_aarch_tls (bfd *abfd,
11874                        char *buf,
11875                        int *bufsiz,
11876                        const void *aarch_tls,
11877                        int size)
11878 {
11879   char *note_name = "LINUX";
11880   return elfcore_write_note (abfd, buf, bufsiz,
11881                              note_name, NT_ARM_TLS, aarch_tls, size);
11882 }
11883
11884 char *
11885 elfcore_write_aarch_hw_break (bfd *abfd,
11886                             char *buf,
11887                             int *bufsiz,
11888                             const void *aarch_hw_break,
11889                             int size)
11890 {
11891   char *note_name = "LINUX";
11892   return elfcore_write_note (abfd, buf, bufsiz,
11893                              note_name, NT_ARM_HW_BREAK, aarch_hw_break, size);
11894 }
11895
11896 char *
11897 elfcore_write_aarch_hw_watch (bfd *abfd,
11898                             char *buf,
11899                             int *bufsiz,
11900                             const void *aarch_hw_watch,
11901                             int size)
11902 {
11903   char *note_name = "LINUX";
11904   return elfcore_write_note (abfd, buf, bufsiz,
11905                              note_name, NT_ARM_HW_WATCH, aarch_hw_watch, size);
11906 }
11907
11908 char *
11909 elfcore_write_aarch_sve (bfd *abfd,
11910                          char *buf,
11911                          int *bufsiz,
11912                          const void *aarch_sve,
11913                          int size)
11914 {
11915   char *note_name = "LINUX";
11916   return elfcore_write_note (abfd, buf, bufsiz,
11917                              note_name, NT_ARM_SVE, aarch_sve, size);
11918 }
11919
11920 char *
11921 elfcore_write_aarch_pauth (bfd *abfd,
11922                            char *buf,
11923                            int *bufsiz,
11924                            const void *aarch_pauth,
11925                            int size)
11926 {
11927   char *note_name = "LINUX";
11928   return elfcore_write_note (abfd, buf, bufsiz,
11929                              note_name, NT_ARM_PAC_MASK, aarch_pauth, size);
11930 }
11931
11932 char *
11933 elfcore_write_arc_v2 (bfd *abfd,
11934                       char *buf,
11935                       int *bufsiz,
11936                       const void *arc_v2,
11937                       int size)
11938 {
11939   char *note_name = "LINUX";
11940   return elfcore_write_note (abfd, buf, bufsiz,
11941                              note_name, NT_ARC_V2, arc_v2, size);
11942 }
11943
11944 char *
11945 elfcore_write_register_note (bfd *abfd,
11946                              char *buf,
11947                              int *bufsiz,
11948                              const char *section,
11949                              const void *data,
11950                              int size)
11951 {
11952   if (strcmp (section, ".reg2") == 0)
11953     return elfcore_write_prfpreg (abfd, buf, bufsiz, data, size);
11954   if (strcmp (section, ".reg-xfp") == 0)
11955     return elfcore_write_prxfpreg (abfd, buf, bufsiz, data, size);
11956   if (strcmp (section, ".reg-xstate") == 0)
11957     return elfcore_write_xstatereg (abfd, buf, bufsiz, data, size);
11958   if (strcmp (section, ".reg-ppc-vmx") == 0)
11959     return elfcore_write_ppc_vmx (abfd, buf, bufsiz, data, size);
11960   if (strcmp (section, ".reg-ppc-vsx") == 0)
11961     return elfcore_write_ppc_vsx (abfd, buf, bufsiz, data, size);
11962   if (strcmp (section, ".reg-ppc-tar") == 0)
11963     return elfcore_write_ppc_tar (abfd, buf, bufsiz, data, size);
11964   if (strcmp (section, ".reg-ppc-ppr") == 0)
11965     return elfcore_write_ppc_ppr (abfd, buf, bufsiz, data, size);
11966   if (strcmp (section, ".reg-ppc-dscr") == 0)
11967     return elfcore_write_ppc_dscr (abfd, buf, bufsiz, data, size);
11968   if (strcmp (section, ".reg-ppc-ebb") == 0)
11969     return elfcore_write_ppc_ebb (abfd, buf, bufsiz, data, size);
11970   if (strcmp (section, ".reg-ppc-pmu") == 0)
11971     return elfcore_write_ppc_pmu (abfd, buf, bufsiz, data, size);
11972   if (strcmp (section, ".reg-ppc-tm-cgpr") == 0)
11973     return elfcore_write_ppc_tm_cgpr (abfd, buf, bufsiz, data, size);
11974   if (strcmp (section, ".reg-ppc-tm-cfpr") == 0)
11975     return elfcore_write_ppc_tm_cfpr (abfd, buf, bufsiz, data, size);
11976   if (strcmp (section, ".reg-ppc-tm-cvmx") == 0)
11977     return elfcore_write_ppc_tm_cvmx (abfd, buf, bufsiz, data, size);
11978   if (strcmp (section, ".reg-ppc-tm-cvsx") == 0)
11979     return elfcore_write_ppc_tm_cvsx (abfd, buf, bufsiz, data, size);
11980   if (strcmp (section, ".reg-ppc-tm-spr") == 0)
11981     return elfcore_write_ppc_tm_spr (abfd, buf, bufsiz, data, size);
11982   if (strcmp (section, ".reg-ppc-tm-ctar") == 0)
11983     return elfcore_write_ppc_tm_ctar (abfd, buf, bufsiz, data, size);
11984   if (strcmp (section, ".reg-ppc-tm-cppr") == 0)
11985     return elfcore_write_ppc_tm_cppr (abfd, buf, bufsiz, data, size);
11986   if (strcmp (section, ".reg-ppc-tm-cdscr") == 0)
11987     return elfcore_write_ppc_tm_cdscr (abfd, buf, bufsiz, data, size);
11988   if (strcmp (section, ".reg-s390-high-gprs") == 0)
11989     return elfcore_write_s390_high_gprs (abfd, buf, bufsiz, data, size);
11990   if (strcmp (section, ".reg-s390-timer") == 0)
11991     return elfcore_write_s390_timer (abfd, buf, bufsiz, data, size);
11992   if (strcmp (section, ".reg-s390-todcmp") == 0)
11993     return elfcore_write_s390_todcmp (abfd, buf, bufsiz, data, size);
11994   if (strcmp (section, ".reg-s390-todpreg") == 0)
11995     return elfcore_write_s390_todpreg (abfd, buf, bufsiz, data, size);
11996   if (strcmp (section, ".reg-s390-ctrs") == 0)
11997     return elfcore_write_s390_ctrs (abfd, buf, bufsiz, data, size);
11998   if (strcmp (section, ".reg-s390-prefix") == 0)
11999     return elfcore_write_s390_prefix (abfd, buf, bufsiz, data, size);
12000   if (strcmp (section, ".reg-s390-last-break") == 0)
12001     return elfcore_write_s390_last_break (abfd, buf, bufsiz, data, size);
12002   if (strcmp (section, ".reg-s390-system-call") == 0)
12003     return elfcore_write_s390_system_call (abfd, buf, bufsiz, data, size);
12004   if (strcmp (section, ".reg-s390-tdb") == 0)
12005     return elfcore_write_s390_tdb (abfd, buf, bufsiz, data, size);
12006   if (strcmp (section, ".reg-s390-vxrs-low") == 0)
12007     return elfcore_write_s390_vxrs_low (abfd, buf, bufsiz, data, size);
12008   if (strcmp (section, ".reg-s390-vxrs-high") == 0)
12009     return elfcore_write_s390_vxrs_high (abfd, buf, bufsiz, data, size);
12010   if (strcmp (section, ".reg-s390-gs-cb") == 0)
12011     return elfcore_write_s390_gs_cb (abfd, buf, bufsiz, data, size);
12012   if (strcmp (section, ".reg-s390-gs-bc") == 0)
12013     return elfcore_write_s390_gs_bc (abfd, buf, bufsiz, data, size);
12014   if (strcmp (section, ".reg-arm-vfp") == 0)
12015     return elfcore_write_arm_vfp (abfd, buf, bufsiz, data, size);
12016   if (strcmp (section, ".reg-aarch-tls") == 0)
12017     return elfcore_write_aarch_tls (abfd, buf, bufsiz, data, size);
12018   if (strcmp (section, ".reg-aarch-hw-break") == 0)
12019     return elfcore_write_aarch_hw_break (abfd, buf, bufsiz, data, size);
12020   if (strcmp (section, ".reg-aarch-hw-watch") == 0)
12021     return elfcore_write_aarch_hw_watch (abfd, buf, bufsiz, data, size);
12022   if (strcmp (section, ".reg-aarch-sve") == 0)
12023     return elfcore_write_aarch_sve (abfd, buf, bufsiz, data, size);
12024   if (strcmp (section, ".reg-aarch-pauth") == 0)
12025     return elfcore_write_aarch_pauth (abfd, buf, bufsiz, data, size);
12026   if (strcmp (section, ".reg-arc-v2") == 0)
12027     return elfcore_write_arc_v2 (abfd, buf, bufsiz, data, size);
12028   return NULL;
12029 }
12030
12031 static bfd_boolean
12032 elf_parse_notes (bfd *abfd, char *buf, size_t size, file_ptr offset,
12033                  size_t align)
12034 {
12035   char *p;
12036
12037   /* NB: CORE PT_NOTE segments may have p_align values of 0 or 1.
12038      gABI specifies that PT_NOTE alignment should be aligned to 4
12039      bytes for 32-bit objects and to 8 bytes for 64-bit objects.  If
12040      align is less than 4, we use 4 byte alignment.   */
12041   if (align < 4)
12042     align = 4;
12043   if (align != 4 && align != 8)
12044     return FALSE;
12045
12046   p = buf;
12047   while (p < buf + size)
12048     {
12049       Elf_External_Note *xnp = (Elf_External_Note *) p;
12050       Elf_Internal_Note in;
12051
12052       if (offsetof (Elf_External_Note, name) > buf - p + size)
12053         return FALSE;
12054
12055       in.type = H_GET_32 (abfd, xnp->type);
12056
12057       in.namesz = H_GET_32 (abfd, xnp->namesz);
12058       in.namedata = xnp->name;
12059       if (in.namesz > buf - in.namedata + size)
12060         return FALSE;
12061
12062       in.descsz = H_GET_32 (abfd, xnp->descsz);
12063       in.descdata = p + ELF_NOTE_DESC_OFFSET (in.namesz, align);
12064       in.descpos = offset + (in.descdata - buf);
12065       if (in.descsz != 0
12066           && (in.descdata >= buf + size
12067               || in.descsz > buf - in.descdata + size))
12068         return FALSE;
12069
12070       switch (bfd_get_format (abfd))
12071         {
12072         default:
12073           return TRUE;
12074
12075         case bfd_core:
12076           {
12077 #define GROKER_ELEMENT(S,F) {S, sizeof (S) - 1, F}
12078             struct
12079             {
12080               const char * string;
12081               size_t len;
12082               bfd_boolean (* func)(bfd *, Elf_Internal_Note *);
12083             }
12084             grokers[] =
12085             {
12086               GROKER_ELEMENT ("", elfcore_grok_note),
12087               GROKER_ELEMENT ("FreeBSD", elfcore_grok_freebsd_note),
12088               GROKER_ELEMENT ("NetBSD-CORE", elfcore_grok_netbsd_note),
12089               GROKER_ELEMENT ( "OpenBSD", elfcore_grok_openbsd_note),
12090               GROKER_ELEMENT ("QNX", elfcore_grok_nto_note),
12091               GROKER_ELEMENT ("SPU/", elfcore_grok_spu_note),
12092               GROKER_ELEMENT ("GNU", elfobj_grok_gnu_note)
12093             };
12094 #undef GROKER_ELEMENT
12095             int i;
12096
12097             for (i = ARRAY_SIZE (grokers); i--;)
12098               {
12099                 if (in.namesz >= grokers[i].len
12100                     && strncmp (in.namedata, grokers[i].string,
12101                                 grokers[i].len) == 0)
12102                   {
12103                     if (! grokers[i].func (abfd, & in))
12104                       return FALSE;
12105                     break;
12106                   }
12107               }
12108             break;
12109           }
12110
12111         case bfd_object:
12112           if (in.namesz == sizeof "GNU" && strcmp (in.namedata, "GNU") == 0)
12113             {
12114               if (! elfobj_grok_gnu_note (abfd, &in))
12115                 return FALSE;
12116             }
12117           else if (in.namesz == sizeof "stapsdt"
12118                    && strcmp (in.namedata, "stapsdt") == 0)
12119             {
12120               if (! elfobj_grok_stapsdt_note (abfd, &in))
12121                 return FALSE;
12122             }
12123           break;
12124         }
12125
12126       p += ELF_NOTE_NEXT_OFFSET (in.namesz, in.descsz, align);
12127     }
12128
12129   return TRUE;
12130 }
12131
12132 bfd_boolean
12133 elf_read_notes (bfd *abfd, file_ptr offset, bfd_size_type size,
12134                 size_t align)
12135 {
12136   char *buf;
12137
12138   if (size == 0 || (size + 1) == 0)
12139     return TRUE;
12140
12141   if (bfd_seek (abfd, offset, SEEK_SET) != 0)
12142     return FALSE;
12143
12144   buf = (char *) _bfd_malloc_and_read (abfd, size + 1, size);
12145   if (buf == NULL)
12146     return FALSE;
12147
12148   /* PR 17512: file: ec08f814
12149      0-termintate the buffer so that string searches will not overflow.  */
12150   buf[size] = 0;
12151
12152   if (!elf_parse_notes (abfd, buf, size, offset, align))
12153     {
12154       free (buf);
12155       return FALSE;
12156     }
12157
12158   free (buf);
12159   return TRUE;
12160 }
12161 \f
12162 /* Providing external access to the ELF program header table.  */
12163
12164 /* Return an upper bound on the number of bytes required to store a
12165    copy of ABFD's program header table entries.  Return -1 if an error
12166    occurs; bfd_get_error will return an appropriate code.  */
12167
12168 long
12169 bfd_get_elf_phdr_upper_bound (bfd *abfd)
12170 {
12171   if (abfd->xvec->flavour != bfd_target_elf_flavour)
12172     {
12173       bfd_set_error (bfd_error_wrong_format);
12174       return -1;
12175     }
12176
12177   return elf_elfheader (abfd)->e_phnum * sizeof (Elf_Internal_Phdr);
12178 }
12179
12180 /* Copy ABFD's program header table entries to *PHDRS.  The entries
12181    will be stored as an array of Elf_Internal_Phdr structures, as
12182    defined in include/elf/internal.h.  To find out how large the
12183    buffer needs to be, call bfd_get_elf_phdr_upper_bound.
12184
12185    Return the number of program header table entries read, or -1 if an
12186    error occurs; bfd_get_error will return an appropriate code.  */
12187
12188 int
12189 bfd_get_elf_phdrs (bfd *abfd, void *phdrs)
12190 {
12191   int num_phdrs;
12192
12193   if (abfd->xvec->flavour != bfd_target_elf_flavour)
12194     {
12195       bfd_set_error (bfd_error_wrong_format);
12196       return -1;
12197     }
12198
12199   num_phdrs = elf_elfheader (abfd)->e_phnum;
12200   if (num_phdrs != 0)
12201     memcpy (phdrs, elf_tdata (abfd)->phdr,
12202             num_phdrs * sizeof (Elf_Internal_Phdr));
12203
12204   return num_phdrs;
12205 }
12206
12207 enum elf_reloc_type_class
12208 _bfd_elf_reloc_type_class (const struct bfd_link_info *info ATTRIBUTE_UNUSED,
12209                            const asection *rel_sec ATTRIBUTE_UNUSED,
12210                            const Elf_Internal_Rela *rela ATTRIBUTE_UNUSED)
12211 {
12212   return reloc_class_normal;
12213 }
12214
12215 /* For RELA architectures, return the relocation value for a
12216    relocation against a local symbol.  */
12217
12218 bfd_vma
12219 _bfd_elf_rela_local_sym (bfd *abfd,
12220                          Elf_Internal_Sym *sym,
12221                          asection **psec,
12222                          Elf_Internal_Rela *rel)
12223 {
12224   asection *sec = *psec;
12225   bfd_vma relocation;
12226
12227   relocation = (sec->output_section->vma
12228                 + sec->output_offset
12229                 + sym->st_value);
12230   if ((sec->flags & SEC_MERGE)
12231       && ELF_ST_TYPE (sym->st_info) == STT_SECTION
12232       && sec->sec_info_type == SEC_INFO_TYPE_MERGE)
12233     {
12234       rel->r_addend =
12235         _bfd_merged_section_offset (abfd, psec,
12236                                     elf_section_data (sec)->sec_info,
12237                                     sym->st_value + rel->r_addend);
12238       if (sec != *psec)
12239         {
12240           /* If we have changed the section, and our original section is
12241              marked with SEC_EXCLUDE, it means that the original
12242              SEC_MERGE section has been completely subsumed in some
12243              other SEC_MERGE section.  In this case, we need to leave
12244              some info around for --emit-relocs.  */
12245           if ((sec->flags & SEC_EXCLUDE) != 0)
12246             sec->kept_section = *psec;
12247           sec = *psec;
12248         }
12249       rel->r_addend -= relocation;
12250       rel->r_addend += sec->output_section->vma + sec->output_offset;
12251     }
12252   return relocation;
12253 }
12254
12255 bfd_vma
12256 _bfd_elf_rel_local_sym (bfd *abfd,
12257                         Elf_Internal_Sym *sym,
12258                         asection **psec,
12259                         bfd_vma addend)
12260 {
12261   asection *sec = *psec;
12262
12263   if (sec->sec_info_type != SEC_INFO_TYPE_MERGE)
12264     return sym->st_value + addend;
12265
12266   return _bfd_merged_section_offset (abfd, psec,
12267                                      elf_section_data (sec)->sec_info,
12268                                      sym->st_value + addend);
12269 }
12270
12271 /* Adjust an address within a section.  Given OFFSET within SEC, return
12272    the new offset within the section, based upon changes made to the
12273    section.  Returns -1 if the offset is now invalid.
12274    The offset (in abnd out) is in target sized bytes, however big a
12275    byte may be.  */
12276
12277 bfd_vma
12278 _bfd_elf_section_offset (bfd *abfd,
12279                          struct bfd_link_info *info,
12280                          asection *sec,
12281                          bfd_vma offset)
12282 {
12283   switch (sec->sec_info_type)
12284     {
12285     case SEC_INFO_TYPE_STABS:
12286       return _bfd_stab_section_offset (sec, elf_section_data (sec)->sec_info,
12287                                        offset);
12288     case SEC_INFO_TYPE_EH_FRAME:
12289       return _bfd_elf_eh_frame_section_offset (abfd, info, sec, offset);
12290
12291     default:
12292       if ((sec->flags & SEC_ELF_REVERSE_COPY) != 0)
12293         {
12294           /* Reverse the offset.  */
12295           const struct elf_backend_data *bed = get_elf_backend_data (abfd);
12296           bfd_size_type address_size = bed->s->arch_size / 8;
12297
12298           /* address_size and sec->size are in octets.  Convert
12299              to bytes before subtracting the original offset.  */
12300           offset = ((sec->size - address_size)
12301                     / bfd_octets_per_byte (abfd, sec) - offset);
12302         }
12303       return offset;
12304     }
12305 }
12306 \f
12307 /* Create a new BFD as if by bfd_openr.  Rather than opening a file,
12308    reconstruct an ELF file by reading the segments out of remote memory
12309    based on the ELF file header at EHDR_VMA and the ELF program headers it
12310    points to.  If not null, *LOADBASEP is filled in with the difference
12311    between the VMAs from which the segments were read, and the VMAs the
12312    file headers (and hence BFD's idea of each section's VMA) put them at.
12313
12314    The function TARGET_READ_MEMORY is called to copy LEN bytes from the
12315    remote memory at target address VMA into the local buffer at MYADDR; it
12316    should return zero on success or an `errno' code on failure.  TEMPL must
12317    be a BFD for an ELF target with the word size and byte order found in
12318    the remote memory.  */
12319
12320 bfd *
12321 bfd_elf_bfd_from_remote_memory
12322   (bfd *templ,
12323    bfd_vma ehdr_vma,
12324    bfd_size_type size,
12325    bfd_vma *loadbasep,
12326    int (*target_read_memory) (bfd_vma, bfd_byte *, bfd_size_type))
12327 {
12328   return (*get_elf_backend_data (templ)->elf_backend_bfd_from_remote_memory)
12329     (templ, ehdr_vma, size, loadbasep, target_read_memory);
12330 }
12331 \f
12332 long
12333 _bfd_elf_get_synthetic_symtab (bfd *abfd,
12334                                long symcount ATTRIBUTE_UNUSED,
12335                                asymbol **syms ATTRIBUTE_UNUSED,
12336                                long dynsymcount,
12337                                asymbol **dynsyms,
12338                                asymbol **ret)
12339 {
12340   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
12341   asection *relplt;
12342   asymbol *s;
12343   const char *relplt_name;
12344   bfd_boolean (*slurp_relocs) (bfd *, asection *, asymbol **, bfd_boolean);
12345   arelent *p;
12346   long count, i, n;
12347   size_t size;
12348   Elf_Internal_Shdr *hdr;
12349   char *names;
12350   asection *plt;
12351
12352   *ret = NULL;
12353
12354   if ((abfd->flags & (DYNAMIC | EXEC_P)) == 0)
12355     return 0;
12356
12357   if (dynsymcount <= 0)
12358     return 0;
12359
12360   if (!bed->plt_sym_val)
12361     return 0;
12362
12363   relplt_name = bed->relplt_name;
12364   if (relplt_name == NULL)
12365     relplt_name = bed->rela_plts_and_copies_p ? ".rela.plt" : ".rel.plt";
12366   relplt = bfd_get_section_by_name (abfd, relplt_name);
12367   if (relplt == NULL)
12368     return 0;
12369
12370   hdr = &elf_section_data (relplt)->this_hdr;
12371   if (hdr->sh_link != elf_dynsymtab (abfd)
12372       || (hdr->sh_type != SHT_REL && hdr->sh_type != SHT_RELA))
12373     return 0;
12374
12375   plt = bfd_get_section_by_name (abfd, ".plt");
12376   if (plt == NULL)
12377     return 0;
12378
12379   slurp_relocs = get_elf_backend_data (abfd)->s->slurp_reloc_table;
12380   if (! (*slurp_relocs) (abfd, relplt, dynsyms, TRUE))
12381     return -1;
12382
12383   count = relplt->size / hdr->sh_entsize;
12384   size = count * sizeof (asymbol);
12385   p = relplt->relocation;
12386   for (i = 0; i < count; i++, p += bed->s->int_rels_per_ext_rel)
12387     {
12388       size += strlen ((*p->sym_ptr_ptr)->name) + sizeof ("@plt");
12389       if (p->addend != 0)
12390         {
12391 #ifdef BFD64
12392           size += sizeof ("+0x") - 1 + 8 + 8 * (bed->s->elfclass == ELFCLASS64);
12393 #else
12394           size += sizeof ("+0x") - 1 + 8;
12395 #endif
12396         }
12397     }
12398
12399   s = *ret = (asymbol *) bfd_malloc (size);
12400   if (s == NULL)
12401     return -1;
12402
12403   names = (char *) (s + count);
12404   p = relplt->relocation;
12405   n = 0;
12406   for (i = 0; i < count; i++, p += bed->s->int_rels_per_ext_rel)
12407     {
12408       size_t len;
12409       bfd_vma addr;
12410
12411       addr = bed->plt_sym_val (i, plt, p);
12412       if (addr == (bfd_vma) -1)
12413         continue;
12414
12415       *s = **p->sym_ptr_ptr;
12416       /* Undefined syms won't have BSF_LOCAL or BSF_GLOBAL set.  Since
12417          we are defining a symbol, ensure one of them is set.  */
12418       if ((s->flags & BSF_LOCAL) == 0)
12419         s->flags |= BSF_GLOBAL;
12420       s->flags |= BSF_SYNTHETIC;
12421       s->section = plt;
12422       s->value = addr - plt->vma;
12423       s->name = names;
12424       s->udata.p = NULL;
12425       len = strlen ((*p->sym_ptr_ptr)->name);
12426       memcpy (names, (*p->sym_ptr_ptr)->name, len);
12427       names += len;
12428       if (p->addend != 0)
12429         {
12430           char buf[30], *a;
12431
12432           memcpy (names, "+0x", sizeof ("+0x") - 1);
12433           names += sizeof ("+0x") - 1;
12434           bfd_sprintf_vma (abfd, buf, p->addend);
12435           for (a = buf; *a == '0'; ++a)
12436             ;
12437           len = strlen (a);
12438           memcpy (names, a, len);
12439           names += len;
12440         }
12441       memcpy (names, "@plt", sizeof ("@plt"));
12442       names += sizeof ("@plt");
12443       ++s, ++n;
12444     }
12445
12446   return n;
12447 }
12448
12449 /* It is only used by x86-64 so far.
12450    ??? This repeats *COM* id of zero.  sec->id is supposed to be unique,
12451    but current usage would allow all of _bfd_std_section to be zero.  */
12452 static const asymbol lcomm_sym
12453   = GLOBAL_SYM_INIT ("LARGE_COMMON", &_bfd_elf_large_com_section);
12454 asection _bfd_elf_large_com_section
12455   = BFD_FAKE_SECTION (_bfd_elf_large_com_section, &lcomm_sym,
12456                       "LARGE_COMMON", 0, SEC_IS_COMMON);
12457
12458 bfd_boolean
12459 _bfd_elf_final_write_processing (bfd *abfd)
12460 {
12461   Elf_Internal_Ehdr *i_ehdrp;   /* ELF file header, internal form.  */
12462
12463   i_ehdrp = elf_elfheader (abfd);
12464
12465   if (i_ehdrp->e_ident[EI_OSABI] == ELFOSABI_NONE)
12466     i_ehdrp->e_ident[EI_OSABI] = get_elf_backend_data (abfd)->elf_osabi;
12467
12468   /* Set the osabi field to ELFOSABI_GNU if the binary contains
12469      SHF_GNU_MBIND sections or symbols of STT_GNU_IFUNC type or
12470      STB_GNU_UNIQUE binding.  */
12471   if (elf_tdata (abfd)->has_gnu_osabi != 0)
12472     {
12473       if (i_ehdrp->e_ident[EI_OSABI] == ELFOSABI_NONE)
12474         i_ehdrp->e_ident[EI_OSABI] = ELFOSABI_GNU;
12475       else if (i_ehdrp->e_ident[EI_OSABI] != ELFOSABI_GNU
12476                && i_ehdrp->e_ident[EI_OSABI] != ELFOSABI_FREEBSD)
12477         {
12478           if (elf_tdata (abfd)->has_gnu_osabi & elf_gnu_osabi_mbind)
12479             _bfd_error_handler (_("GNU_MBIND section is unsupported"));
12480           if (elf_tdata (abfd)->has_gnu_osabi & elf_gnu_osabi_ifunc)
12481             _bfd_error_handler (_("symbol type STT_GNU_IFUNC is unsupported"));
12482           if (elf_tdata (abfd)->has_gnu_osabi & elf_gnu_osabi_unique)
12483             _bfd_error_handler (_("symbol binding STB_GNU_UNIQUE is unsupported"));
12484           bfd_set_error (bfd_error_sorry);
12485           return FALSE;
12486         }
12487     }
12488   return TRUE;
12489 }
12490
12491
12492 /* Return TRUE for ELF symbol types that represent functions.
12493    This is the default version of this function, which is sufficient for
12494    most targets.  It returns true if TYPE is STT_FUNC or STT_GNU_IFUNC.  */
12495
12496 bfd_boolean
12497 _bfd_elf_is_function_type (unsigned int type)
12498 {
12499   return (type == STT_FUNC
12500           || type == STT_GNU_IFUNC);
12501 }
12502
12503 /* If the ELF symbol SYM might be a function in SEC, return the
12504    function size and set *CODE_OFF to the function's entry point,
12505    otherwise return zero.  */
12506
12507 bfd_size_type
12508 _bfd_elf_maybe_function_sym (const asymbol *sym, asection *sec,
12509                              bfd_vma *code_off)
12510 {
12511   bfd_size_type size;
12512
12513   if ((sym->flags & (BSF_SECTION_SYM | BSF_FILE | BSF_OBJECT
12514                      | BSF_THREAD_LOCAL | BSF_RELC | BSF_SRELC)) != 0
12515       || sym->section != sec)
12516     return 0;
12517
12518   *code_off = sym->value;
12519   size = 0;
12520   if (!(sym->flags & BSF_SYNTHETIC))
12521     size = ((elf_symbol_type *) sym)->internal_elf_sym.st_size;
12522   if (size == 0)
12523     size = 1;
12524   return size;
12525 }
12526
12527 /* Set to non-zero to enable some debug messages.  */
12528 #define DEBUG_SECONDARY_RELOCS   0
12529
12530 /* An internal-to-the-bfd-library only section type
12531    used to indicate a cached secondary reloc section.  */
12532 #define SHT_SECONDARY_RELOC      (SHT_LOOS + SHT_RELA)
12533
12534 /* Create a BFD section to hold a secondary reloc section.  */
12535
12536 bfd_boolean
12537 _bfd_elf_init_secondary_reloc_section (bfd * abfd,
12538                                        Elf_Internal_Shdr *hdr,
12539                                        const char * name,
12540                                        unsigned int shindex)
12541 {
12542   /* We only support RELA secondary relocs.  */
12543   if (hdr->sh_type != SHT_RELA)
12544     return FALSE;
12545
12546 #if DEBUG_SECONDARY_RELOCS
12547   fprintf (stderr, "secondary reloc section %s encountered\n", name);
12548 #endif
12549   hdr->sh_type = SHT_SECONDARY_RELOC;
12550   return _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
12551 }
12552
12553 /* Read in any secondary relocs associated with SEC.  */
12554
12555 bfd_boolean
12556 _bfd_elf_slurp_secondary_reloc_section (bfd *      abfd,
12557                                         asection * sec,
12558                                         asymbol ** symbols)
12559 {
12560   const struct elf_backend_data * const ebd = get_elf_backend_data (abfd);
12561   asection * relsec;
12562   bfd_boolean result = TRUE;
12563   bfd_vma (*r_sym) (bfd_vma);
12564
12565 #if BFD_DEFAULT_TARGET_SIZE > 32
12566   if (bfd_arch_bits_per_address (abfd) != 32)
12567     r_sym = elf64_r_sym;
12568   else
12569 #endif
12570     r_sym = elf32_r_sym;
12571   
12572   /* Discover if there are any secondary reloc sections
12573      associated with SEC.  */
12574   for (relsec = abfd->sections; relsec != NULL; relsec = relsec->next)
12575     {
12576       Elf_Internal_Shdr * hdr = & elf_section_data (relsec)->this_hdr;
12577
12578       if (hdr->sh_type == SHT_SECONDARY_RELOC
12579           && hdr->sh_info == (unsigned) elf_section_data (sec)->this_idx
12580           && (hdr->sh_entsize == ebd->s->sizeof_rel
12581               || hdr->sh_entsize == ebd->s->sizeof_rela))
12582         {
12583           bfd_byte * native_relocs;
12584           bfd_byte * native_reloc;
12585           arelent * internal_relocs;
12586           arelent * internal_reloc;
12587           unsigned int i;
12588           unsigned int entsize;
12589           unsigned int symcount;
12590           unsigned int reloc_count;
12591           size_t amt;
12592
12593           if (ebd->elf_info_to_howto == NULL)
12594             return FALSE;
12595
12596 #if DEBUG_SECONDARY_RELOCS
12597           fprintf (stderr, "read secondary relocs for %s from %s\n",
12598                    sec->name, relsec->name);
12599 #endif
12600           entsize = hdr->sh_entsize;
12601
12602           native_relocs = bfd_malloc (hdr->sh_size);
12603           if (native_relocs == NULL)
12604             {
12605               result = FALSE;
12606               continue;
12607             }
12608
12609           reloc_count = NUM_SHDR_ENTRIES (hdr);
12610           if (_bfd_mul_overflow (reloc_count, sizeof (arelent), & amt))
12611             {
12612               free (native_relocs);
12613               bfd_set_error (bfd_error_file_too_big);
12614               result = FALSE;
12615               continue;
12616             }
12617
12618           internal_relocs = (arelent *) bfd_alloc (abfd, amt);
12619           if (internal_relocs == NULL)
12620             {
12621               free (native_relocs);
12622               result = FALSE;
12623               continue;
12624             }
12625
12626           if (bfd_seek (abfd, hdr->sh_offset, SEEK_SET) != 0
12627               || (bfd_bread (native_relocs, hdr->sh_size, abfd)
12628                   != hdr->sh_size))
12629             {
12630               free (native_relocs);
12631               /* The internal_relocs will be freed when
12632                  the memory for the bfd is released.  */
12633               result = FALSE;
12634               continue;
12635             }
12636
12637           symcount = bfd_get_symcount (abfd);
12638
12639           for (i = 0, internal_reloc = internal_relocs,
12640                  native_reloc = native_relocs;
12641                i < reloc_count;
12642                i++, internal_reloc++, native_reloc += entsize)
12643             {
12644               bfd_boolean res;
12645               Elf_Internal_Rela rela;
12646
12647               ebd->s->swap_reloca_in (abfd, native_reloc, & rela);
12648
12649               /* The address of an ELF reloc is section relative for an object
12650                  file, and absolute for an executable file or shared library.
12651                  The address of a normal BFD reloc is always section relative,
12652                  and the address of a dynamic reloc is absolute..  */
12653               if ((abfd->flags & (EXEC_P | DYNAMIC)) == 0)
12654                 internal_reloc->address = rela.r_offset;
12655               else
12656                 internal_reloc->address = rela.r_offset - sec->vma;
12657
12658               if (r_sym (rela.r_info) == STN_UNDEF)
12659                 {
12660                   /* FIXME: This and the error case below mean that we
12661                      have a symbol on relocs that is not elf_symbol_type.  */
12662                   internal_reloc->sym_ptr_ptr =
12663                     bfd_abs_section_ptr->symbol_ptr_ptr;
12664                 }
12665               else if (r_sym (rela.r_info) > symcount)
12666                 {
12667                   _bfd_error_handler
12668                     /* xgettext:c-format */
12669                     (_("%pB(%pA): relocation %d has invalid symbol index %ld"),
12670                      abfd, sec, i, (long) r_sym (rela.r_info));
12671                   bfd_set_error (bfd_error_bad_value);
12672                   internal_reloc->sym_ptr_ptr =
12673                     bfd_abs_section_ptr->symbol_ptr_ptr;
12674                   result = FALSE;
12675                 }
12676               else
12677                 {
12678                   asymbol **ps;
12679
12680                   ps = symbols + r_sym (rela.r_info) - 1;
12681
12682                   internal_reloc->sym_ptr_ptr = ps;
12683                   /* Make sure that this symbol is not removed by strip.  */
12684                   (*ps)->flags |= BSF_KEEP;
12685                 }
12686
12687               internal_reloc->addend = rela.r_addend;
12688
12689               res = ebd->elf_info_to_howto (abfd, internal_reloc, & rela);
12690               if (! res || internal_reloc->howto == NULL)
12691                 {
12692 #if DEBUG_SECONDARY_RELOCS
12693                   fprintf (stderr, "there is no howto associated with reloc %lx\n",
12694                            rela.r_info);
12695 #endif
12696                   result = FALSE;
12697                 }
12698             }
12699
12700           free (native_relocs);
12701           /* Store the internal relocs.  */
12702           elf_section_data (relsec)->sec_info = internal_relocs;
12703         }
12704     }
12705
12706   return result;
12707 }
12708
12709 /* Set the ELF section header fields of an output secondary reloc section.  */
12710
12711 bfd_boolean
12712 _bfd_elf_copy_special_section_fields (const bfd *   ibfd ATTRIBUTE_UNUSED,
12713                                       bfd *         obfd ATTRIBUTE_UNUSED,
12714                                       const Elf_Internal_Shdr * isection,
12715                                       Elf_Internal_Shdr *       osection)
12716 {
12717   asection * isec;
12718   asection * osec;
12719   struct bfd_elf_section_data * esd;
12720
12721   if (isection == NULL)
12722     return FALSE;
12723
12724   if (isection->sh_type != SHT_SECONDARY_RELOC)
12725     return TRUE;
12726
12727   isec = isection->bfd_section;
12728   if (isec == NULL)
12729     return FALSE;
12730
12731   osec = osection->bfd_section;
12732   if (osec == NULL)
12733     return FALSE;
12734
12735   esd = elf_section_data (osec);
12736   BFD_ASSERT (esd->sec_info == NULL);
12737   esd->sec_info = elf_section_data (isec)->sec_info;
12738   osection->sh_type = SHT_RELA;
12739   osection->sh_link = elf_onesymtab (obfd);
12740   if (osection->sh_link == 0)
12741     {
12742       /* There is no symbol table - we are hosed...  */
12743       _bfd_error_handler
12744         /* xgettext:c-format */
12745         (_("%pB(%pA): link section cannot be set because the output file does not have a symbol table"),
12746         obfd, osec);
12747       bfd_set_error (bfd_error_bad_value);
12748       return FALSE;
12749     }
12750
12751   /* Find the output section that corresponds to the isection's sh_info link.  */
12752   if (isection->sh_info == 0
12753       || isection->sh_info >= elf_numsections (ibfd))
12754     {
12755       _bfd_error_handler
12756         /* xgettext:c-format */
12757         (_("%pB(%pA): info section index is invalid"),
12758         obfd, osec);
12759       bfd_set_error (bfd_error_bad_value);
12760       return FALSE;
12761     }
12762
12763   isection = elf_elfsections (ibfd)[isection->sh_info];
12764
12765   if (isection == NULL
12766       || isection->bfd_section == NULL
12767       || isection->bfd_section->output_section == NULL)
12768     {
12769       _bfd_error_handler
12770         /* xgettext:c-format */
12771         (_("%pB(%pA): info section index cannot be set because the section is not in the output"),
12772         obfd, osec);
12773       bfd_set_error (bfd_error_bad_value);
12774       return FALSE;
12775     }
12776
12777   esd = elf_section_data (isection->bfd_section->output_section);
12778   BFD_ASSERT (esd != NULL);
12779   osection->sh_info = esd->this_idx;
12780   esd->has_secondary_relocs = TRUE;
12781 #if DEBUG_SECONDARY_RELOCS
12782   fprintf (stderr, "update header of %s, sh_link = %u, sh_info = %u\n",
12783            osec->name, osection->sh_link, osection->sh_info);
12784   fprintf (stderr, "mark section %s as having secondary relocs\n",
12785            bfd_section_name (isection->bfd_section->output_section));
12786 #endif
12787
12788   return TRUE;
12789 }
12790
12791 /* Write out a secondary reloc section.
12792
12793    FIXME: Currently this function can result in a serious performance penalty
12794    for files with secondary relocs and lots of sections.  The proper way to
12795    fix this is for _bfd_elf_copy_special_section_fields() to chain secondary
12796    relocs together and then to have this function just walk that chain.  */
12797
12798 bfd_boolean
12799 _bfd_elf_write_secondary_reloc_section (bfd *abfd, asection *sec)
12800 {
12801   const struct elf_backend_data * const ebd = get_elf_backend_data (abfd);
12802   bfd_vma addr_offset;
12803   asection * relsec;
12804   bfd_vma (*r_info) (bfd_vma, bfd_vma);
12805   bfd_boolean result = TRUE;
12806
12807   if (sec == NULL)
12808     return FALSE;
12809
12810 #if BFD_DEFAULT_TARGET_SIZE > 32
12811   if (bfd_arch_bits_per_address (abfd) != 32)
12812     r_info = elf64_r_info;
12813   else
12814 #endif
12815     r_info = elf32_r_info;
12816
12817   /* The address of an ELF reloc is section relative for an object
12818      file, and absolute for an executable file or shared library.
12819      The address of a BFD reloc is always section relative.  */
12820   addr_offset = 0;
12821   if ((abfd->flags & (EXEC_P | DYNAMIC)) != 0)
12822     addr_offset = sec->vma;
12823
12824   /* Discover if there are any secondary reloc sections
12825      associated with SEC.  */
12826   for (relsec = abfd->sections; relsec != NULL; relsec = relsec->next)
12827     {
12828       const struct bfd_elf_section_data * const esd = elf_section_data (relsec);
12829       Elf_Internal_Shdr * const hdr = (Elf_Internal_Shdr *) & esd->this_hdr;
12830
12831       if (hdr->sh_type == SHT_RELA
12832           && hdr->sh_info == (unsigned) elf_section_data (sec)->this_idx)
12833         {
12834           asymbol *    last_sym;
12835           int          last_sym_idx;
12836           unsigned int reloc_count;
12837           unsigned int idx;
12838           arelent *    src_irel;
12839           bfd_byte *   dst_rela;
12840
12841           if (hdr->contents != NULL)
12842             {
12843               _bfd_error_handler
12844                 /* xgettext:c-format */
12845                 (_("%pB(%pA): error: secondary reloc section processed twice"),
12846                  abfd, relsec);
12847               bfd_set_error (bfd_error_bad_value);
12848               result = FALSE;
12849               continue;
12850             }
12851
12852           if (hdr->sh_entsize == 0)
12853             {
12854               _bfd_error_handler
12855                 /* xgettext:c-format */
12856                 (_("%pB(%pA): error: secondary reloc section has zero sized entries"),
12857                  abfd, relsec);
12858               bfd_set_error (bfd_error_bad_value);
12859               result = FALSE;
12860               continue;
12861             }
12862
12863           reloc_count = hdr->sh_size / hdr->sh_entsize;
12864           if (reloc_count <= 0)
12865             {
12866               _bfd_error_handler
12867                 /* xgettext:c-format */
12868                 (_("%pB(%pA): error: secondary reloc section is empty!"),
12869                  abfd, relsec);
12870               bfd_set_error (bfd_error_bad_value);
12871               result = FALSE;
12872               continue;
12873             }
12874
12875           hdr->contents = bfd_alloc (abfd, hdr->sh_size);
12876           if (hdr->contents == NULL)
12877             continue;
12878
12879 #if DEBUG_SECONDARY_RELOCS
12880           fprintf (stderr, "write %u secondary relocs for %s from %s\n",
12881                    reloc_count, sec->name, relsec->name);
12882 #endif
12883           last_sym = NULL;
12884           last_sym_idx = 0;
12885           dst_rela = hdr->contents;
12886           src_irel = (arelent *) esd->sec_info;
12887           if (src_irel == NULL)
12888             {
12889               _bfd_error_handler
12890                 /* xgettext:c-format */
12891                 (_("%pB(%pA): error: internal relocs missing for secondary reloc section"),
12892                  abfd, relsec);
12893               bfd_set_error (bfd_error_bad_value);
12894               result = FALSE;
12895               continue;
12896             }
12897
12898           for (idx = 0; idx < reloc_count; idx++, dst_rela += hdr->sh_entsize)
12899             {
12900               Elf_Internal_Rela src_rela;
12901               arelent *ptr;
12902               asymbol *sym;
12903               int n;
12904
12905               ptr = src_irel + idx;
12906               if (ptr == NULL)
12907                 {
12908                   _bfd_error_handler
12909                     /* xgettext:c-format */
12910                     (_("%pB(%pA): error: reloc table entry %u is empty"),
12911                      abfd, relsec, idx);
12912                   bfd_set_error (bfd_error_bad_value);
12913                   result = FALSE;
12914                   break;
12915                 }
12916
12917               if (ptr->sym_ptr_ptr == NULL)
12918                 {
12919                   /* FIXME: Is this an error ? */
12920                   n = 0;
12921                 }
12922               else
12923                 {
12924                   sym = *ptr->sym_ptr_ptr;
12925
12926                   if (sym == last_sym)
12927                     n = last_sym_idx;
12928                   else
12929                     {
12930                       n = _bfd_elf_symbol_from_bfd_symbol (abfd, & sym);
12931                       if (n < 0)
12932                         {
12933                           _bfd_error_handler
12934                             /* xgettext:c-format */
12935                             (_("%pB(%pA): error: secondary reloc %u references a missing symbol"),
12936                              abfd, relsec, idx);
12937                           bfd_set_error (bfd_error_bad_value);
12938                           result = FALSE;
12939                           n = 0;
12940                         }
12941
12942                       last_sym = sym;
12943                       last_sym_idx = n;
12944                     }
12945
12946                   if (sym->the_bfd != NULL
12947                       && sym->the_bfd->xvec != abfd->xvec
12948                       && ! _bfd_elf_validate_reloc (abfd, ptr))
12949                     {
12950                       _bfd_error_handler
12951                         /* xgettext:c-format */
12952                         (_("%pB(%pA): error: secondary reloc %u references a deleted symbol"),
12953                          abfd, relsec, idx);
12954                       bfd_set_error (bfd_error_bad_value);
12955                       result = FALSE;
12956                       n = 0;
12957                     }
12958                 }
12959
12960               src_rela.r_offset = ptr->address + addr_offset;
12961               if (ptr->howto == NULL)
12962                 {
12963                   _bfd_error_handler
12964                     /* xgettext:c-format */
12965                     (_("%pB(%pA): error: secondary reloc %u is of an unknown type"),
12966                      abfd, relsec, idx);
12967                   bfd_set_error (bfd_error_bad_value);
12968                   result = FALSE;
12969                   src_rela.r_info = r_info (0, 0);
12970                 }
12971               else
12972                 src_rela.r_info = r_info (n, ptr->howto->type);
12973               src_rela.r_addend = ptr->addend;
12974               ebd->s->swap_reloca_out (abfd, &src_rela, dst_rela);
12975             }
12976         }
12977     }
12978
12979   return result;
12980 }
This page took 0.768409 seconds and 4 git commands to generate.