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