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