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