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