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