f69abf221811af2b95c1497133c8cdf3d8a08366
[dragonfly.git] / contrib / gdb-7 / 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
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       static const struct
884         {
885           const char *name;
886           int len;
887         } debug_sections [] =
888         {
889           { STRING_COMMA_LEN ("debug") },       /* 'd' */
890           { NULL,                0  },  /* 'e' */
891           { NULL,                0  },  /* 'f' */
892           { STRING_COMMA_LEN ("gnu.linkonce.wi.") },    /* 'g' */
893           { NULL,                0  },  /* 'h' */
894           { NULL,                0  },  /* 'i' */
895           { NULL,                0  },  /* 'j' */
896           { NULL,                0  },  /* 'k' */
897           { STRING_COMMA_LEN ("line") },        /* 'l' */
898           { NULL,                0  },  /* 'm' */
899           { NULL,                0  },  /* 'n' */
900           { NULL,                0  },  /* 'o' */
901           { NULL,                0  },  /* 'p' */
902           { NULL,                0  },  /* 'q' */
903           { NULL,                0  },  /* 'r' */
904           { STRING_COMMA_LEN ("stab") },        /* 's' */
905           { NULL,                0  },  /* 't' */
906           { NULL,                0  },  /* 'u' */
907           { NULL,                0  },  /* 'v' */
908           { NULL,                0  },  /* 'w' */
909           { NULL,                0  },  /* 'x' */
910           { NULL,                0  },  /* 'y' */
911           { STRING_COMMA_LEN ("zdebug") }       /* 'z' */
912         };
913
914       if (name [0] == '.')
915         {
916           int i = name [1] - 'd';
917           if (i >= 0
918               && i < (int) ARRAY_SIZE (debug_sections)
919               && debug_sections [i].name != NULL
920               && strncmp (&name [1], debug_sections [i].name,
921                           debug_sections [i].len) == 0)
922             flags |= SEC_DEBUGGING;
923         }
924     }
925
926   /* As a GNU extension, if the name begins with .gnu.linkonce, we
927      only link a single copy of the section.  This is used to support
928      g++.  g++ will emit each template expansion in its own section.
929      The symbols will be defined as weak, so that multiple definitions
930      are permitted.  The GNU linker extension is to actually discard
931      all but one of the sections.  */
932   if (CONST_STRNEQ (name, ".gnu.linkonce")
933       && elf_next_in_group (newsect) == NULL)
934     flags |= SEC_LINK_ONCE | SEC_LINK_DUPLICATES_DISCARD;
935
936   bed = get_elf_backend_data (abfd);
937   if (bed->elf_backend_section_flags)
938     if (! bed->elf_backend_section_flags (&flags, hdr))
939       return FALSE;
940
941   if (! bfd_set_section_flags (abfd, newsect, flags))
942     return FALSE;
943
944   /* We do not parse the PT_NOTE segments as we are interested even in the
945      separate debug info files which may have the segments offsets corrupted.
946      PT_NOTEs from the core files are currently not parsed using BFD.  */
947   if (hdr->sh_type == SHT_NOTE)
948     {
949       bfd_byte *contents;
950
951       if (!bfd_malloc_and_get_section (abfd, newsect, &contents))
952         return FALSE;
953
954       elf_parse_notes (abfd, (char *) contents, hdr->sh_size, -1);
955       free (contents);
956     }
957
958   if ((flags & SEC_ALLOC) != 0)
959     {
960       Elf_Internal_Phdr *phdr;
961       unsigned int i, nload;
962
963       /* Some ELF linkers produce binaries with all the program header
964          p_paddr fields zero.  If we have such a binary with more than
965          one PT_LOAD header, then leave the section lma equal to vma
966          so that we don't create sections with overlapping lma.  */
967       phdr = elf_tdata (abfd)->phdr;
968       for (nload = 0, i = 0; i < elf_elfheader (abfd)->e_phnum; i++, phdr++)
969         if (phdr->p_paddr != 0)
970           break;
971         else if (phdr->p_type == PT_LOAD && phdr->p_memsz != 0)
972           ++nload;
973       if (i >= elf_elfheader (abfd)->e_phnum && nload > 1)
974         return TRUE;
975
976       phdr = elf_tdata (abfd)->phdr;
977       for (i = 0; i < elf_elfheader (abfd)->e_phnum; i++, phdr++)
978         {
979           if (phdr->p_type == PT_LOAD
980               && ELF_SECTION_IN_SEGMENT (hdr, phdr))
981             {
982               if ((flags & SEC_LOAD) == 0)
983                 newsect->lma = (phdr->p_paddr
984                                 + hdr->sh_addr - phdr->p_vaddr);
985               else
986                 /* We used to use the same adjustment for SEC_LOAD
987                    sections, but that doesn't work if the segment
988                    is packed with code from multiple VMAs.
989                    Instead we calculate the section LMA based on
990                    the segment LMA.  It is assumed that the
991                    segment will contain sections with contiguous
992                    LMAs, even if the VMAs are not.  */
993                 newsect->lma = (phdr->p_paddr
994                                 + hdr->sh_offset - phdr->p_offset);
995
996               /* With contiguous segments, we can't tell from file
997                  offsets whether a section with zero size should
998                  be placed at the end of one segment or the
999                  beginning of the next.  Decide based on vaddr.  */
1000               if (hdr->sh_addr >= phdr->p_vaddr
1001                   && (hdr->sh_addr + hdr->sh_size
1002                       <= phdr->p_vaddr + phdr->p_memsz))
1003                 break;
1004             }
1005         }
1006     }
1007
1008   /* Compress/decompress DWARF debug sections with names: .debug_* and
1009      .zdebug_*, after the section flags is set.  */
1010   if ((flags & SEC_DEBUGGING)
1011       && ((name[1] == 'd' && name[6] == '_')
1012           || (name[1] == 'z' && name[7] == '_')))
1013     {
1014       enum { nothing, compress, decompress } action = nothing;
1015       char *new_name;
1016
1017       if (bfd_is_section_compressed (abfd, newsect))
1018         {
1019           /* Compressed section.  Check if we should decompress.  */
1020           if ((abfd->flags & BFD_DECOMPRESS))
1021             action = decompress;
1022         }
1023       else
1024         {
1025           /* Normal section.  Check if we should compress.  */
1026           if ((abfd->flags & BFD_COMPRESS))
1027             action = compress;
1028         }
1029
1030       new_name = NULL;
1031       switch (action)
1032         {
1033         case nothing:
1034           break;
1035         case compress:
1036           if (!bfd_init_section_compress_status (abfd, newsect))
1037             {
1038               (*_bfd_error_handler)
1039                 (_("%B: unable to initialize commpress status for section %s"),
1040                  abfd, name);
1041               return FALSE;
1042             }
1043           if (name[1] != 'z')
1044             {
1045               unsigned int len = strlen (name);
1046
1047               new_name = bfd_alloc (abfd, len + 2);
1048               if (new_name == NULL)
1049                 return FALSE;
1050               new_name[0] = '.';
1051               new_name[1] = 'z';
1052               memcpy (new_name + 2, name + 1, len);
1053             }
1054           break;
1055         case decompress:
1056           if (!bfd_init_section_decompress_status (abfd, newsect))
1057             {
1058               (*_bfd_error_handler)
1059                 (_("%B: unable to initialize decommpress status for section %s"),
1060                  abfd, name);
1061               return FALSE;
1062             }
1063           if (name[1] == 'z')
1064             {
1065               unsigned int len = strlen (name);
1066
1067               new_name = bfd_alloc (abfd, len);
1068               if (new_name == NULL)
1069                 return FALSE;
1070               new_name[0] = '.';
1071               memcpy (new_name + 1, name + 2, len - 1);
1072             }
1073           break;
1074         }
1075       if (new_name != NULL)
1076         bfd_rename_section (abfd, newsect, new_name);
1077     }
1078
1079   return TRUE;
1080 }
1081
1082 const char *const bfd_elf_section_type_names[] = {
1083   "SHT_NULL", "SHT_PROGBITS", "SHT_SYMTAB", "SHT_STRTAB",
1084   "SHT_RELA", "SHT_HASH", "SHT_DYNAMIC", "SHT_NOTE",
1085   "SHT_NOBITS", "SHT_REL", "SHT_SHLIB", "SHT_DYNSYM",
1086 };
1087
1088 /* ELF relocs are against symbols.  If we are producing relocatable
1089    output, and the reloc is against an external symbol, and nothing
1090    has given us any additional addend, the resulting reloc will also
1091    be against the same symbol.  In such a case, we don't want to
1092    change anything about the way the reloc is handled, since it will
1093    all be done at final link time.  Rather than put special case code
1094    into bfd_perform_relocation, all the reloc types use this howto
1095    function.  It just short circuits the reloc if producing
1096    relocatable output against an external symbol.  */
1097
1098 bfd_reloc_status_type
1099 bfd_elf_generic_reloc (bfd *abfd ATTRIBUTE_UNUSED,
1100                        arelent *reloc_entry,
1101                        asymbol *symbol,
1102                        void *data ATTRIBUTE_UNUSED,
1103                        asection *input_section,
1104                        bfd *output_bfd,
1105                        char **error_message ATTRIBUTE_UNUSED)
1106 {
1107   if (output_bfd != NULL
1108       && (symbol->flags & BSF_SECTION_SYM) == 0
1109       && (! reloc_entry->howto->partial_inplace
1110           || reloc_entry->addend == 0))
1111     {
1112       reloc_entry->address += input_section->output_offset;
1113       return bfd_reloc_ok;
1114     }
1115
1116   return bfd_reloc_continue;
1117 }
1118 \f
1119 /* Copy the program header and other data from one object module to
1120    another.  */
1121
1122 bfd_boolean
1123 _bfd_elf_copy_private_bfd_data (bfd *ibfd, bfd *obfd)
1124 {
1125   if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
1126       || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
1127     return TRUE;
1128
1129   BFD_ASSERT (!elf_flags_init (obfd)
1130               || (elf_elfheader (obfd)->e_flags
1131                   == elf_elfheader (ibfd)->e_flags));
1132
1133   elf_gp (obfd) = elf_gp (ibfd);
1134   elf_elfheader (obfd)->e_flags = elf_elfheader (ibfd)->e_flags;
1135   elf_flags_init (obfd) = TRUE;
1136
1137   /* Copy object attributes.  */
1138   _bfd_elf_copy_obj_attributes (ibfd, obfd);
1139   return TRUE;
1140 }
1141
1142 static const char *
1143 get_segment_type (unsigned int p_type)
1144 {
1145   const char *pt;
1146   switch (p_type)
1147     {
1148     case PT_NULL: pt = "NULL"; break;
1149     case PT_LOAD: pt = "LOAD"; break;
1150     case PT_DYNAMIC: pt = "DYNAMIC"; break;
1151     case PT_INTERP: pt = "INTERP"; break;
1152     case PT_NOTE: pt = "NOTE"; break;
1153     case PT_SHLIB: pt = "SHLIB"; break;
1154     case PT_PHDR: pt = "PHDR"; break;
1155     case PT_TLS: pt = "TLS"; break;
1156     case PT_GNU_EH_FRAME: pt = "EH_FRAME"; break;
1157     case PT_GNU_STACK: pt = "STACK"; break;
1158     case PT_GNU_RELRO: pt = "RELRO"; break;
1159     default: pt = NULL; break;
1160     }
1161   return pt;
1162 }
1163
1164 /* Print out the program headers.  */
1165
1166 bfd_boolean
1167 _bfd_elf_print_private_bfd_data (bfd *abfd, void *farg)
1168 {
1169   FILE *f = (FILE *) farg;
1170   Elf_Internal_Phdr *p;
1171   asection *s;
1172   bfd_byte *dynbuf = NULL;
1173
1174   p = elf_tdata (abfd)->phdr;
1175   if (p != NULL)
1176     {
1177       unsigned int i, c;
1178
1179       fprintf (f, _("\nProgram Header:\n"));
1180       c = elf_elfheader (abfd)->e_phnum;
1181       for (i = 0; i < c; i++, p++)
1182         {
1183           const char *pt = get_segment_type (p->p_type);
1184           char buf[20];
1185
1186           if (pt == NULL)
1187             {
1188               sprintf (buf, "0x%lx", p->p_type);
1189               pt = buf;
1190             }
1191           fprintf (f, "%8s off    0x", pt);
1192           bfd_fprintf_vma (abfd, f, p->p_offset);
1193           fprintf (f, " vaddr 0x");
1194           bfd_fprintf_vma (abfd, f, p->p_vaddr);
1195           fprintf (f, " paddr 0x");
1196           bfd_fprintf_vma (abfd, f, p->p_paddr);
1197           fprintf (f, " align 2**%u\n", bfd_log2 (p->p_align));
1198           fprintf (f, "         filesz 0x");
1199           bfd_fprintf_vma (abfd, f, p->p_filesz);
1200           fprintf (f, " memsz 0x");
1201           bfd_fprintf_vma (abfd, f, p->p_memsz);
1202           fprintf (f, " flags %c%c%c",
1203                    (p->p_flags & PF_R) != 0 ? 'r' : '-',
1204                    (p->p_flags & PF_W) != 0 ? 'w' : '-',
1205                    (p->p_flags & PF_X) != 0 ? 'x' : '-');
1206           if ((p->p_flags &~ (unsigned) (PF_R | PF_W | PF_X)) != 0)
1207             fprintf (f, " %lx", p->p_flags &~ (unsigned) (PF_R | PF_W | PF_X));
1208           fprintf (f, "\n");
1209         }
1210     }
1211
1212   s = bfd_get_section_by_name (abfd, ".dynamic");
1213   if (s != NULL)
1214     {
1215       unsigned int elfsec;
1216       unsigned long shlink;
1217       bfd_byte *extdyn, *extdynend;
1218       size_t extdynsize;
1219       void (*swap_dyn_in) (bfd *, const void *, Elf_Internal_Dyn *);
1220
1221       fprintf (f, _("\nDynamic Section:\n"));
1222
1223       if (!bfd_malloc_and_get_section (abfd, s, &dynbuf))
1224         goto error_return;
1225
1226       elfsec = _bfd_elf_section_from_bfd_section (abfd, s);
1227       if (elfsec == SHN_BAD)
1228         goto error_return;
1229       shlink = elf_elfsections (abfd)[elfsec]->sh_link;
1230
1231       extdynsize = get_elf_backend_data (abfd)->s->sizeof_dyn;
1232       swap_dyn_in = get_elf_backend_data (abfd)->s->swap_dyn_in;
1233
1234       extdyn = dynbuf;
1235       extdynend = extdyn + s->size;
1236       for (; extdyn < extdynend; extdyn += extdynsize)
1237         {
1238           Elf_Internal_Dyn dyn;
1239           const char *name = "";
1240           char ab[20];
1241           bfd_boolean stringp;
1242           const struct elf_backend_data *bed = get_elf_backend_data (abfd);
1243
1244           (*swap_dyn_in) (abfd, extdyn, &dyn);
1245
1246           if (dyn.d_tag == DT_NULL)
1247             break;
1248
1249           stringp = FALSE;
1250           switch (dyn.d_tag)
1251             {
1252             default:
1253               if (bed->elf_backend_get_target_dtag)
1254                 name = (*bed->elf_backend_get_target_dtag) (dyn.d_tag);
1255
1256               if (!strcmp (name, ""))
1257                 {
1258                   sprintf (ab, "0x%lx", (unsigned long) dyn.d_tag);
1259                   name = ab;
1260                 }
1261               break;
1262
1263             case DT_NEEDED: name = "NEEDED"; stringp = TRUE; break;
1264             case DT_PLTRELSZ: name = "PLTRELSZ"; break;
1265             case DT_PLTGOT: name = "PLTGOT"; break;
1266             case DT_HASH: name = "HASH"; break;
1267             case DT_STRTAB: name = "STRTAB"; break;
1268             case DT_SYMTAB: name = "SYMTAB"; break;
1269             case DT_RELA: name = "RELA"; break;
1270             case DT_RELASZ: name = "RELASZ"; break;
1271             case DT_RELAENT: name = "RELAENT"; break;
1272             case DT_STRSZ: name = "STRSZ"; break;
1273             case DT_SYMENT: name = "SYMENT"; break;
1274             case DT_INIT: name = "INIT"; break;
1275             case DT_FINI: name = "FINI"; break;
1276             case DT_SONAME: name = "SONAME"; stringp = TRUE; break;
1277             case DT_RPATH: name = "RPATH"; stringp = TRUE; break;
1278             case DT_SYMBOLIC: name = "SYMBOLIC"; break;
1279             case DT_REL: name = "REL"; break;
1280             case DT_RELSZ: name = "RELSZ"; break;
1281             case DT_RELENT: name = "RELENT"; break;
1282             case DT_PLTREL: name = "PLTREL"; break;
1283             case DT_DEBUG: name = "DEBUG"; break;
1284             case DT_TEXTREL: name = "TEXTREL"; break;
1285             case DT_JMPREL: name = "JMPREL"; break;
1286             case DT_BIND_NOW: name = "BIND_NOW"; break;
1287             case DT_INIT_ARRAY: name = "INIT_ARRAY"; break;
1288             case DT_FINI_ARRAY: name = "FINI_ARRAY"; break;
1289             case DT_INIT_ARRAYSZ: name = "INIT_ARRAYSZ"; break;
1290             case DT_FINI_ARRAYSZ: name = "FINI_ARRAYSZ"; break;
1291             case DT_RUNPATH: name = "RUNPATH"; stringp = TRUE; break;
1292             case DT_FLAGS: name = "FLAGS"; break;
1293             case DT_PREINIT_ARRAY: name = "PREINIT_ARRAY"; break;
1294             case DT_PREINIT_ARRAYSZ: name = "PREINIT_ARRAYSZ"; break;
1295             case DT_CHECKSUM: name = "CHECKSUM"; break;
1296             case DT_PLTPADSZ: name = "PLTPADSZ"; break;
1297             case DT_MOVEENT: name = "MOVEENT"; break;
1298             case DT_MOVESZ: name = "MOVESZ"; break;
1299             case DT_FEATURE: name = "FEATURE"; break;
1300             case DT_POSFLAG_1: name = "POSFLAG_1"; break;
1301             case DT_SYMINSZ: name = "SYMINSZ"; break;
1302             case DT_SYMINENT: name = "SYMINENT"; break;
1303             case DT_CONFIG: name = "CONFIG"; stringp = TRUE; break;
1304             case DT_DEPAUDIT: name = "DEPAUDIT"; stringp = TRUE; break;
1305             case DT_AUDIT: name = "AUDIT"; stringp = TRUE; break;
1306             case DT_PLTPAD: name = "PLTPAD"; break;
1307             case DT_MOVETAB: name = "MOVETAB"; break;
1308             case DT_SYMINFO: name = "SYMINFO"; break;
1309             case DT_RELACOUNT: name = "RELACOUNT"; break;
1310             case DT_RELCOUNT: name = "RELCOUNT"; break;
1311             case DT_FLAGS_1: name = "FLAGS_1"; break;
1312             case DT_VERSYM: name = "VERSYM"; break;
1313             case DT_VERDEF: name = "VERDEF"; break;
1314             case DT_VERDEFNUM: name = "VERDEFNUM"; break;
1315             case DT_VERNEED: name = "VERNEED"; break;
1316             case DT_VERNEEDNUM: name = "VERNEEDNUM"; break;
1317             case DT_AUXILIARY: name = "AUXILIARY"; stringp = TRUE; break;
1318             case DT_USED: name = "USED"; break;
1319             case DT_FILTER: name = "FILTER"; stringp = TRUE; break;
1320             case DT_GNU_HASH: name = "GNU_HASH"; break;
1321             }
1322
1323           fprintf (f, "  %-20s ", name);
1324           if (! stringp)
1325             {
1326               fprintf (f, "0x");
1327               bfd_fprintf_vma (abfd, f, dyn.d_un.d_val);
1328             }
1329           else
1330             {
1331               const char *string;
1332               unsigned int tagv = dyn.d_un.d_val;
1333
1334               string = bfd_elf_string_from_elf_section (abfd, shlink, tagv);
1335               if (string == NULL)
1336                 goto error_return;
1337               fprintf (f, "%s", string);
1338             }
1339           fprintf (f, "\n");
1340         }
1341
1342       free (dynbuf);
1343       dynbuf = NULL;
1344     }
1345
1346   if ((elf_dynverdef (abfd) != 0 && elf_tdata (abfd)->verdef == NULL)
1347       || (elf_dynverref (abfd) != 0 && elf_tdata (abfd)->verref == NULL))
1348     {
1349       if (! _bfd_elf_slurp_version_tables (abfd, FALSE))
1350         return FALSE;
1351     }
1352
1353   if (elf_dynverdef (abfd) != 0)
1354     {
1355       Elf_Internal_Verdef *t;
1356
1357       fprintf (f, _("\nVersion definitions:\n"));
1358       for (t = elf_tdata (abfd)->verdef; t != NULL; t = t->vd_nextdef)
1359         {
1360           fprintf (f, "%d 0x%2.2x 0x%8.8lx %s\n", t->vd_ndx,
1361                    t->vd_flags, t->vd_hash,
1362                    t->vd_nodename ? t->vd_nodename : "<corrupt>");
1363           if (t->vd_auxptr != NULL && t->vd_auxptr->vda_nextptr != NULL)
1364             {
1365               Elf_Internal_Verdaux *a;
1366
1367               fprintf (f, "\t");
1368               for (a = t->vd_auxptr->vda_nextptr;
1369                    a != NULL;
1370                    a = a->vda_nextptr)
1371                 fprintf (f, "%s ",
1372                          a->vda_nodename ? a->vda_nodename : "<corrupt>");
1373               fprintf (f, "\n");
1374             }
1375         }
1376     }
1377
1378   if (elf_dynverref (abfd) != 0)
1379     {
1380       Elf_Internal_Verneed *t;
1381
1382       fprintf (f, _("\nVersion References:\n"));
1383       for (t = elf_tdata (abfd)->verref; t != NULL; t = t->vn_nextref)
1384         {
1385           Elf_Internal_Vernaux *a;
1386
1387           fprintf (f, _("  required from %s:\n"),
1388                    t->vn_filename ? t->vn_filename : "<corrupt>");
1389           for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr)
1390             fprintf (f, "    0x%8.8lx 0x%2.2x %2.2d %s\n", a->vna_hash,
1391                      a->vna_flags, a->vna_other,
1392                      a->vna_nodename ? a->vna_nodename : "<corrupt>");
1393         }
1394     }
1395
1396   return TRUE;
1397
1398  error_return:
1399   if (dynbuf != NULL)
1400     free (dynbuf);
1401   return FALSE;
1402 }
1403
1404 /* Display ELF-specific fields of a symbol.  */
1405
1406 void
1407 bfd_elf_print_symbol (bfd *abfd,
1408                       void *filep,
1409                       asymbol *symbol,
1410                       bfd_print_symbol_type how)
1411 {
1412   FILE *file = (FILE *) filep;
1413   switch (how)
1414     {
1415     case bfd_print_symbol_name:
1416       fprintf (file, "%s", symbol->name);
1417       break;
1418     case bfd_print_symbol_more:
1419       fprintf (file, "elf ");
1420       bfd_fprintf_vma (abfd, file, symbol->value);
1421       fprintf (file, " %lx", (unsigned long) symbol->flags);
1422       break;
1423     case bfd_print_symbol_all:
1424       {
1425         const char *section_name;
1426         const char *name = NULL;
1427         const struct elf_backend_data *bed;
1428         unsigned char st_other;
1429         bfd_vma val;
1430
1431         section_name = symbol->section ? symbol->section->name : "(*none*)";
1432
1433         bed = get_elf_backend_data (abfd);
1434         if (bed->elf_backend_print_symbol_all)
1435           name = (*bed->elf_backend_print_symbol_all) (abfd, filep, symbol);
1436
1437         if (name == NULL)
1438           {
1439             name = symbol->name;
1440             bfd_print_symbol_vandf (abfd, file, symbol);
1441           }
1442
1443         fprintf (file, " %s\t", section_name);
1444         /* Print the "other" value for a symbol.  For common symbols,
1445            we've already printed the size; now print the alignment.
1446            For other symbols, we have no specified alignment, and
1447            we've printed the address; now print the size.  */
1448         if (symbol->section && bfd_is_com_section (symbol->section))
1449           val = ((elf_symbol_type *) symbol)->internal_elf_sym.st_value;
1450         else
1451           val = ((elf_symbol_type *) symbol)->internal_elf_sym.st_size;
1452         bfd_fprintf_vma (abfd, file, val);
1453
1454         /* If we have version information, print it.  */
1455         if (elf_tdata (abfd)->dynversym_section != 0
1456             && (elf_tdata (abfd)->dynverdef_section != 0
1457                 || elf_tdata (abfd)->dynverref_section != 0))
1458           {
1459             unsigned int vernum;
1460             const char *version_string;
1461
1462             vernum = ((elf_symbol_type *) symbol)->version & VERSYM_VERSION;
1463
1464             if (vernum == 0)
1465               version_string = "";
1466             else if (vernum == 1)
1467               version_string = "Base";
1468             else if (vernum <= elf_tdata (abfd)->cverdefs)
1469               version_string =
1470                 elf_tdata (abfd)->verdef[vernum - 1].vd_nodename;
1471             else
1472               {
1473                 Elf_Internal_Verneed *t;
1474
1475                 version_string = "";
1476                 for (t = elf_tdata (abfd)->verref;
1477                      t != NULL;
1478                      t = t->vn_nextref)
1479                   {
1480                     Elf_Internal_Vernaux *a;
1481
1482                     for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr)
1483                       {
1484                         if (a->vna_other == vernum)
1485                           {
1486                             version_string = a->vna_nodename;
1487                             break;
1488                           }
1489                       }
1490                   }
1491               }
1492
1493             if ((((elf_symbol_type *) symbol)->version & VERSYM_HIDDEN) == 0)
1494               fprintf (file, "  %-11s", version_string);
1495             else
1496               {
1497                 int i;
1498
1499                 fprintf (file, " (%s)", version_string);
1500                 for (i = 10 - strlen (version_string); i > 0; --i)
1501                   putc (' ', file);
1502               }
1503           }
1504
1505         /* If the st_other field is not zero, print it.  */
1506         st_other = ((elf_symbol_type *) symbol)->internal_elf_sym.st_other;
1507
1508         switch (st_other)
1509           {
1510           case 0: break;
1511           case STV_INTERNAL:  fprintf (file, " .internal");  break;
1512           case STV_HIDDEN:    fprintf (file, " .hidden");    break;
1513           case STV_PROTECTED: fprintf (file, " .protected"); break;
1514           default:
1515             /* Some other non-defined flags are also present, so print
1516                everything hex.  */
1517             fprintf (file, " 0x%02x", (unsigned int) st_other);
1518           }
1519
1520         fprintf (file, " %s", name);
1521       }
1522       break;
1523     }
1524 }
1525
1526 /* Allocate an ELF string table--force the first byte to be zero.  */
1527
1528 struct bfd_strtab_hash *
1529 _bfd_elf_stringtab_init (void)
1530 {
1531   struct bfd_strtab_hash *ret;
1532
1533   ret = _bfd_stringtab_init ();
1534   if (ret != NULL)
1535     {
1536       bfd_size_type loc;
1537
1538       loc = _bfd_stringtab_add (ret, "", TRUE, FALSE);
1539       BFD_ASSERT (loc == 0 || loc == (bfd_size_type) -1);
1540       if (loc == (bfd_size_type) -1)
1541         {
1542           _bfd_stringtab_free (ret);
1543           ret = NULL;
1544         }
1545     }
1546   return ret;
1547 }
1548 \f
1549 /* ELF .o/exec file reading */
1550
1551 /* Create a new bfd section from an ELF section header.  */
1552
1553 bfd_boolean
1554 bfd_section_from_shdr (bfd *abfd, unsigned int shindex)
1555 {
1556   Elf_Internal_Shdr *hdr;
1557   Elf_Internal_Ehdr *ehdr;
1558   const struct elf_backend_data *bed;
1559   const char *name;
1560
1561   if (shindex >= elf_numsections (abfd))
1562     return FALSE;
1563
1564   hdr = elf_elfsections (abfd)[shindex];
1565   ehdr = elf_elfheader (abfd);
1566   name = bfd_elf_string_from_elf_section (abfd, ehdr->e_shstrndx,
1567                                           hdr->sh_name);
1568   if (name == NULL)
1569     return FALSE;
1570
1571   bed = get_elf_backend_data (abfd);
1572   switch (hdr->sh_type)
1573     {
1574     case SHT_NULL:
1575       /* Inactive section. Throw it away.  */
1576       return TRUE;
1577
1578     case SHT_PROGBITS:  /* Normal section with contents.  */
1579     case SHT_NOBITS:    /* .bss section.  */
1580     case SHT_HASH:      /* .hash section.  */
1581     case SHT_NOTE:      /* .note section.  */
1582     case SHT_INIT_ARRAY:        /* .init_array section.  */
1583     case SHT_FINI_ARRAY:        /* .fini_array section.  */
1584     case SHT_PREINIT_ARRAY:     /* .preinit_array section.  */
1585     case SHT_GNU_LIBLIST:       /* .gnu.liblist section.  */
1586     case SHT_GNU_HASH:          /* .gnu.hash section.  */
1587       return _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
1588
1589     case SHT_DYNAMIC:   /* Dynamic linking information.  */
1590       if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex))
1591         return FALSE;
1592       if (hdr->sh_link > elf_numsections (abfd))
1593         {
1594           /* PR 10478: Accept Solaris binaries with a sh_link
1595              field set to SHN_BEFORE or SHN_AFTER.  */
1596           switch (bfd_get_arch (abfd))
1597             {
1598             case bfd_arch_i386:
1599             case bfd_arch_sparc:
1600               if (hdr->sh_link == (SHN_LORESERVE & 0xffff) /* SHN_BEFORE */
1601                   || hdr->sh_link == ((SHN_LORESERVE + 1) & 0xffff) /* SHN_AFTER */)
1602                 break;
1603               /* Otherwise fall through.  */
1604             default:
1605               return FALSE;
1606             }
1607         }
1608       else if (elf_elfsections (abfd)[hdr->sh_link] == NULL)
1609         return FALSE;
1610       else if (elf_elfsections (abfd)[hdr->sh_link]->sh_type != SHT_STRTAB)
1611         {
1612           Elf_Internal_Shdr *dynsymhdr;
1613
1614           /* The shared libraries distributed with hpux11 have a bogus
1615              sh_link field for the ".dynamic" section.  Find the
1616              string table for the ".dynsym" section instead.  */
1617           if (elf_dynsymtab (abfd) != 0)
1618             {
1619               dynsymhdr = elf_elfsections (abfd)[elf_dynsymtab (abfd)];
1620               hdr->sh_link = dynsymhdr->sh_link;
1621             }
1622           else
1623             {
1624               unsigned int i, num_sec;
1625
1626               num_sec = elf_numsections (abfd);
1627               for (i = 1; i < num_sec; i++)
1628                 {
1629                   dynsymhdr = elf_elfsections (abfd)[i];
1630                   if (dynsymhdr->sh_type == SHT_DYNSYM)
1631                     {
1632                       hdr->sh_link = dynsymhdr->sh_link;
1633                       break;
1634                     }
1635                 }
1636             }
1637         }
1638       break;
1639
1640     case SHT_SYMTAB:            /* A symbol table */
1641       if (elf_onesymtab (abfd) == shindex)
1642         return TRUE;
1643
1644       if (hdr->sh_entsize != bed->s->sizeof_sym)
1645         return FALSE;
1646       if (hdr->sh_info * hdr->sh_entsize > hdr->sh_size)
1647         return FALSE;
1648       BFD_ASSERT (elf_onesymtab (abfd) == 0);
1649       elf_onesymtab (abfd) = shindex;
1650       elf_tdata (abfd)->symtab_hdr = *hdr;
1651       elf_elfsections (abfd)[shindex] = hdr = &elf_tdata (abfd)->symtab_hdr;
1652       abfd->flags |= HAS_SYMS;
1653
1654       /* Sometimes a shared object will map in the symbol table.  If
1655          SHF_ALLOC is set, and this is a shared object, then we also
1656          treat this section as a BFD section.  We can not base the
1657          decision purely on SHF_ALLOC, because that flag is sometimes
1658          set in a relocatable object file, which would confuse the
1659          linker.  */
1660       if ((hdr->sh_flags & SHF_ALLOC) != 0
1661           && (abfd->flags & DYNAMIC) != 0
1662           && ! _bfd_elf_make_section_from_shdr (abfd, hdr, name,
1663                                                 shindex))
1664         return FALSE;
1665
1666       /* Go looking for SHT_SYMTAB_SHNDX too, since if there is one we
1667          can't read symbols without that section loaded as well.  It
1668          is most likely specified by the next section header.  */
1669       if (elf_elfsections (abfd)[elf_symtab_shndx (abfd)]->sh_link != shindex)
1670         {
1671           unsigned int i, num_sec;
1672
1673           num_sec = elf_numsections (abfd);
1674           for (i = shindex + 1; i < num_sec; i++)
1675             {
1676               Elf_Internal_Shdr *hdr2 = elf_elfsections (abfd)[i];
1677               if (hdr2->sh_type == SHT_SYMTAB_SHNDX
1678                   && hdr2->sh_link == shindex)
1679                 break;
1680             }
1681           if (i == num_sec)
1682             for (i = 1; i < shindex; i++)
1683               {
1684                 Elf_Internal_Shdr *hdr2 = elf_elfsections (abfd)[i];
1685                 if (hdr2->sh_type == SHT_SYMTAB_SHNDX
1686                     && hdr2->sh_link == shindex)
1687                   break;
1688               }
1689           if (i != shindex)
1690             return bfd_section_from_shdr (abfd, i);
1691         }
1692       return TRUE;
1693
1694     case SHT_DYNSYM:            /* A dynamic symbol table */
1695       if (elf_dynsymtab (abfd) == shindex)
1696         return TRUE;
1697
1698       if (hdr->sh_entsize != bed->s->sizeof_sym)
1699         return FALSE;
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 *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   _bfd_elf_strtab_finalize (elf_shstrtab (abfd));
2998   t->shstrtab_hdr.sh_size = _bfd_elf_strtab_size (elf_shstrtab (abfd));
2999
3000   elf_numsections (abfd) = section_number;
3001   elf_elfheader (abfd)->e_shnum = section_number;
3002
3003   /* Set up the list of section header pointers, in agreement with the
3004      indices.  */
3005   i_shdrp = (Elf_Internal_Shdr **) bfd_zalloc2 (abfd, section_number,
3006                                                 sizeof (Elf_Internal_Shdr *));
3007   if (i_shdrp == NULL)
3008     return FALSE;
3009
3010   i_shdrp[0] = (Elf_Internal_Shdr *) bfd_zalloc (abfd,
3011                                                  sizeof (Elf_Internal_Shdr));
3012   if (i_shdrp[0] == NULL)
3013     {
3014       bfd_release (abfd, i_shdrp);
3015       return FALSE;
3016     }
3017
3018   elf_elfsections (abfd) = i_shdrp;
3019
3020   i_shdrp[t->shstrtab_section] = &t->shstrtab_hdr;
3021   if (need_symtab)
3022     {
3023       i_shdrp[t->symtab_section] = &t->symtab_hdr;
3024       if (elf_numsections (abfd) > (SHN_LORESERVE & 0xFFFF))
3025         {
3026           i_shdrp[t->symtab_shndx_section] = &t->symtab_shndx_hdr;
3027           t->symtab_shndx_hdr.sh_link = t->symtab_section;
3028         }
3029       i_shdrp[t->strtab_section] = &t->strtab_hdr;
3030       t->symtab_hdr.sh_link = t->strtab_section;
3031     }
3032
3033   for (sec = abfd->sections; sec; sec = sec->next)
3034     {
3035       asection *s;
3036       const char *name;
3037
3038       d = elf_section_data (sec);
3039
3040       i_shdrp[d->this_idx] = &d->this_hdr;
3041       if (d->rel.idx != 0)
3042         i_shdrp[d->rel.idx] = d->rel.hdr;
3043       if (d->rela.idx != 0)
3044         i_shdrp[d->rela.idx] = d->rela.hdr;
3045
3046       /* Fill in the sh_link and sh_info fields while we're at it.  */
3047
3048       /* sh_link of a reloc section is the section index of the symbol
3049          table.  sh_info is the section index of the section to which
3050          the relocation entries apply.  */
3051       if (d->rel.idx != 0)
3052         {
3053           d->rel.hdr->sh_link = t->symtab_section;
3054           d->rel.hdr->sh_info = d->this_idx;
3055         }
3056       if (d->rela.idx != 0)
3057         {
3058           d->rela.hdr->sh_link = t->symtab_section;
3059           d->rela.hdr->sh_info = d->this_idx;
3060         }
3061
3062       /* We need to set up sh_link for SHF_LINK_ORDER.  */
3063       if ((d->this_hdr.sh_flags & SHF_LINK_ORDER) != 0)
3064         {
3065           s = elf_linked_to_section (sec);
3066           if (s)
3067             {
3068               /* elf_linked_to_section points to the input section.  */
3069               if (link_info != NULL)
3070                 {
3071                   /* Check discarded linkonce section.  */
3072                   if (elf_discarded_section (s))
3073                     {
3074                       asection *kept;
3075                       (*_bfd_error_handler)
3076                         (_("%B: sh_link of section `%A' points to discarded section `%A' of `%B'"),
3077                          abfd, d->this_hdr.bfd_section,
3078                          s, s->owner);
3079                       /* Point to the kept section if it has the same
3080                          size as the discarded one.  */
3081                       kept = _bfd_elf_check_kept_section (s, link_info);
3082                       if (kept == NULL)
3083                         {
3084                           bfd_set_error (bfd_error_bad_value);
3085                           return FALSE;
3086                         }
3087                       s = kept;
3088                     }
3089
3090                   s = s->output_section;
3091                   BFD_ASSERT (s != NULL);
3092                 }
3093               else
3094                 {
3095                   /* Handle objcopy. */
3096                   if (s->output_section == NULL)
3097                     {
3098                       (*_bfd_error_handler)
3099                         (_("%B: sh_link of section `%A' points to removed section `%A' of `%B'"),
3100                          abfd, d->this_hdr.bfd_section, s, s->owner);
3101                       bfd_set_error (bfd_error_bad_value);
3102                       return FALSE;
3103                     }
3104                   s = s->output_section;
3105                 }
3106               d->this_hdr.sh_link = elf_section_data (s)->this_idx;
3107             }
3108           else
3109             {
3110               /* PR 290:
3111                  The Intel C compiler generates SHT_IA_64_UNWIND with
3112                  SHF_LINK_ORDER.  But it doesn't set the sh_link or
3113                  sh_info fields.  Hence we could get the situation
3114                  where s is NULL.  */
3115               const struct elf_backend_data *bed
3116                 = get_elf_backend_data (abfd);
3117               if (bed->link_order_error_handler)
3118                 bed->link_order_error_handler
3119                   (_("%B: warning: sh_link not set for section `%A'"),
3120                    abfd, sec);
3121             }
3122         }
3123
3124       switch (d->this_hdr.sh_type)
3125         {
3126         case SHT_REL:
3127         case SHT_RELA:
3128           /* A reloc section which we are treating as a normal BFD
3129              section.  sh_link is the section index of the symbol
3130              table.  sh_info is the section index of the section to
3131              which the relocation entries apply.  We assume that an
3132              allocated reloc section uses the dynamic symbol table.
3133              FIXME: How can we be sure?  */
3134           s = bfd_get_section_by_name (abfd, ".dynsym");
3135           if (s != NULL)
3136             d->this_hdr.sh_link = elf_section_data (s)->this_idx;
3137
3138           /* We look up the section the relocs apply to by name.  */
3139           name = sec->name;
3140           if (d->this_hdr.sh_type == SHT_REL)
3141             name += 4;
3142           else
3143             name += 5;
3144           s = bfd_get_section_by_name (abfd, name);
3145           if (s != NULL)
3146             d->this_hdr.sh_info = elf_section_data (s)->this_idx;
3147           break;
3148
3149         case SHT_STRTAB:
3150           /* We assume that a section named .stab*str is a stabs
3151              string section.  We look for a section with the same name
3152              but without the trailing ``str'', and set its sh_link
3153              field to point to this section.  */
3154           if (CONST_STRNEQ (sec->name, ".stab")
3155               && strcmp (sec->name + strlen (sec->name) - 3, "str") == 0)
3156             {
3157               size_t len;
3158               char *alc;
3159
3160               len = strlen (sec->name);
3161               alc = (char *) bfd_malloc (len - 2);
3162               if (alc == NULL)
3163                 return FALSE;
3164               memcpy (alc, sec->name, len - 3);
3165               alc[len - 3] = '\0';
3166               s = bfd_get_section_by_name (abfd, alc);
3167               free (alc);
3168               if (s != NULL)
3169                 {
3170                   elf_section_data (s)->this_hdr.sh_link = d->this_idx;
3171
3172                   /* This is a .stab section.  */
3173                   if (elf_section_data (s)->this_hdr.sh_entsize == 0)
3174                     elf_section_data (s)->this_hdr.sh_entsize
3175                       = 4 + 2 * bfd_get_arch_size (abfd) / 8;
3176                 }
3177             }
3178           break;
3179
3180         case SHT_DYNAMIC:
3181         case SHT_DYNSYM:
3182         case SHT_GNU_verneed:
3183         case SHT_GNU_verdef:
3184           /* sh_link is the section header index of the string table
3185              used for the dynamic entries, or the symbol table, or the
3186              version strings.  */
3187           s = bfd_get_section_by_name (abfd, ".dynstr");
3188           if (s != NULL)
3189             d->this_hdr.sh_link = elf_section_data (s)->this_idx;
3190           break;
3191
3192         case SHT_GNU_LIBLIST:
3193           /* sh_link is the section header index of the prelink library
3194              list used for the dynamic entries, or the symbol table, or
3195              the version strings.  */
3196           s = bfd_get_section_by_name (abfd, (sec->flags & SEC_ALLOC)
3197                                              ? ".dynstr" : ".gnu.libstr");
3198           if (s != NULL)
3199             d->this_hdr.sh_link = elf_section_data (s)->this_idx;
3200           break;
3201
3202         case SHT_HASH:
3203         case SHT_GNU_HASH:
3204         case SHT_GNU_versym:
3205           /* sh_link is the section header index of the symbol table
3206              this hash table or version table is for.  */
3207           s = bfd_get_section_by_name (abfd, ".dynsym");
3208           if (s != NULL)
3209             d->this_hdr.sh_link = elf_section_data (s)->this_idx;
3210           break;
3211
3212         case SHT_GROUP:
3213           d->this_hdr.sh_link = t->symtab_section;
3214         }
3215     }
3216
3217   for (secn = 1; secn < section_number; ++secn)
3218     if (i_shdrp[secn] == NULL)
3219       i_shdrp[secn] = i_shdrp[0];
3220     else
3221       i_shdrp[secn]->sh_name = _bfd_elf_strtab_offset (elf_shstrtab (abfd),
3222                                                        i_shdrp[secn]->sh_name);
3223   return TRUE;
3224 }
3225
3226 /* Map symbol from it's internal number to the external number, moving
3227    all local symbols to be at the head of the list.  */
3228
3229 static bfd_boolean
3230 sym_is_global (bfd *abfd, asymbol *sym)
3231 {
3232   /* If the backend has a special mapping, use it.  */
3233   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
3234   if (bed->elf_backend_sym_is_global)
3235     return (*bed->elf_backend_sym_is_global) (abfd, sym);
3236
3237   return ((sym->flags & (BSF_GLOBAL | BSF_WEAK | BSF_GNU_UNIQUE)) != 0
3238           || bfd_is_und_section (bfd_get_section (sym))
3239           || bfd_is_com_section (bfd_get_section (sym)));
3240 }
3241
3242 /* Don't output section symbols for sections that are not going to be
3243    output.  */
3244
3245 static bfd_boolean
3246 ignore_section_sym (bfd *abfd, asymbol *sym)
3247 {
3248   return ((sym->flags & BSF_SECTION_SYM) != 0
3249           && !(sym->section->owner == abfd
3250                || (sym->section->output_section->owner == abfd
3251                    && sym->section->output_offset == 0)));
3252 }
3253
3254 static bfd_boolean
3255 elf_map_symbols (bfd *abfd)
3256 {
3257   unsigned int symcount = bfd_get_symcount (abfd);
3258   asymbol **syms = bfd_get_outsymbols (abfd);
3259   asymbol **sect_syms;
3260   unsigned int num_locals = 0;
3261   unsigned int num_globals = 0;
3262   unsigned int num_locals2 = 0;
3263   unsigned int num_globals2 = 0;
3264   int max_index = 0;
3265   unsigned int idx;
3266   asection *asect;
3267   asymbol **new_syms;
3268
3269 #ifdef DEBUG
3270   fprintf (stderr, "elf_map_symbols\n");
3271   fflush (stderr);
3272 #endif
3273
3274   for (asect = abfd->sections; asect; asect = asect->next)
3275     {
3276       if (max_index < asect->index)
3277         max_index = asect->index;
3278     }
3279
3280   max_index++;
3281   sect_syms = (asymbol **) bfd_zalloc2 (abfd, max_index, sizeof (asymbol *));
3282   if (sect_syms == NULL)
3283     return FALSE;
3284   elf_section_syms (abfd) = sect_syms;
3285   elf_num_section_syms (abfd) = max_index;
3286
3287   /* Init sect_syms entries for any section symbols we have already
3288      decided to output.  */
3289   for (idx = 0; idx < symcount; idx++)
3290     {
3291       asymbol *sym = syms[idx];
3292
3293       if ((sym->flags & BSF_SECTION_SYM) != 0
3294           && sym->value == 0
3295           && !ignore_section_sym (abfd, sym))
3296         {
3297           asection *sec = sym->section;
3298
3299           if (sec->owner != abfd)
3300             sec = sec->output_section;
3301
3302           sect_syms[sec->index] = syms[idx];
3303         }
3304     }
3305
3306   /* Classify all of the symbols.  */
3307   for (idx = 0; idx < symcount; idx++)
3308     {
3309       if (ignore_section_sym (abfd, syms[idx]))
3310         continue;
3311       if (!sym_is_global (abfd, syms[idx]))
3312         num_locals++;
3313       else
3314         num_globals++;
3315     }
3316
3317   /* We will be adding a section symbol for each normal BFD section.  Most
3318      sections will already have a section symbol in outsymbols, but
3319      eg. SHT_GROUP sections will not, and we need the section symbol mapped
3320      at least in that case.  */
3321   for (asect = abfd->sections; asect; asect = asect->next)
3322     {
3323       if (sect_syms[asect->index] == NULL)
3324         {
3325           if (!sym_is_global (abfd, asect->symbol))
3326             num_locals++;
3327           else
3328             num_globals++;
3329         }
3330     }
3331
3332   /* Now sort the symbols so the local symbols are first.  */
3333   new_syms = (asymbol **) bfd_alloc2 (abfd, num_locals + num_globals,
3334                                       sizeof (asymbol *));
3335
3336   if (new_syms == NULL)
3337     return FALSE;
3338
3339   for (idx = 0; idx < symcount; idx++)
3340     {
3341       asymbol *sym = syms[idx];
3342       unsigned int i;
3343
3344       if (ignore_section_sym (abfd, sym))
3345         continue;
3346       if (!sym_is_global (abfd, sym))
3347         i = num_locals2++;
3348       else
3349         i = num_locals + num_globals2++;
3350       new_syms[i] = sym;
3351       sym->udata.i = i + 1;
3352     }
3353   for (asect = abfd->sections; asect; asect = asect->next)
3354     {
3355       if (sect_syms[asect->index] == NULL)
3356         {
3357           asymbol *sym = asect->symbol;
3358           unsigned int i;
3359
3360           sect_syms[asect->index] = sym;
3361           if (!sym_is_global (abfd, sym))
3362             i = num_locals2++;
3363           else
3364             i = num_locals + num_globals2++;
3365           new_syms[i] = sym;
3366           sym->udata.i = i + 1;
3367         }
3368     }
3369
3370   bfd_set_symtab (abfd, new_syms, num_locals + num_globals);
3371
3372   elf_num_locals (abfd) = num_locals;
3373   elf_num_globals (abfd) = num_globals;
3374   return TRUE;
3375 }
3376
3377 /* Align to the maximum file alignment that could be required for any
3378    ELF data structure.  */
3379
3380 static inline file_ptr
3381 align_file_position (file_ptr off, int align)
3382 {
3383   return (off + align - 1) & ~(align - 1);
3384 }
3385
3386 /* Assign a file position to a section, optionally aligning to the
3387    required section alignment.  */
3388
3389 file_ptr
3390 _bfd_elf_assign_file_position_for_section (Elf_Internal_Shdr *i_shdrp,
3391                                            file_ptr offset,
3392                                            bfd_boolean align)
3393 {
3394   if (align && i_shdrp->sh_addralign > 1)
3395     offset = BFD_ALIGN (offset, i_shdrp->sh_addralign);
3396   i_shdrp->sh_offset = offset;
3397   if (i_shdrp->bfd_section != NULL)
3398     i_shdrp->bfd_section->filepos = offset;
3399   if (i_shdrp->sh_type != SHT_NOBITS)
3400     offset += i_shdrp->sh_size;
3401   return offset;
3402 }
3403
3404 /* Compute the file positions we are going to put the sections at, and
3405    otherwise prepare to begin writing out the ELF file.  If LINK_INFO
3406    is not NULL, this is being called by the ELF backend linker.  */
3407
3408 bfd_boolean
3409 _bfd_elf_compute_section_file_positions (bfd *abfd,
3410                                          struct bfd_link_info *link_info)
3411 {
3412   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
3413   struct fake_section_arg fsargs;
3414   bfd_boolean failed;
3415   struct bfd_strtab_hash *strtab = NULL;
3416   Elf_Internal_Shdr *shstrtab_hdr;
3417   bfd_boolean need_symtab;
3418
3419   if (abfd->output_has_begun)
3420     return TRUE;
3421
3422   /* Do any elf backend specific processing first.  */
3423   if (bed->elf_backend_begin_write_processing)
3424     (*bed->elf_backend_begin_write_processing) (abfd, link_info);
3425
3426   if (! prep_headers (abfd))
3427     return FALSE;
3428
3429   /* Post process the headers if necessary.  */
3430   if (bed->elf_backend_post_process_headers)
3431     (*bed->elf_backend_post_process_headers) (abfd, link_info);
3432
3433   fsargs.failed = FALSE;
3434   fsargs.link_info = link_info;
3435   bfd_map_over_sections (abfd, elf_fake_sections, &fsargs);
3436   if (fsargs.failed)
3437     return FALSE;
3438
3439   if (!assign_section_numbers (abfd, link_info))
3440     return FALSE;
3441
3442   /* The backend linker builds symbol table information itself.  */
3443   need_symtab = (link_info == NULL
3444                  && (bfd_get_symcount (abfd) > 0
3445                      || ((abfd->flags & (EXEC_P | DYNAMIC | HAS_RELOC))
3446                          == HAS_RELOC)));
3447   if (need_symtab)
3448     {
3449       /* Non-zero if doing a relocatable link.  */
3450       int relocatable_p = ! (abfd->flags & (EXEC_P | DYNAMIC));
3451
3452       if (! swap_out_syms (abfd, &strtab, relocatable_p))
3453         return FALSE;
3454     }
3455
3456   failed = FALSE;
3457   if (link_info == NULL)
3458     {
3459       bfd_map_over_sections (abfd, bfd_elf_set_group_contents, &failed);
3460       if (failed)
3461         return FALSE;
3462     }
3463
3464   shstrtab_hdr = &elf_tdata (abfd)->shstrtab_hdr;
3465   /* sh_name was set in prep_headers.  */
3466   shstrtab_hdr->sh_type = SHT_STRTAB;
3467   shstrtab_hdr->sh_flags = 0;
3468   shstrtab_hdr->sh_addr = 0;
3469   shstrtab_hdr->sh_size = _bfd_elf_strtab_size (elf_shstrtab (abfd));
3470   shstrtab_hdr->sh_entsize = 0;
3471   shstrtab_hdr->sh_link = 0;
3472   shstrtab_hdr->sh_info = 0;
3473   /* sh_offset is set in assign_file_positions_except_relocs.  */
3474   shstrtab_hdr->sh_addralign = 1;
3475
3476   if (!assign_file_positions_except_relocs (abfd, link_info))
3477     return FALSE;
3478
3479   if (need_symtab)
3480     {
3481       file_ptr off;
3482       Elf_Internal_Shdr *hdr;
3483
3484       off = elf_tdata (abfd)->next_file_pos;
3485
3486       hdr = &elf_tdata (abfd)->symtab_hdr;
3487       off = _bfd_elf_assign_file_position_for_section (hdr, off, TRUE);
3488
3489       hdr = &elf_tdata (abfd)->symtab_shndx_hdr;
3490       if (hdr->sh_size != 0)
3491         off = _bfd_elf_assign_file_position_for_section (hdr, off, TRUE);
3492
3493       hdr = &elf_tdata (abfd)->strtab_hdr;
3494       off = _bfd_elf_assign_file_position_for_section (hdr, off, TRUE);
3495
3496       elf_tdata (abfd)->next_file_pos = off;
3497
3498       /* Now that we know where the .strtab section goes, write it
3499          out.  */
3500       if (bfd_seek (abfd, hdr->sh_offset, SEEK_SET) != 0
3501           || ! _bfd_stringtab_emit (abfd, strtab))
3502         return FALSE;
3503       _bfd_stringtab_free (strtab);
3504     }
3505
3506   abfd->output_has_begun = TRUE;
3507
3508   return TRUE;
3509 }
3510
3511 /* Make an initial estimate of the size of the program header.  If we
3512    get the number wrong here, we'll redo section placement.  */
3513
3514 static bfd_size_type
3515 get_program_header_size (bfd *abfd, struct bfd_link_info *info)
3516 {
3517   size_t segs;
3518   asection *s;
3519   const struct elf_backend_data *bed;
3520
3521   /* Assume we will need exactly two PT_LOAD segments: one for text
3522      and one for data.  */
3523   segs = 2;
3524
3525   s = bfd_get_section_by_name (abfd, ".interp");
3526   if (s != NULL && (s->flags & SEC_LOAD) != 0)
3527     {
3528       /* If we have a loadable interpreter section, we need a
3529          PT_INTERP segment.  In this case, assume we also need a
3530          PT_PHDR segment, although that may not be true for all
3531          targets.  */
3532       segs += 2;
3533     }
3534
3535   if (bfd_get_section_by_name (abfd, ".dynamic") != NULL)
3536     {
3537       /* We need a PT_DYNAMIC segment.  */
3538       ++segs;
3539     }
3540
3541   if (info != NULL && info->relro)
3542     {
3543       /* We need a PT_GNU_RELRO segment.  */
3544       ++segs;
3545     }
3546
3547   if (elf_tdata (abfd)->eh_frame_hdr)
3548     {
3549       /* We need a PT_GNU_EH_FRAME segment.  */
3550       ++segs;
3551     }
3552
3553   if (elf_tdata (abfd)->stack_flags)
3554     {
3555       /* We need a PT_GNU_STACK segment.  */
3556       ++segs;
3557     }
3558
3559   for (s = abfd->sections; s != NULL; s = s->next)
3560     {
3561       if ((s->flags & SEC_LOAD) != 0
3562           && CONST_STRNEQ (s->name, ".note"))
3563         {
3564           /* We need a PT_NOTE segment.  */
3565           ++segs;
3566           /* Try to create just one PT_NOTE segment
3567              for all adjacent loadable .note* sections.
3568              gABI requires that within a PT_NOTE segment
3569              (and also inside of each SHT_NOTE section)
3570              each note is padded to a multiple of 4 size,
3571              so we check whether the sections are correctly
3572              aligned.  */
3573           if (s->alignment_power == 2)
3574             while (s->next != NULL
3575                    && s->next->alignment_power == 2
3576                    && (s->next->flags & SEC_LOAD) != 0
3577                    && CONST_STRNEQ (s->next->name, ".note"))
3578               s = s->next;
3579         }
3580     }
3581
3582   for (s = abfd->sections; s != NULL; s = s->next)
3583     {
3584       if (s->flags & SEC_THREAD_LOCAL)
3585         {
3586           /* We need a PT_TLS segment.  */
3587           ++segs;
3588           break;
3589         }
3590     }
3591
3592   /* Let the backend count up any program headers it might need.  */
3593   bed = get_elf_backend_data (abfd);
3594   if (bed->elf_backend_additional_program_headers)
3595     {
3596       int a;
3597
3598       a = (*bed->elf_backend_additional_program_headers) (abfd, info);
3599       if (a == -1)
3600         abort ();
3601       segs += a;
3602     }
3603
3604   return segs * bed->s->sizeof_phdr;
3605 }
3606
3607 /* Find the segment that contains the output_section of section.  */
3608
3609 Elf_Internal_Phdr *
3610 _bfd_elf_find_segment_containing_section (bfd * abfd, asection * section)
3611 {
3612   struct elf_segment_map *m;
3613   Elf_Internal_Phdr *p;
3614
3615   for (m = elf_tdata (abfd)->segment_map,
3616          p = elf_tdata (abfd)->phdr;
3617        m != NULL;
3618        m = m->next, p++)
3619     {
3620       int i;
3621
3622       for (i = m->count - 1; i >= 0; i--)
3623         if (m->sections[i] == section)
3624           return p;
3625     }
3626
3627   return NULL;
3628 }
3629
3630 /* Create a mapping from a set of sections to a program segment.  */
3631
3632 static struct elf_segment_map *
3633 make_mapping (bfd *abfd,
3634               asection **sections,
3635               unsigned int from,
3636               unsigned int to,
3637               bfd_boolean phdr)
3638 {
3639   struct elf_segment_map *m;
3640   unsigned int i;
3641   asection **hdrpp;
3642   bfd_size_type amt;
3643
3644   amt = sizeof (struct elf_segment_map);
3645   amt += (to - from - 1) * sizeof (asection *);
3646   m = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
3647   if (m == NULL)
3648     return NULL;
3649   m->next = NULL;
3650   m->p_type = PT_LOAD;
3651   for (i = from, hdrpp = sections + from; i < to; i++, hdrpp++)
3652     m->sections[i - from] = *hdrpp;
3653   m->count = to - from;
3654
3655   if (from == 0 && phdr)
3656     {
3657       /* Include the headers in the first PT_LOAD segment.  */
3658       m->includes_filehdr = 1;
3659       m->includes_phdrs = 1;
3660     }
3661
3662   return m;
3663 }
3664
3665 /* Create the PT_DYNAMIC segment, which includes DYNSEC.  Returns NULL
3666    on failure.  */
3667
3668 struct elf_segment_map *
3669 _bfd_elf_make_dynamic_segment (bfd *abfd, asection *dynsec)
3670 {
3671   struct elf_segment_map *m;
3672
3673   m = (struct elf_segment_map *) bfd_zalloc (abfd,
3674                                              sizeof (struct elf_segment_map));
3675   if (m == NULL)
3676     return NULL;
3677   m->next = NULL;
3678   m->p_type = PT_DYNAMIC;
3679   m->count = 1;
3680   m->sections[0] = dynsec;
3681
3682   return m;
3683 }
3684
3685 /* Possibly add or remove segments from the segment map.  */
3686
3687 static bfd_boolean
3688 elf_modify_segment_map (bfd *abfd,
3689                         struct bfd_link_info *info,
3690                         bfd_boolean remove_empty_load)
3691 {
3692   struct elf_segment_map **m;
3693   const struct elf_backend_data *bed;
3694
3695   /* The placement algorithm assumes that non allocated sections are
3696      not in PT_LOAD segments.  We ensure this here by removing such
3697      sections from the segment map.  We also remove excluded
3698      sections.  Finally, any PT_LOAD segment without sections is
3699      removed.  */
3700   m = &elf_tdata (abfd)->segment_map;
3701   while (*m)
3702     {
3703       unsigned int i, new_count;
3704
3705       for (new_count = 0, i = 0; i < (*m)->count; i++)
3706         {
3707           if (((*m)->sections[i]->flags & SEC_EXCLUDE) == 0
3708               && (((*m)->sections[i]->flags & SEC_ALLOC) != 0
3709                   || (*m)->p_type != PT_LOAD))
3710             {
3711               (*m)->sections[new_count] = (*m)->sections[i];
3712               new_count++;
3713             }
3714         }
3715       (*m)->count = new_count;
3716
3717       if (remove_empty_load && (*m)->p_type == PT_LOAD && (*m)->count == 0)
3718         *m = (*m)->next;
3719       else
3720         m = &(*m)->next;
3721     }
3722
3723   bed = get_elf_backend_data (abfd);
3724   if (bed->elf_backend_modify_segment_map != NULL)
3725     {
3726       if (!(*bed->elf_backend_modify_segment_map) (abfd, info))
3727         return FALSE;
3728     }
3729
3730   return TRUE;
3731 }
3732
3733 /* Set up a mapping from BFD sections to program segments.  */
3734
3735 bfd_boolean
3736 _bfd_elf_map_sections_to_segments (bfd *abfd, struct bfd_link_info *info)
3737 {
3738   unsigned int count;
3739   struct elf_segment_map *m;
3740   asection **sections = NULL;
3741   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
3742   bfd_boolean no_user_phdrs;
3743
3744   no_user_phdrs = elf_tdata (abfd)->segment_map == NULL;
3745   if (no_user_phdrs && bfd_count_sections (abfd) != 0)
3746     {
3747       asection *s;
3748       unsigned int i;
3749       struct elf_segment_map *mfirst;
3750       struct elf_segment_map **pm;
3751       asection *last_hdr;
3752       bfd_vma last_size;
3753       unsigned int phdr_index;
3754       bfd_vma maxpagesize;
3755       asection **hdrpp;
3756       bfd_boolean phdr_in_segment = TRUE;
3757       bfd_boolean writable;
3758       int tls_count = 0;
3759       asection *first_tls = NULL;
3760       asection *dynsec, *eh_frame_hdr;
3761       bfd_size_type amt;
3762       bfd_vma addr_mask, wrap_to = 0;
3763
3764       /* Select the allocated sections, and sort them.  */
3765
3766       sections = (asection **) bfd_malloc2 (bfd_count_sections (abfd),
3767                                             sizeof (asection *));
3768       if (sections == NULL)
3769         goto error_return;
3770
3771       /* Calculate top address, avoiding undefined behaviour of shift
3772          left operator when shift count is equal to size of type
3773          being shifted.  */
3774       addr_mask = ((bfd_vma) 1 << (bfd_arch_bits_per_address (abfd) - 1)) - 1;
3775       addr_mask = (addr_mask << 1) + 1;
3776
3777       i = 0;
3778       for (s = abfd->sections; s != NULL; s = s->next)
3779         {
3780           if ((s->flags & SEC_ALLOC) != 0)
3781             {
3782               sections[i] = s;
3783               ++i;
3784               /* A wrapping section potentially clashes with header.  */
3785               if (((s->lma + s->size) & addr_mask) < (s->lma & addr_mask))
3786                 wrap_to = (s->lma + s->size) & addr_mask;
3787             }
3788         }
3789       BFD_ASSERT (i <= bfd_count_sections (abfd));
3790       count = i;
3791
3792       qsort (sections, (size_t) count, sizeof (asection *), elf_sort_sections);
3793
3794       /* Build the mapping.  */
3795
3796       mfirst = NULL;
3797       pm = &mfirst;
3798
3799       /* If we have a .interp section, then create a PT_PHDR segment for
3800          the program headers and a PT_INTERP segment for the .interp
3801          section.  */
3802       s = bfd_get_section_by_name (abfd, ".interp");
3803       if (s != NULL && (s->flags & SEC_LOAD) != 0)
3804         {
3805           amt = sizeof (struct elf_segment_map);
3806           m = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
3807           if (m == NULL)
3808             goto error_return;
3809           m->next = NULL;
3810           m->p_type = PT_PHDR;
3811           /* FIXME: UnixWare and Solaris set PF_X, Irix 5 does not.  */
3812           m->p_flags = PF_R | PF_X;
3813           m->p_flags_valid = 1;
3814           m->includes_phdrs = 1;
3815
3816           *pm = m;
3817           pm = &m->next;
3818
3819           amt = sizeof (struct elf_segment_map);
3820           m = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
3821           if (m == NULL)
3822             goto error_return;
3823           m->next = NULL;
3824           m->p_type = PT_INTERP;
3825           m->count = 1;
3826           m->sections[0] = s;
3827
3828           *pm = m;
3829           pm = &m->next;
3830         }
3831
3832       /* Look through the sections.  We put sections in the same program
3833          segment when the start of the second section can be placed within
3834          a few bytes of the end of the first section.  */
3835       last_hdr = NULL;
3836       last_size = 0;
3837       phdr_index = 0;
3838       maxpagesize = bed->maxpagesize;
3839       writable = FALSE;
3840       dynsec = bfd_get_section_by_name (abfd, ".dynamic");
3841       if (dynsec != NULL
3842           && (dynsec->flags & SEC_LOAD) == 0)
3843         dynsec = NULL;
3844
3845       /* Deal with -Ttext or something similar such that the first section
3846          is not adjacent to the program headers.  This is an
3847          approximation, since at this point we don't know exactly how many
3848          program headers we will need.  */
3849       if (count > 0)
3850         {
3851           bfd_size_type phdr_size = elf_tdata (abfd)->program_header_size;
3852
3853           if (phdr_size == (bfd_size_type) -1)
3854             phdr_size = get_program_header_size (abfd, info);
3855           if ((abfd->flags & D_PAGED) == 0
3856               || (sections[0]->lma & addr_mask) < phdr_size
3857               || ((sections[0]->lma & addr_mask) % maxpagesize
3858                   < phdr_size % maxpagesize)
3859               || (sections[0]->lma & addr_mask & -maxpagesize) < wrap_to)
3860             phdr_in_segment = FALSE;
3861         }
3862
3863       for (i = 0, hdrpp = sections; i < count; i++, hdrpp++)
3864         {
3865           asection *hdr;
3866           bfd_boolean new_segment;
3867
3868           hdr = *hdrpp;
3869
3870           /* See if this section and the last one will fit in the same
3871              segment.  */
3872
3873           if (last_hdr == NULL)
3874             {
3875               /* If we don't have a segment yet, then we don't need a new
3876                  one (we build the last one after this loop).  */
3877               new_segment = FALSE;
3878             }
3879           else if (last_hdr->lma - last_hdr->vma != hdr->lma - hdr->vma)
3880             {
3881               /* If this section has a different relation between the
3882                  virtual address and the load address, then we need a new
3883                  segment.  */
3884               new_segment = TRUE;
3885             }
3886           else if (hdr->lma < last_hdr->lma + last_size
3887                    || last_hdr->lma + last_size < last_hdr->lma)
3888             {
3889               /* If this section has a load address that makes it overlap
3890                  the previous section, then we need a new segment.  */
3891               new_segment = TRUE;
3892             }
3893           /* In the next test we have to be careful when last_hdr->lma is close
3894              to the end of the address space.  If the aligned address wraps
3895              around to the start of the address space, then there are no more
3896              pages left in memory and it is OK to assume that the current
3897              section can be included in the current segment.  */
3898           else if ((BFD_ALIGN (last_hdr->lma + last_size, maxpagesize) + maxpagesize
3899                     > last_hdr->lma)
3900                    && (BFD_ALIGN (last_hdr->lma + last_size, maxpagesize) + maxpagesize
3901                        <= hdr->lma))
3902             {
3903               /* If putting this section in this segment would force us to
3904                  skip a page in the segment, then we need a new segment.  */
3905               new_segment = TRUE;
3906             }
3907           else if ((last_hdr->flags & (SEC_LOAD | SEC_THREAD_LOCAL)) == 0
3908                    && (hdr->flags & (SEC_LOAD | SEC_THREAD_LOCAL)) != 0)
3909             {
3910               /* We don't want to put a loadable section after a
3911                  nonloadable section in the same segment.
3912                  Consider .tbss sections as loadable for this purpose.  */
3913               new_segment = TRUE;
3914             }
3915           else if ((abfd->flags & D_PAGED) == 0)
3916             {
3917               /* If the file is not demand paged, which means that we
3918                  don't require the sections to be correctly aligned in the
3919                  file, then there is no other reason for a new segment.  */
3920               new_segment = FALSE;
3921             }
3922           else if (! writable
3923                    && (hdr->flags & SEC_READONLY) == 0
3924                    && (((last_hdr->lma + last_size - 1) & -maxpagesize)
3925                        != (hdr->lma & -maxpagesize)))
3926             {
3927               /* We don't want to put a writable section in a read only
3928                  segment, unless they are on the same page in memory
3929                  anyhow.  We already know that the last section does not
3930                  bring us past the current section on the page, so the
3931                  only case in which the new section is not on the same
3932                  page as the previous section is when the previous section
3933                  ends precisely on a page boundary.  */
3934               new_segment = TRUE;
3935             }
3936           else
3937             {
3938               /* Otherwise, we can use the same segment.  */
3939               new_segment = FALSE;
3940             }
3941
3942           /* Allow interested parties a chance to override our decision.  */
3943           if (last_hdr != NULL
3944               && info != NULL
3945               && info->callbacks->override_segment_assignment != NULL)
3946             new_segment
3947               = info->callbacks->override_segment_assignment (info, abfd, hdr,
3948                                                               last_hdr,
3949                                                               new_segment);
3950
3951           if (! new_segment)
3952             {
3953               if ((hdr->flags & SEC_READONLY) == 0)
3954                 writable = TRUE;
3955               last_hdr = hdr;
3956               /* .tbss sections effectively have zero size.  */
3957               if ((hdr->flags & (SEC_THREAD_LOCAL | SEC_LOAD))
3958                   != SEC_THREAD_LOCAL)
3959                 last_size = hdr->size;
3960               else
3961                 last_size = 0;
3962               continue;
3963             }
3964
3965           /* We need a new program segment.  We must create a new program
3966              header holding all the sections from phdr_index until hdr.  */
3967
3968           m = make_mapping (abfd, sections, phdr_index, i, phdr_in_segment);
3969           if (m == NULL)
3970             goto error_return;
3971
3972           *pm = m;
3973           pm = &m->next;
3974
3975           if ((hdr->flags & SEC_READONLY) == 0)
3976             writable = TRUE;
3977           else
3978             writable = FALSE;
3979
3980           last_hdr = hdr;
3981           /* .tbss sections effectively have zero size.  */
3982           if ((hdr->flags & (SEC_THREAD_LOCAL | SEC_LOAD)) != SEC_THREAD_LOCAL)
3983             last_size = hdr->size;
3984           else
3985             last_size = 0;
3986           phdr_index = i;
3987           phdr_in_segment = FALSE;
3988         }
3989
3990       /* Create a final PT_LOAD program segment.  */
3991       if (last_hdr != NULL)
3992         {
3993           m = make_mapping (abfd, sections, phdr_index, i, phdr_in_segment);
3994           if (m == NULL)
3995             goto error_return;
3996
3997           *pm = m;
3998           pm = &m->next;
3999         }
4000
4001       /* If there is a .dynamic section, throw in a PT_DYNAMIC segment.  */
4002       if (dynsec != NULL)
4003         {
4004           m = _bfd_elf_make_dynamic_segment (abfd, dynsec);
4005           if (m == NULL)
4006             goto error_return;
4007           *pm = m;
4008           pm = &m->next;
4009         }
4010
4011       /* For each batch of consecutive loadable .note sections,
4012          add a PT_NOTE segment.  We don't use bfd_get_section_by_name,
4013          because if we link together nonloadable .note sections and
4014          loadable .note sections, we will generate two .note sections
4015          in the output file.  FIXME: Using names for section types is
4016          bogus anyhow.  */
4017       for (s = abfd->sections; s != NULL; s = s->next)
4018         {
4019           if ((s->flags & SEC_LOAD) != 0
4020               && CONST_STRNEQ (s->name, ".note"))
4021             {
4022               asection *s2;
4023
4024               count = 1;
4025               amt = sizeof (struct elf_segment_map);
4026               if (s->alignment_power == 2)
4027                 for (s2 = s; s2->next != NULL; s2 = s2->next)
4028                   {
4029                     if (s2->next->alignment_power == 2
4030                         && (s2->next->flags & SEC_LOAD) != 0
4031                         && CONST_STRNEQ (s2->next->name, ".note")
4032                         && align_power (s2->lma + s2->size, 2)
4033                            == s2->next->lma)
4034                       count++;
4035                     else
4036                       break;
4037                   }
4038               amt += (count - 1) * sizeof (asection *);
4039               m = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
4040               if (m == NULL)
4041                 goto error_return;
4042               m->next = NULL;
4043               m->p_type = PT_NOTE;
4044               m->count = count;
4045               while (count > 1)
4046                 {
4047                   m->sections[m->count - count--] = s;
4048                   BFD_ASSERT ((s->flags & SEC_THREAD_LOCAL) == 0);
4049                   s = s->next;
4050                 }
4051               m->sections[m->count - 1] = s;
4052               BFD_ASSERT ((s->flags & SEC_THREAD_LOCAL) == 0);
4053               *pm = m;
4054               pm = &m->next;
4055             }
4056           if (s->flags & SEC_THREAD_LOCAL)
4057             {
4058               if (! tls_count)
4059                 first_tls = s;
4060               tls_count++;
4061             }
4062         }
4063
4064       /* If there are any SHF_TLS output sections, add PT_TLS segment.  */
4065       if (tls_count > 0)
4066         {
4067           amt = sizeof (struct elf_segment_map);
4068           amt += (tls_count - 1) * sizeof (asection *);
4069           m = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
4070           if (m == NULL)
4071             goto error_return;
4072           m->next = NULL;
4073           m->p_type = PT_TLS;
4074           m->count = tls_count;
4075           /* Mandated PF_R.  */
4076           m->p_flags = PF_R;
4077           m->p_flags_valid = 1;
4078           for (i = 0; i < (unsigned int) tls_count; ++i)
4079             {
4080               BFD_ASSERT (first_tls->flags & SEC_THREAD_LOCAL);
4081               m->sections[i] = first_tls;
4082               first_tls = first_tls->next;
4083             }
4084
4085           *pm = m;
4086           pm = &m->next;
4087         }
4088
4089       /* If there is a .eh_frame_hdr section, throw in a PT_GNU_EH_FRAME
4090          segment.  */
4091       eh_frame_hdr = elf_tdata (abfd)->eh_frame_hdr;
4092       if (eh_frame_hdr != NULL
4093           && (eh_frame_hdr->output_section->flags & SEC_LOAD) != 0)
4094         {
4095           amt = sizeof (struct elf_segment_map);
4096           m = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
4097           if (m == NULL)
4098             goto error_return;
4099           m->next = NULL;
4100           m->p_type = PT_GNU_EH_FRAME;
4101           m->count = 1;
4102           m->sections[0] = eh_frame_hdr->output_section;
4103
4104           *pm = m;
4105           pm = &m->next;
4106         }
4107
4108       if (elf_tdata (abfd)->stack_flags)
4109         {
4110           amt = sizeof (struct elf_segment_map);
4111           m = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
4112           if (m == NULL)
4113             goto error_return;
4114           m->next = NULL;
4115           m->p_type = PT_GNU_STACK;
4116           m->p_flags = elf_tdata (abfd)->stack_flags;
4117           m->p_flags_valid = 1;
4118
4119           *pm = m;
4120           pm = &m->next;
4121         }
4122
4123       if (info != NULL && info->relro)
4124         {
4125           for (m = mfirst; m != NULL; m = m->next)
4126             {
4127               if (m->p_type == PT_LOAD)
4128                 {
4129                   asection *last = m->sections[m->count - 1];
4130                   bfd_vma vaddr = m->sections[0]->vma;
4131                   bfd_vma filesz = last->vma - vaddr + last->size;
4132
4133                   if (vaddr < info->relro_end
4134                       && vaddr >= info->relro_start
4135                       && (vaddr + filesz) >= info->relro_end)
4136                     break;
4137                 }
4138               }
4139
4140           /* Make a PT_GNU_RELRO segment only when it isn't empty.  */
4141           if (m != NULL)
4142             {
4143               amt = sizeof (struct elf_segment_map);
4144               m = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
4145               if (m == NULL)
4146                 goto error_return;
4147               m->next = NULL;
4148               m->p_type = PT_GNU_RELRO;
4149               m->p_flags = PF_R;
4150               m->p_flags_valid = 1;
4151
4152               *pm = m;
4153               pm = &m->next;
4154             }
4155         }
4156
4157       free (sections);
4158       elf_tdata (abfd)->segment_map = mfirst;
4159     }
4160
4161   if (!elf_modify_segment_map (abfd, info, no_user_phdrs))
4162     return FALSE;
4163
4164   for (count = 0, m = elf_tdata (abfd)->segment_map; m != NULL; m = m->next)
4165     ++count;
4166   elf_tdata (abfd)->program_header_size = count * bed->s->sizeof_phdr;
4167
4168   return TRUE;
4169
4170  error_return:
4171   if (sections != NULL)
4172     free (sections);
4173   return FALSE;
4174 }
4175
4176 /* Sort sections by address.  */
4177
4178 static int
4179 elf_sort_sections (const void *arg1, const void *arg2)
4180 {
4181   const asection *sec1 = *(const asection **) arg1;
4182   const asection *sec2 = *(const asection **) arg2;
4183   bfd_size_type size1, size2;
4184
4185   /* Sort by LMA first, since this is the address used to
4186      place the section into a segment.  */
4187   if (sec1->lma < sec2->lma)
4188     return -1;
4189   else if (sec1->lma > sec2->lma)
4190     return 1;
4191
4192   /* Then sort by VMA.  Normally the LMA and the VMA will be
4193      the same, and this will do nothing.  */
4194   if (sec1->vma < sec2->vma)
4195     return -1;
4196   else if (sec1->vma > sec2->vma)
4197     return 1;
4198
4199   /* Put !SEC_LOAD sections after SEC_LOAD ones.  */
4200
4201 #define TOEND(x) (((x)->flags & (SEC_LOAD | SEC_THREAD_LOCAL)) == 0)
4202
4203   if (TOEND (sec1))
4204     {
4205       if (TOEND (sec2))
4206         {
4207           /* If the indicies are the same, do not return 0
4208              here, but continue to try the next comparison.  */
4209           if (sec1->target_index - sec2->target_index != 0)
4210             return sec1->target_index - sec2->target_index;
4211         }
4212       else
4213         return 1;
4214     }
4215   else if (TOEND (sec2))
4216     return -1;
4217
4218 #undef TOEND
4219
4220   /* Sort by size, to put zero sized sections
4221      before others at the same address.  */
4222
4223   size1 = (sec1->flags & SEC_LOAD) ? sec1->size : 0;
4224   size2 = (sec2->flags & SEC_LOAD) ? sec2->size : 0;
4225
4226   if (size1 < size2)
4227     return -1;
4228   if (size1 > size2)
4229     return 1;
4230
4231   return sec1->target_index - sec2->target_index;
4232 }
4233
4234 /* Ian Lance Taylor writes:
4235
4236    We shouldn't be using % with a negative signed number.  That's just
4237    not good.  We have to make sure either that the number is not
4238    negative, or that the number has an unsigned type.  When the types
4239    are all the same size they wind up as unsigned.  When file_ptr is a
4240    larger signed type, the arithmetic winds up as signed long long,
4241    which is wrong.
4242
4243    What we're trying to say here is something like ``increase OFF by
4244    the least amount that will cause it to be equal to the VMA modulo
4245    the page size.''  */
4246 /* In other words, something like:
4247
4248    vma_offset = m->sections[0]->vma % bed->maxpagesize;
4249    off_offset = off % bed->maxpagesize;
4250    if (vma_offset < off_offset)
4251      adjustment = vma_offset + bed->maxpagesize - off_offset;
4252    else
4253      adjustment = vma_offset - off_offset;
4254
4255    which can can be collapsed into the expression below.  */
4256
4257 static file_ptr
4258 vma_page_aligned_bias (bfd_vma vma, ufile_ptr off, bfd_vma maxpagesize)
4259 {
4260   return ((vma - off) % maxpagesize);
4261 }
4262
4263 static void
4264 print_segment_map (const struct elf_segment_map *m)
4265 {
4266   unsigned int j;
4267   const char *pt = get_segment_type (m->p_type);
4268   char buf[32];
4269
4270   if (pt == NULL)
4271     {
4272       if (m->p_type >= PT_LOPROC && m->p_type <= PT_HIPROC)
4273         sprintf (buf, "LOPROC+%7.7x",
4274                  (unsigned int) (m->p_type - PT_LOPROC));
4275       else if (m->p_type >= PT_LOOS && m->p_type <= PT_HIOS)
4276         sprintf (buf, "LOOS+%7.7x",
4277                  (unsigned int) (m->p_type - PT_LOOS));
4278       else
4279         snprintf (buf, sizeof (buf), "%8.8x",
4280                   (unsigned int) m->p_type);
4281       pt = buf;
4282     }
4283   fflush (stdout);
4284   fprintf (stderr, "%s:", pt);
4285   for (j = 0; j < m->count; j++)
4286     fprintf (stderr, " %s", m->sections [j]->name);
4287   putc ('\n',stderr);
4288   fflush (stderr);
4289 }
4290
4291 static bfd_boolean
4292 write_zeros (bfd *abfd, file_ptr pos, bfd_size_type len)
4293 {
4294   void *buf;
4295   bfd_boolean ret;
4296
4297   if (bfd_seek (abfd, pos, SEEK_SET) != 0)
4298     return FALSE;
4299   buf = bfd_zmalloc (len);
4300   if (buf == NULL)
4301     return FALSE;
4302   ret = bfd_bwrite (buf, len, abfd) == len;
4303   free (buf);
4304   return ret;
4305 }
4306
4307 /* Assign file positions to the sections based on the mapping from
4308    sections to segments.  This function also sets up some fields in
4309    the file header.  */
4310
4311 static bfd_boolean
4312 assign_file_positions_for_load_sections (bfd *abfd,
4313                                          struct bfd_link_info *link_info)
4314 {
4315   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
4316   struct elf_segment_map *m;
4317   Elf_Internal_Phdr *phdrs;
4318   Elf_Internal_Phdr *p;
4319   file_ptr off;
4320   bfd_size_type maxpagesize;
4321   unsigned int alloc;
4322   unsigned int i, j;
4323   bfd_vma header_pad = 0;
4324
4325   if (link_info == NULL
4326       && !_bfd_elf_map_sections_to_segments (abfd, link_info))
4327     return FALSE;
4328
4329   alloc = 0;
4330   for (m = elf_tdata (abfd)->segment_map; m != NULL; m = m->next)
4331     {
4332       ++alloc;
4333       if (m->header_size)
4334         header_pad = m->header_size;
4335     }
4336
4337   if (alloc)
4338     {
4339       elf_elfheader (abfd)->e_phoff = bed->s->sizeof_ehdr;
4340       elf_elfheader (abfd)->e_phentsize = bed->s->sizeof_phdr;
4341     }
4342   else
4343     {
4344       /* PR binutils/12467.  */
4345       elf_elfheader (abfd)->e_phoff = 0;
4346       elf_elfheader (abfd)->e_phentsize = 0;
4347     }
4348   
4349   elf_elfheader (abfd)->e_phnum = alloc;
4350
4351   if (elf_tdata (abfd)->program_header_size == (bfd_size_type) -1)
4352     elf_tdata (abfd)->program_header_size = alloc * bed->s->sizeof_phdr;
4353   else
4354     BFD_ASSERT (elf_tdata (abfd)->program_header_size
4355                 >= alloc * bed->s->sizeof_phdr);
4356
4357   if (alloc == 0)
4358     {
4359       elf_tdata (abfd)->next_file_pos = bed->s->sizeof_ehdr;
4360       return TRUE;
4361     }
4362
4363   /* We're writing the size in elf_tdata (abfd)->program_header_size,
4364      see assign_file_positions_except_relocs, so make sure we have
4365      that amount allocated, with trailing space cleared.
4366      The variable alloc contains the computed need, while elf_tdata
4367      (abfd)->program_header_size contains the size used for the
4368      layout.
4369      See ld/emultempl/elf-generic.em:gld${EMULATION_NAME}_map_segments
4370      where the layout is forced to according to a larger size in the
4371      last iterations for the testcase ld-elf/header.  */
4372   BFD_ASSERT (elf_tdata (abfd)->program_header_size % bed->s->sizeof_phdr
4373               == 0);
4374   phdrs = (Elf_Internal_Phdr *)
4375      bfd_zalloc2 (abfd,
4376                   (elf_tdata (abfd)->program_header_size / bed->s->sizeof_phdr),
4377                   sizeof (Elf_Internal_Phdr));
4378   elf_tdata (abfd)->phdr = phdrs;
4379   if (phdrs == NULL)
4380     return FALSE;
4381
4382   maxpagesize = 1;
4383   if ((abfd->flags & D_PAGED) != 0)
4384     maxpagesize = bed->maxpagesize;
4385
4386   off = bed->s->sizeof_ehdr;
4387   off += alloc * bed->s->sizeof_phdr;
4388   if (header_pad < (bfd_vma) off)
4389     header_pad = 0;
4390   else
4391     header_pad -= off;
4392   off += header_pad;
4393
4394   for (m = elf_tdata (abfd)->segment_map, p = phdrs, j = 0;
4395        m != NULL;
4396        m = m->next, p++, j++)
4397     {
4398       asection **secpp;
4399       bfd_vma off_adjust;
4400       bfd_boolean no_contents;
4401
4402       /* If elf_segment_map is not from map_sections_to_segments, the
4403          sections may not be correctly ordered.  NOTE: sorting should
4404          not be done to the PT_NOTE section of a corefile, which may
4405          contain several pseudo-sections artificially created by bfd.
4406          Sorting these pseudo-sections breaks things badly.  */
4407       if (m->count > 1
4408           && !(elf_elfheader (abfd)->e_type == ET_CORE
4409                && m->p_type == PT_NOTE))
4410         qsort (m->sections, (size_t) m->count, sizeof (asection *),
4411                elf_sort_sections);
4412
4413       /* An ELF segment (described by Elf_Internal_Phdr) may contain a
4414          number of sections with contents contributing to both p_filesz
4415          and p_memsz, followed by a number of sections with no contents
4416          that just contribute to p_memsz.  In this loop, OFF tracks next
4417          available file offset for PT_LOAD and PT_NOTE segments.  */
4418       p->p_type = m->p_type;
4419       p->p_flags = m->p_flags;
4420
4421       if (m->count == 0)
4422         p->p_vaddr = 0;
4423       else
4424         p->p_vaddr = m->sections[0]->vma - m->p_vaddr_offset;
4425
4426       if (m->p_paddr_valid)
4427         p->p_paddr = m->p_paddr;
4428       else if (m->count == 0)
4429         p->p_paddr = 0;
4430       else
4431         p->p_paddr = m->sections[0]->lma - m->p_vaddr_offset;
4432
4433       if (p->p_type == PT_LOAD
4434           && (abfd->flags & D_PAGED) != 0)
4435         {
4436           /* p_align in demand paged PT_LOAD segments effectively stores
4437              the maximum page size.  When copying an executable with
4438              objcopy, we set m->p_align from the input file.  Use this
4439              value for maxpagesize rather than bed->maxpagesize, which
4440              may be different.  Note that we use maxpagesize for PT_TLS
4441              segment alignment later in this function, so we are relying
4442              on at least one PT_LOAD segment appearing before a PT_TLS
4443              segment.  */
4444           if (m->p_align_valid)
4445             maxpagesize = m->p_align;
4446
4447           p->p_align = maxpagesize;
4448         }
4449       else if (m->p_align_valid)
4450         p->p_align = m->p_align;
4451       else if (m->count == 0)
4452         p->p_align = 1 << bed->s->log_file_align;
4453       else
4454         p->p_align = 0;
4455
4456       no_contents = FALSE;
4457       off_adjust = 0;
4458       if (p->p_type == PT_LOAD
4459           && m->count > 0)
4460         {
4461           bfd_size_type align;
4462           unsigned int align_power = 0;
4463
4464           if (m->p_align_valid)
4465             align = p->p_align;
4466           else
4467             {
4468               for (i = 0, secpp = m->sections; i < m->count; i++, secpp++)
4469                 {
4470                   unsigned int secalign;
4471
4472                   secalign = bfd_get_section_alignment (abfd, *secpp);
4473                   if (secalign > align_power)
4474                     align_power = secalign;
4475                 }
4476               align = (bfd_size_type) 1 << align_power;
4477               if (align < maxpagesize)
4478                 align = maxpagesize;
4479             }
4480
4481           for (i = 0; i < m->count; i++)
4482             if ((m->sections[i]->flags & (SEC_LOAD | SEC_HAS_CONTENTS)) == 0)
4483               /* If we aren't making room for this section, then
4484                  it must be SHT_NOBITS regardless of what we've
4485                  set via struct bfd_elf_special_section.  */
4486               elf_section_type (m->sections[i]) = SHT_NOBITS;
4487
4488           /* Find out whether this segment contains any loadable
4489              sections.  */
4490           no_contents = TRUE;
4491           for (i = 0; i < m->count; i++)
4492             if (elf_section_type (m->sections[i]) != SHT_NOBITS)
4493               {
4494                 no_contents = FALSE;
4495                 break;
4496               }
4497
4498           off_adjust = vma_page_aligned_bias (p->p_vaddr, off, align);
4499           off += off_adjust;
4500           if (no_contents)
4501             {
4502               /* We shouldn't need to align the segment on disk since
4503                  the segment doesn't need file space, but the gABI
4504                  arguably requires the alignment and glibc ld.so
4505                  checks it.  So to comply with the alignment
4506                  requirement but not waste file space, we adjust
4507                  p_offset for just this segment.  (OFF_ADJUST is
4508                  subtracted from OFF later.)  This may put p_offset
4509                  past the end of file, but that shouldn't matter.  */
4510             }
4511           else
4512             off_adjust = 0;
4513         }
4514       /* Make sure the .dynamic section is the first section in the
4515          PT_DYNAMIC segment.  */
4516       else if (p->p_type == PT_DYNAMIC
4517                && m->count > 1
4518                && strcmp (m->sections[0]->name, ".dynamic") != 0)
4519         {
4520           _bfd_error_handler
4521             (_("%B: The first section in the PT_DYNAMIC segment is not the .dynamic section"),
4522              abfd);
4523           bfd_set_error (bfd_error_bad_value);
4524           return FALSE;
4525         }
4526       /* Set the note section type to SHT_NOTE.  */
4527       else if (p->p_type == PT_NOTE)
4528         for (i = 0; i < m->count; i++)
4529           elf_section_type (m->sections[i]) = SHT_NOTE;
4530
4531       p->p_offset = 0;
4532       p->p_filesz = 0;
4533       p->p_memsz = 0;
4534
4535       if (m->includes_filehdr)
4536         {
4537           if (!m->p_flags_valid)
4538             p->p_flags |= PF_R;
4539           p->p_filesz = bed->s->sizeof_ehdr;
4540           p->p_memsz = bed->s->sizeof_ehdr;
4541           if (m->count > 0)
4542             {
4543               BFD_ASSERT (p->p_type == PT_LOAD);
4544
4545               if (p->p_vaddr < (bfd_vma) off)
4546                 {
4547                   (*_bfd_error_handler)
4548                     (_("%B: Not enough room for program headers, try linking with -N"),
4549                      abfd);
4550                   bfd_set_error (bfd_error_bad_value);
4551                   return FALSE;
4552                 }
4553
4554               p->p_vaddr -= off;
4555               if (!m->p_paddr_valid)
4556                 p->p_paddr -= off;
4557             }
4558         }
4559
4560       if (m->includes_phdrs)
4561         {
4562           if (!m->p_flags_valid)
4563             p->p_flags |= PF_R;
4564
4565           if (!m->includes_filehdr)
4566             {
4567               p->p_offset = bed->s->sizeof_ehdr;
4568
4569               if (m->count > 0)
4570                 {
4571                   BFD_ASSERT (p->p_type == PT_LOAD);
4572                   p->p_vaddr -= off - p->p_offset;
4573                   if (!m->p_paddr_valid)
4574                     p->p_paddr -= off - p->p_offset;
4575                 }
4576             }
4577
4578           p->p_filesz += alloc * bed->s->sizeof_phdr;
4579           p->p_memsz += alloc * bed->s->sizeof_phdr;
4580           if (m->count)
4581             {
4582               p->p_filesz += header_pad;
4583               p->p_memsz += header_pad;
4584             }
4585         }
4586
4587       if (p->p_type == PT_LOAD
4588           || (p->p_type == PT_NOTE && bfd_get_format (abfd) == bfd_core))
4589         {
4590           if (!m->includes_filehdr && !m->includes_phdrs)
4591             p->p_offset = off;
4592           else
4593             {
4594               file_ptr adjust;
4595
4596               adjust = off - (p->p_offset + p->p_filesz);
4597               if (!no_contents)
4598                 p->p_filesz += adjust;
4599               p->p_memsz += adjust;
4600             }
4601         }
4602
4603       /* Set up p_filesz, p_memsz, p_align and p_flags from the section
4604          maps.  Set filepos for sections in PT_LOAD segments, and in
4605          core files, for sections in PT_NOTE segments.
4606          assign_file_positions_for_non_load_sections will set filepos
4607          for other sections and update p_filesz for other segments.  */
4608       for (i = 0, secpp = m->sections; i < m->count; i++, secpp++)
4609         {
4610           asection *sec;
4611           bfd_size_type align;
4612           Elf_Internal_Shdr *this_hdr;
4613
4614           sec = *secpp;
4615           this_hdr = &elf_section_data (sec)->this_hdr;
4616           align = (bfd_size_type) 1 << bfd_get_section_alignment (abfd, sec);
4617
4618           if ((p->p_type == PT_LOAD
4619                || p->p_type == PT_TLS)
4620               && (this_hdr->sh_type != SHT_NOBITS
4621                   || ((this_hdr->sh_flags & SHF_ALLOC) != 0
4622                       && ((this_hdr->sh_flags & SHF_TLS) == 0
4623                           || p->p_type == PT_TLS))))
4624             {
4625               bfd_vma p_start = p->p_paddr;
4626               bfd_vma p_end = p_start + p->p_memsz;
4627               bfd_vma s_start = sec->lma;
4628               bfd_vma adjust = s_start - p_end;
4629
4630               if (adjust != 0
4631                   && (s_start < p_end
4632                       || p_end < p_start))
4633                 {
4634                   (*_bfd_error_handler)
4635                     (_("%B: section %A lma %#lx adjusted to %#lx"), abfd, sec,
4636                      (unsigned long) s_start, (unsigned long) p_end);
4637                   adjust = 0;
4638                   sec->lma = p_end;
4639                 }
4640               p->p_memsz += adjust;
4641
4642               if (this_hdr->sh_type != SHT_NOBITS)
4643                 {
4644                   if (p->p_filesz + adjust < p->p_memsz)
4645                     {
4646                       /* We have a PROGBITS section following NOBITS ones.
4647                          Allocate file space for the NOBITS section(s) and
4648                          zero it.  */
4649                       adjust = p->p_memsz - p->p_filesz;
4650                       if (!write_zeros (abfd, off, adjust))
4651                         return FALSE;
4652                     }
4653                   off += adjust;
4654                   p->p_filesz += adjust;
4655                 }
4656             }
4657
4658           if (p->p_type == PT_NOTE && bfd_get_format (abfd) == bfd_core)
4659             {
4660               /* The section at i == 0 is the one that actually contains
4661                  everything.  */
4662               if (i == 0)
4663                 {
4664                   this_hdr->sh_offset = sec->filepos = off;
4665                   off += this_hdr->sh_size;
4666                   p->p_filesz = this_hdr->sh_size;
4667                   p->p_memsz = 0;
4668                   p->p_align = 1;
4669                 }
4670               else
4671                 {
4672                   /* The rest are fake sections that shouldn't be written.  */
4673                   sec->filepos = 0;
4674                   sec->size = 0;
4675                   sec->flags = 0;
4676                   continue;
4677                 }
4678             }
4679           else
4680             {
4681               if (p->p_type == PT_LOAD)
4682                 {
4683                   this_hdr->sh_offset = sec->filepos = off;
4684                   if (this_hdr->sh_type != SHT_NOBITS)
4685                     off += this_hdr->sh_size;
4686                 }
4687
4688               if (this_hdr->sh_type != SHT_NOBITS)
4689                 {
4690                   p->p_filesz += this_hdr->sh_size;
4691                   /* A load section without SHF_ALLOC is something like
4692                      a note section in a PT_NOTE segment.  These take
4693                      file space but are not loaded into memory.  */
4694                   if ((this_hdr->sh_flags & SHF_ALLOC) != 0)
4695                     p->p_memsz += this_hdr->sh_size;
4696                 }
4697               else if ((this_hdr->sh_flags & SHF_ALLOC) != 0)
4698                 {
4699                   if (p->p_type == PT_TLS)
4700                     p->p_memsz += this_hdr->sh_size;
4701
4702                   /* .tbss is special.  It doesn't contribute to p_memsz of
4703                      normal segments.  */
4704                   else if ((this_hdr->sh_flags & SHF_TLS) == 0)
4705                     p->p_memsz += this_hdr->sh_size;
4706                 }
4707
4708               if (align > p->p_align
4709                   && !m->p_align_valid
4710                   && (p->p_type != PT_LOAD
4711                       || (abfd->flags & D_PAGED) == 0))
4712                 p->p_align = align;
4713             }
4714
4715           if (!m->p_flags_valid)
4716             {
4717               p->p_flags |= PF_R;
4718               if ((this_hdr->sh_flags & SHF_EXECINSTR) != 0)
4719                 p->p_flags |= PF_X;
4720               if ((this_hdr->sh_flags & SHF_WRITE) != 0)
4721                 p->p_flags |= PF_W;
4722             }
4723         }
4724       off -= off_adjust;
4725
4726       /* Check that all sections are in a PT_LOAD segment.
4727          Don't check funky gdb generated core files.  */
4728       if (p->p_type == PT_LOAD && bfd_get_format (abfd) != bfd_core)
4729         {
4730           bfd_boolean check_vma = TRUE;
4731
4732           for (i = 1; i < m->count; i++)
4733             if (m->sections[i]->vma == m->sections[i - 1]->vma
4734                 && ELF_SECTION_SIZE (&(elf_section_data (m->sections[i])
4735                                        ->this_hdr), p) != 0
4736                 && ELF_SECTION_SIZE (&(elf_section_data (m->sections[i - 1])
4737                                        ->this_hdr), p) != 0)
4738               {
4739                 /* Looks like we have overlays packed into the segment.  */
4740                 check_vma = FALSE;
4741                 break;
4742               }
4743
4744           for (i = 0; i < m->count; i++)
4745             {
4746               Elf_Internal_Shdr *this_hdr;
4747               asection *sec;
4748
4749               sec = m->sections[i];
4750               this_hdr = &(elf_section_data(sec)->this_hdr);
4751               if (!ELF_SECTION_IN_SEGMENT_1 (this_hdr, p, check_vma, 0))
4752                 {
4753                   (*_bfd_error_handler)
4754                     (_("%B: section `%A' can't be allocated in segment %d"),
4755                      abfd, sec, j);
4756                   print_segment_map (m);
4757                 }
4758             }
4759         }
4760     }
4761
4762   elf_tdata (abfd)->next_file_pos = off;
4763   return TRUE;
4764 }
4765
4766 /* Assign file positions for the other sections.  */
4767
4768 static bfd_boolean
4769 assign_file_positions_for_non_load_sections (bfd *abfd,
4770                                              struct bfd_link_info *link_info)
4771 {
4772   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
4773   Elf_Internal_Shdr **i_shdrpp;
4774   Elf_Internal_Shdr **hdrpp;
4775   Elf_Internal_Phdr *phdrs;
4776   Elf_Internal_Phdr *p;
4777   struct elf_segment_map *m;
4778   bfd_vma filehdr_vaddr, filehdr_paddr;
4779   bfd_vma phdrs_vaddr, phdrs_paddr;
4780   file_ptr off;
4781   unsigned int num_sec;
4782   unsigned int i;
4783   unsigned int count;
4784
4785   i_shdrpp = elf_elfsections (abfd);
4786   num_sec = elf_numsections (abfd);
4787   off = elf_tdata (abfd)->next_file_pos;
4788   for (i = 1, hdrpp = i_shdrpp + 1; i < num_sec; i++, hdrpp++)
4789     {
4790       struct elf_obj_tdata *tdata = elf_tdata (abfd);
4791       Elf_Internal_Shdr *hdr;
4792
4793       hdr = *hdrpp;
4794       if (hdr->bfd_section != NULL
4795           && (hdr->bfd_section->filepos != 0
4796               || (hdr->sh_type == SHT_NOBITS
4797                   && hdr->contents == NULL)))
4798         BFD_ASSERT (hdr->sh_offset == hdr->bfd_section->filepos);
4799       else if ((hdr->sh_flags & SHF_ALLOC) != 0)
4800         {
4801           (*_bfd_error_handler)
4802             (_("%B: warning: allocated section `%s' not in segment"),
4803              abfd,
4804              (hdr->bfd_section == NULL
4805               ? "*unknown*"
4806               : hdr->bfd_section->name));
4807           /* We don't need to page align empty sections.  */
4808           if ((abfd->flags & D_PAGED) != 0 && hdr->sh_size != 0)
4809             off += vma_page_aligned_bias (hdr->sh_addr, off,
4810                                           bed->maxpagesize);
4811           else
4812             off += vma_page_aligned_bias (hdr->sh_addr, off,
4813                                           hdr->sh_addralign);
4814           off = _bfd_elf_assign_file_position_for_section (hdr, off,
4815                                                            FALSE);
4816         }
4817       else if (((hdr->sh_type == SHT_REL || hdr->sh_type == SHT_RELA)
4818                 && hdr->bfd_section == NULL)
4819                || hdr == i_shdrpp[tdata->symtab_section]
4820                || hdr == i_shdrpp[tdata->symtab_shndx_section]
4821                || hdr == i_shdrpp[tdata->strtab_section])
4822         hdr->sh_offset = -1;
4823       else
4824         off = _bfd_elf_assign_file_position_for_section (hdr, off, TRUE);
4825     }
4826
4827   /* Now that we have set the section file positions, we can set up
4828      the file positions for the non PT_LOAD segments.  */
4829   count = 0;
4830   filehdr_vaddr = 0;
4831   filehdr_paddr = 0;
4832   phdrs_vaddr = bed->maxpagesize + bed->s->sizeof_ehdr;
4833   phdrs_paddr = 0;
4834   phdrs = elf_tdata (abfd)->phdr;
4835   for (m = elf_tdata (abfd)->segment_map, p = phdrs;
4836        m != NULL;
4837        m = m->next, p++)
4838     {
4839       ++count;
4840       if (p->p_type != PT_LOAD)
4841         continue;
4842
4843       if (m->includes_filehdr)
4844         {
4845           filehdr_vaddr = p->p_vaddr;
4846           filehdr_paddr = p->p_paddr;
4847         }
4848       if (m->includes_phdrs)
4849         {
4850           phdrs_vaddr = p->p_vaddr;
4851           phdrs_paddr = p->p_paddr;
4852           if (m->includes_filehdr)
4853             {
4854               phdrs_vaddr += bed->s->sizeof_ehdr;
4855               phdrs_paddr += bed->s->sizeof_ehdr;
4856             }
4857         }
4858     }
4859
4860   for (m = elf_tdata (abfd)->segment_map, p = phdrs;
4861        m != NULL;
4862        m = m->next, p++)
4863     {
4864       if (p->p_type == PT_GNU_RELRO)
4865         {
4866           const Elf_Internal_Phdr *lp;
4867
4868           BFD_ASSERT (!m->includes_filehdr && !m->includes_phdrs);
4869
4870           if (link_info != NULL)
4871             {
4872               /* During linking the range of the RELRO segment is passed
4873                  in link_info.  */
4874               for (lp = phdrs; lp < phdrs + count; ++lp)
4875                 {
4876                   if (lp->p_type == PT_LOAD
4877                       && lp->p_vaddr >= link_info->relro_start
4878                       && lp->p_vaddr < link_info->relro_end
4879                       && lp->p_vaddr + lp->p_filesz >= link_info->relro_end)
4880                     break;
4881                 }
4882             }
4883           else
4884             {
4885               /* Otherwise we are copying an executable or shared
4886                  library, but we need to use the same linker logic.  */
4887               for (lp = phdrs; lp < phdrs + count; ++lp)
4888                 {
4889                   if (lp->p_type == PT_LOAD
4890                       && lp->p_paddr == p->p_paddr)
4891                     break;
4892                 }
4893             }
4894
4895           if (lp < phdrs + count)
4896             {
4897               p->p_vaddr = lp->p_vaddr;
4898               p->p_paddr = lp->p_paddr;
4899               p->p_offset = lp->p_offset;
4900               if (link_info != NULL)
4901                 p->p_filesz = link_info->relro_end - lp->p_vaddr;
4902               else if (m->p_size_valid)
4903                 p->p_filesz = m->p_size;
4904               else
4905                 abort ();
4906               p->p_memsz = p->p_filesz;
4907               p->p_align = 1;
4908               p->p_flags = (lp->p_flags & ~PF_W);
4909             }
4910           else
4911             {
4912               memset (p, 0, sizeof *p);
4913               p->p_type = PT_NULL;
4914             }
4915         }
4916       else if (m->count != 0)
4917         {
4918           if (p->p_type != PT_LOAD
4919               && (p->p_type != PT_NOTE
4920                   || bfd_get_format (abfd) != bfd_core))
4921             {
4922               Elf_Internal_Shdr *hdr;
4923               asection *sect;
4924
4925               BFD_ASSERT (!m->includes_filehdr && !m->includes_phdrs);
4926
4927               sect = m->sections[m->count - 1];
4928               hdr = &elf_section_data (sect)->this_hdr;
4929               p->p_filesz = sect->filepos - m->sections[0]->filepos;
4930               if (hdr->sh_type != SHT_NOBITS)
4931                 p->p_filesz += hdr->sh_size;
4932               p->p_offset = m->sections[0]->filepos;
4933             }
4934         }
4935       else if (m->includes_filehdr)
4936         {
4937           p->p_vaddr = filehdr_vaddr;
4938           if (! m->p_paddr_valid)
4939             p->p_paddr = filehdr_paddr;
4940         }
4941       else if (m->includes_phdrs)
4942         {
4943           p->p_vaddr = phdrs_vaddr;
4944           if (! m->p_paddr_valid)
4945             p->p_paddr = phdrs_paddr;
4946         }
4947     }
4948
4949   elf_tdata (abfd)->next_file_pos = off;
4950
4951   return TRUE;
4952 }
4953
4954 /* Work out the file positions of all the sections.  This is called by
4955    _bfd_elf_compute_section_file_positions.  All the section sizes and
4956    VMAs must be known before this is called.
4957
4958    Reloc sections come in two flavours: Those processed specially as
4959    "side-channel" data attached to a section to which they apply, and
4960    those that bfd doesn't process as relocations.  The latter sort are
4961    stored in a normal bfd section by bfd_section_from_shdr.   We don't
4962    consider the former sort here, unless they form part of the loadable
4963    image.  Reloc sections not assigned here will be handled later by
4964    assign_file_positions_for_relocs.
4965
4966    We also don't set the positions of the .symtab and .strtab here.  */
4967
4968 static bfd_boolean
4969 assign_file_positions_except_relocs (bfd *abfd,
4970                                      struct bfd_link_info *link_info)
4971 {
4972   struct elf_obj_tdata *tdata = elf_tdata (abfd);
4973   Elf_Internal_Ehdr *i_ehdrp = elf_elfheader (abfd);
4974   file_ptr off;
4975   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
4976
4977   if ((abfd->flags & (EXEC_P | DYNAMIC)) == 0
4978       && bfd_get_format (abfd) != bfd_core)
4979     {
4980       Elf_Internal_Shdr ** const i_shdrpp = elf_elfsections (abfd);
4981       unsigned int num_sec = elf_numsections (abfd);
4982       Elf_Internal_Shdr **hdrpp;
4983       unsigned int i;
4984
4985       /* Start after the ELF header.  */
4986       off = i_ehdrp->e_ehsize;
4987
4988       /* We are not creating an executable, which means that we are
4989          not creating a program header, and that the actual order of
4990          the sections in the file is unimportant.  */
4991       for (i = 1, hdrpp = i_shdrpp + 1; i < num_sec; i++, hdrpp++)
4992         {
4993           Elf_Internal_Shdr *hdr;
4994
4995           hdr = *hdrpp;
4996           if (((hdr->sh_type == SHT_REL || hdr->sh_type == SHT_RELA)
4997                && hdr->bfd_section == NULL)
4998               || i == tdata->symtab_section
4999               || i == tdata->symtab_shndx_section
5000               || i == tdata->strtab_section)
5001             {
5002               hdr->sh_offset = -1;
5003             }
5004           else
5005             off = _bfd_elf_assign_file_position_for_section (hdr, off, TRUE);
5006         }
5007     }
5008   else
5009     {
5010       unsigned int alloc;
5011
5012       /* Assign file positions for the loaded sections based on the
5013          assignment of sections to segments.  */
5014       if (!assign_file_positions_for_load_sections (abfd, link_info))
5015         return FALSE;
5016
5017       /* And for non-load sections.  */
5018       if (!assign_file_positions_for_non_load_sections (abfd, link_info))
5019         return FALSE;
5020
5021       if (bed->elf_backend_modify_program_headers != NULL)
5022         {
5023           if (!(*bed->elf_backend_modify_program_headers) (abfd, link_info))
5024             return FALSE;
5025         }
5026
5027       /* Write out the program headers.  */
5028       alloc = tdata->program_header_size / bed->s->sizeof_phdr;
5029       if (bfd_seek (abfd, (bfd_signed_vma) bed->s->sizeof_ehdr, SEEK_SET) != 0
5030           || bed->s->write_out_phdrs (abfd, tdata->phdr, alloc) != 0)
5031         return FALSE;
5032
5033       off = tdata->next_file_pos;
5034     }
5035
5036   /* Place the section headers.  */
5037   off = align_file_position (off, 1 << bed->s->log_file_align);
5038   i_ehdrp->e_shoff = off;
5039   off += i_ehdrp->e_shnum * i_ehdrp->e_shentsize;
5040
5041   tdata->next_file_pos = off;
5042
5043   return TRUE;
5044 }
5045
5046 static bfd_boolean
5047 prep_headers (bfd *abfd)
5048 {
5049   Elf_Internal_Ehdr *i_ehdrp;   /* Elf file header, internal form.  */
5050   struct elf_strtab_hash *shstrtab;
5051   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
5052
5053   i_ehdrp = elf_elfheader (abfd);
5054
5055   shstrtab = _bfd_elf_strtab_init ();
5056   if (shstrtab == NULL)
5057     return FALSE;
5058
5059   elf_shstrtab (abfd) = shstrtab;
5060
5061   i_ehdrp->e_ident[EI_MAG0] = ELFMAG0;
5062   i_ehdrp->e_ident[EI_MAG1] = ELFMAG1;
5063   i_ehdrp->e_ident[EI_MAG2] = ELFMAG2;
5064   i_ehdrp->e_ident[EI_MAG3] = ELFMAG3;
5065
5066   i_ehdrp->e_ident[EI_CLASS] = bed->s->elfclass;
5067   i_ehdrp->e_ident[EI_DATA] =
5068     bfd_big_endian (abfd) ? ELFDATA2MSB : ELFDATA2LSB;
5069   i_ehdrp->e_ident[EI_VERSION] = bed->s->ev_current;
5070
5071   if ((abfd->flags & DYNAMIC) != 0)
5072     i_ehdrp->e_type = ET_DYN;
5073   else if ((abfd->flags & EXEC_P) != 0)
5074     i_ehdrp->e_type = ET_EXEC;
5075   else if (bfd_get_format (abfd) == bfd_core)
5076     i_ehdrp->e_type = ET_CORE;
5077   else
5078     i_ehdrp->e_type = ET_REL;
5079
5080   switch (bfd_get_arch (abfd))
5081     {
5082     case bfd_arch_unknown:
5083       i_ehdrp->e_machine = EM_NONE;
5084       break;
5085
5086       /* There used to be a long list of cases here, each one setting
5087          e_machine to the same EM_* macro #defined as ELF_MACHINE_CODE
5088          in the corresponding bfd definition.  To avoid duplication,
5089          the switch was removed.  Machines that need special handling
5090          can generally do it in elf_backend_final_write_processing(),
5091          unless they need the information earlier than the final write.
5092          Such need can generally be supplied by replacing the tests for
5093          e_machine with the conditions used to determine it.  */
5094     default:
5095       i_ehdrp->e_machine = bed->elf_machine_code;
5096     }
5097
5098   i_ehdrp->e_version = bed->s->ev_current;
5099   i_ehdrp->e_ehsize = bed->s->sizeof_ehdr;
5100
5101   /* No program header, for now.  */
5102   i_ehdrp->e_phoff = 0;
5103   i_ehdrp->e_phentsize = 0;
5104   i_ehdrp->e_phnum = 0;
5105
5106   /* Each bfd section is section header entry.  */
5107   i_ehdrp->e_entry = bfd_get_start_address (abfd);
5108   i_ehdrp->e_shentsize = bed->s->sizeof_shdr;
5109
5110   /* If we're building an executable, we'll need a program header table.  */
5111   if (abfd->flags & EXEC_P)
5112     /* It all happens later.  */
5113     ;
5114   else
5115     {
5116       i_ehdrp->e_phentsize = 0;
5117       i_ehdrp->e_phoff = 0;
5118     }
5119
5120   elf_tdata (abfd)->symtab_hdr.sh_name =
5121     (unsigned int) _bfd_elf_strtab_add (shstrtab, ".symtab", FALSE);
5122   elf_tdata (abfd)->strtab_hdr.sh_name =
5123     (unsigned int) _bfd_elf_strtab_add (shstrtab, ".strtab", FALSE);
5124   elf_tdata (abfd)->shstrtab_hdr.sh_name =
5125     (unsigned int) _bfd_elf_strtab_add (shstrtab, ".shstrtab", FALSE);
5126   if (elf_tdata (abfd)->symtab_hdr.sh_name == (unsigned int) -1
5127       || elf_tdata (abfd)->symtab_hdr.sh_name == (unsigned int) -1
5128       || elf_tdata (abfd)->shstrtab_hdr.sh_name == (unsigned int) -1)
5129     return FALSE;
5130
5131   return TRUE;
5132 }
5133
5134 /* Assign file positions for all the reloc sections which are not part
5135    of the loadable file image.  */
5136
5137 void
5138 _bfd_elf_assign_file_positions_for_relocs (bfd *abfd)
5139 {
5140   file_ptr off;
5141   unsigned int i, num_sec;
5142   Elf_Internal_Shdr **shdrpp;
5143
5144   off = elf_tdata (abfd)->next_file_pos;
5145
5146   num_sec = elf_numsections (abfd);
5147   for (i = 1, shdrpp = elf_elfsections (abfd) + 1; i < num_sec; i++, shdrpp++)
5148     {
5149       Elf_Internal_Shdr *shdrp;
5150
5151       shdrp = *shdrpp;
5152       if ((shdrp->sh_type == SHT_REL || shdrp->sh_type == SHT_RELA)
5153           && shdrp->sh_offset == -1)
5154         off = _bfd_elf_assign_file_position_for_section (shdrp, off, TRUE);
5155     }
5156
5157   elf_tdata (abfd)->next_file_pos = off;
5158 }
5159
5160 bfd_boolean
5161 _bfd_elf_write_object_contents (bfd *abfd)
5162 {
5163   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
5164   Elf_Internal_Shdr **i_shdrp;
5165   bfd_boolean failed;
5166   unsigned int count, num_sec;
5167
5168   if (! abfd->output_has_begun
5169       && ! _bfd_elf_compute_section_file_positions (abfd, NULL))
5170     return FALSE;
5171
5172   i_shdrp = elf_elfsections (abfd);
5173
5174   failed = FALSE;
5175   bfd_map_over_sections (abfd, bed->s->write_relocs, &failed);
5176   if (failed)
5177     return FALSE;
5178
5179   _bfd_elf_assign_file_positions_for_relocs (abfd);
5180
5181   /* After writing the headers, we need to write the sections too...  */
5182   num_sec = elf_numsections (abfd);
5183   for (count = 1; count < num_sec; count++)
5184     {
5185       if (bed->elf_backend_section_processing)
5186         (*bed->elf_backend_section_processing) (abfd, i_shdrp[count]);
5187       if (i_shdrp[count]->contents)
5188         {
5189           bfd_size_type amt = i_shdrp[count]->sh_size;
5190
5191           if (bfd_seek (abfd, i_shdrp[count]->sh_offset, SEEK_SET) != 0
5192               || bfd_bwrite (i_shdrp[count]->contents, amt, abfd) != amt)
5193             return FALSE;
5194         }
5195     }
5196
5197   /* Write out the section header names.  */
5198   if (elf_shstrtab (abfd) != NULL
5199       && (bfd_seek (abfd, elf_tdata (abfd)->shstrtab_hdr.sh_offset, SEEK_SET) != 0
5200           || !_bfd_elf_strtab_emit (abfd, elf_shstrtab (abfd))))
5201     return FALSE;
5202
5203   if (bed->elf_backend_final_write_processing)
5204     (*bed->elf_backend_final_write_processing) (abfd,
5205                                                 elf_tdata (abfd)->linker);
5206
5207   if (!bed->s->write_shdrs_and_ehdr (abfd))
5208     return FALSE;
5209
5210   /* This is last since write_shdrs_and_ehdr can touch i_shdrp[0].  */
5211   if (elf_tdata (abfd)->after_write_object_contents)
5212     return (*elf_tdata (abfd)->after_write_object_contents) (abfd);
5213
5214   return TRUE;
5215 }
5216
5217 bfd_boolean
5218 _bfd_elf_write_corefile_contents (bfd *abfd)
5219 {
5220   /* Hopefully this can be done just like an object file.  */
5221   return _bfd_elf_write_object_contents (abfd);
5222 }
5223
5224 /* Given a section, search the header to find them.  */
5225
5226 unsigned int
5227 _bfd_elf_section_from_bfd_section (bfd *abfd, struct bfd_section *asect)
5228 {
5229   const struct elf_backend_data *bed;
5230   unsigned int sec_index;
5231
5232   if (elf_section_data (asect) != NULL
5233       && elf_section_data (asect)->this_idx != 0)
5234     return elf_section_data (asect)->this_idx;
5235
5236   if (bfd_is_abs_section (asect))
5237     sec_index = SHN_ABS;
5238   else if (bfd_is_com_section (asect))
5239     sec_index = SHN_COMMON;
5240   else if (bfd_is_und_section (asect))
5241     sec_index = SHN_UNDEF;
5242   else
5243     sec_index = SHN_BAD;
5244
5245   bed = get_elf_backend_data (abfd);
5246   if (bed->elf_backend_section_from_bfd_section)
5247     {
5248       int retval = sec_index;
5249
5250       if ((*bed->elf_backend_section_from_bfd_section) (abfd, asect, &retval))
5251         return retval;
5252     }
5253
5254   if (sec_index == SHN_BAD)
5255     bfd_set_error (bfd_error_nonrepresentable_section);
5256
5257   return sec_index;
5258 }
5259
5260 /* Given a BFD symbol, return the index in the ELF symbol table, or -1
5261    on error.  */
5262
5263 int
5264 _bfd_elf_symbol_from_bfd_symbol (bfd *abfd, asymbol **asym_ptr_ptr)
5265 {
5266   asymbol *asym_ptr = *asym_ptr_ptr;
5267   int idx;
5268   flagword flags = asym_ptr->flags;
5269
5270   /* When gas creates relocations against local labels, it creates its
5271      own symbol for the section, but does put the symbol into the
5272      symbol chain, so udata is 0.  When the linker is generating
5273      relocatable output, this section symbol may be for one of the
5274      input sections rather than the output section.  */
5275   if (asym_ptr->udata.i == 0
5276       && (flags & BSF_SECTION_SYM)
5277       && asym_ptr->section)
5278     {
5279       asection *sec;
5280       int indx;
5281
5282       sec = asym_ptr->section;
5283       if (sec->owner != abfd && sec->output_section != NULL)
5284         sec = sec->output_section;
5285       if (sec->owner == abfd
5286           && (indx = sec->index) < elf_num_section_syms (abfd)
5287           && elf_section_syms (abfd)[indx] != NULL)
5288         asym_ptr->udata.i = elf_section_syms (abfd)[indx]->udata.i;
5289     }
5290
5291   idx = asym_ptr->udata.i;
5292
5293   if (idx == 0)
5294     {
5295       /* This case can occur when using --strip-symbol on a symbol
5296          which is used in a relocation entry.  */
5297       (*_bfd_error_handler)
5298         (_("%B: symbol `%s' required but not present"),
5299          abfd, bfd_asymbol_name (asym_ptr));
5300       bfd_set_error (bfd_error_no_symbols);
5301       return -1;
5302     }
5303
5304 #if DEBUG & 4
5305   {
5306     fprintf (stderr,
5307              "elf_symbol_from_bfd_symbol 0x%.8lx, name = %s, sym num = %d, flags = 0x%.8lx\n",
5308              (long) asym_ptr, asym_ptr->name, idx, (long) flags);
5309     fflush (stderr);
5310   }
5311 #endif
5312
5313   return idx;
5314 }
5315
5316 /* Rewrite program header information.  */
5317
5318 static bfd_boolean
5319 rewrite_elf_program_header (bfd *ibfd, bfd *obfd)
5320 {
5321   Elf_Internal_Ehdr *iehdr;
5322   struct elf_segment_map *map;
5323   struct elf_segment_map *map_first;
5324   struct elf_segment_map **pointer_to_map;
5325   Elf_Internal_Phdr *segment;
5326   asection *section;
5327   unsigned int i;
5328   unsigned int num_segments;
5329   bfd_boolean phdr_included = FALSE;
5330   bfd_boolean p_paddr_valid;
5331   bfd_vma maxpagesize;
5332   struct elf_segment_map *phdr_adjust_seg = NULL;
5333   unsigned int phdr_adjust_num = 0;
5334   const struct elf_backend_data *bed;
5335
5336   bed = get_elf_backend_data (ibfd);
5337   iehdr = elf_elfheader (ibfd);
5338
5339   map_first = NULL;
5340   pointer_to_map = &map_first;
5341
5342   num_segments = elf_elfheader (ibfd)->e_phnum;
5343   maxpagesize = get_elf_backend_data (obfd)->maxpagesize;
5344
5345   /* Returns the end address of the segment + 1.  */
5346 #define SEGMENT_END(segment, start)                                     \
5347   (start + (segment->p_memsz > segment->p_filesz                        \
5348             ? segment->p_memsz : segment->p_filesz))
5349
5350 #define SECTION_SIZE(section, segment)                                  \
5351   (((section->flags & (SEC_HAS_CONTENTS | SEC_THREAD_LOCAL))            \
5352     != SEC_THREAD_LOCAL || segment->p_type == PT_TLS)                   \
5353    ? section->size : 0)
5354
5355   /* Returns TRUE if the given section is contained within
5356      the given segment.  VMA addresses are compared.  */
5357 #define IS_CONTAINED_BY_VMA(section, segment)                           \
5358   (section->vma >= segment->p_vaddr                                     \
5359    && (section->vma + SECTION_SIZE (section, segment)                   \
5360        <= (SEGMENT_END (segment, segment->p_vaddr))))
5361
5362   /* Returns TRUE if the given section is contained within
5363      the given segment.  LMA addresses are compared.  */
5364 #define IS_CONTAINED_BY_LMA(section, segment, base)                     \
5365   (section->lma >= base                                                 \
5366    && (section->lma + SECTION_SIZE (section, segment)                   \
5367        <= SEGMENT_END (segment, base)))
5368
5369   /* Handle PT_NOTE segment.  */
5370 #define IS_NOTE(p, s)                                                   \
5371   (p->p_type == PT_NOTE                                                 \
5372    && elf_section_type (s) == SHT_NOTE                                  \
5373    && (bfd_vma) s->filepos >= p->p_offset                               \
5374    && ((bfd_vma) s->filepos + s->size                                   \
5375        <= p->p_offset + p->p_filesz))
5376
5377   /* Special case: corefile "NOTE" section containing regs, prpsinfo
5378      etc.  */
5379 #define IS_COREFILE_NOTE(p, s)                                          \
5380   (IS_NOTE (p, s)                                                       \
5381    && bfd_get_format (ibfd) == bfd_core                                 \
5382    && s->vma == 0                                                       \
5383    && s->lma == 0)
5384
5385   /* The complicated case when p_vaddr is 0 is to handle the Solaris
5386      linker, which generates a PT_INTERP section with p_vaddr and
5387      p_memsz set to 0.  */
5388 #define IS_SOLARIS_PT_INTERP(p, s)                                      \
5389   (p->p_vaddr == 0                                                      \
5390    && p->p_paddr == 0                                                   \
5391    && p->p_memsz == 0                                                   \
5392    && p->p_filesz > 0                                                   \
5393    && (s->flags & SEC_HAS_CONTENTS) != 0                                \
5394    && s->size > 0                                                       \
5395    && (bfd_vma) s->filepos >= p->p_offset                               \
5396    && ((bfd_vma) s->filepos + s->size                                   \
5397        <= p->p_offset + p->p_filesz))
5398
5399   /* Decide if the given section should be included in the given segment.
5400      A section will be included if:
5401        1. It is within the address space of the segment -- we use the LMA
5402           if that is set for the segment and the VMA otherwise,
5403        2. It is an allocated section or a NOTE section in a PT_NOTE
5404           segment.         
5405        3. There is an output section associated with it,
5406        4. The section has not already been allocated to a previous segment.
5407        5. PT_GNU_STACK segments do not include any sections.
5408        6. PT_TLS segment includes only SHF_TLS sections.
5409        7. SHF_TLS sections are only in PT_TLS or PT_LOAD segments.
5410        8. PT_DYNAMIC should not contain empty sections at the beginning
5411           (with the possible exception of .dynamic).  */
5412 #define IS_SECTION_IN_INPUT_SEGMENT(section, segment, bed)              \
5413   ((((segment->p_paddr                                                  \
5414       ? IS_CONTAINED_BY_LMA (section, segment, segment->p_paddr)        \
5415       : IS_CONTAINED_BY_VMA (section, segment))                         \
5416      && (section->flags & SEC_ALLOC) != 0)                              \
5417     || IS_NOTE (segment, section))                                      \
5418    && segment->p_type != PT_GNU_STACK                                   \
5419    && (segment->p_type != PT_TLS                                        \
5420        || (section->flags & SEC_THREAD_LOCAL))                          \
5421    && (segment->p_type == PT_LOAD                                       \
5422        || segment->p_type == PT_TLS                                     \
5423        || (section->flags & SEC_THREAD_LOCAL) == 0)                     \
5424    && (segment->p_type != PT_DYNAMIC                                    \
5425        || SECTION_SIZE (section, segment) > 0                           \
5426        || (segment->p_paddr                                             \
5427            ? segment->p_paddr != section->lma                           \
5428            : segment->p_vaddr != section->vma)                          \
5429        || (strcmp (bfd_get_section_name (ibfd, section), ".dynamic")    \
5430            == 0))                                                       \
5431    && !section->segment_mark)
5432
5433 /* If the output section of a section in the input segment is NULL,
5434    it is removed from the corresponding output segment.   */
5435 #define INCLUDE_SECTION_IN_SEGMENT(section, segment, bed)               \
5436   (IS_SECTION_IN_INPUT_SEGMENT (section, segment, bed)          \
5437    && section->output_section != NULL)
5438
5439   /* Returns TRUE iff seg1 starts after the end of seg2.  */
5440 #define SEGMENT_AFTER_SEGMENT(seg1, seg2, field)                        \
5441   (seg1->field >= SEGMENT_END (seg2, seg2->field))
5442
5443   /* Returns TRUE iff seg1 and seg2 overlap. Segments overlap iff both
5444      their VMA address ranges and their LMA address ranges overlap.
5445      It is possible to have overlapping VMA ranges without overlapping LMA
5446      ranges.  RedBoot images for example can have both .data and .bss mapped
5447      to the same VMA range, but with the .data section mapped to a different
5448      LMA.  */
5449 #define SEGMENT_OVERLAPS(seg1, seg2)                                    \
5450   (   !(SEGMENT_AFTER_SEGMENT (seg1, seg2, p_vaddr)                     \
5451         || SEGMENT_AFTER_SEGMENT (seg2, seg1, p_vaddr))                 \
5452    && !(SEGMENT_AFTER_SEGMENT (seg1, seg2, p_paddr)                     \
5453         || SEGMENT_AFTER_SEGMENT (seg2, seg1, p_paddr)))
5454
5455   /* Initialise the segment mark field.  */
5456   for (section = ibfd->sections; section != NULL; section = section->next)
5457     section->segment_mark = FALSE;
5458
5459   /* The Solaris linker creates program headers in which all the
5460      p_paddr fields are zero.  When we try to objcopy or strip such a
5461      file, we get confused.  Check for this case, and if we find it
5462      don't set the p_paddr_valid fields.  */
5463   p_paddr_valid = FALSE;
5464   for (i = 0, segment = elf_tdata (ibfd)->phdr;
5465        i < num_segments;
5466        i++, segment++)
5467     if (segment->p_paddr != 0)
5468       {
5469         p_paddr_valid = TRUE;
5470         break;
5471       }
5472
5473   /* Scan through the segments specified in the program header
5474      of the input BFD.  For this first scan we look for overlaps
5475      in the loadable segments.  These can be created by weird
5476      parameters to objcopy.  Also, fix some solaris weirdness.  */
5477   for (i = 0, segment = elf_tdata (ibfd)->phdr;
5478        i < num_segments;
5479        i++, segment++)
5480     {
5481       unsigned int j;
5482       Elf_Internal_Phdr *segment2;
5483
5484       if (segment->p_type == PT_INTERP)
5485         for (section = ibfd->sections; section; section = section->next)
5486           if (IS_SOLARIS_PT_INTERP (segment, section))
5487             {
5488               /* Mininal change so that the normal section to segment
5489                  assignment code will work.  */
5490               segment->p_vaddr = section->vma;
5491               break;
5492             }
5493
5494       if (segment->p_type != PT_LOAD)
5495         {
5496           /* Remove PT_GNU_RELRO segment.  */
5497           if (segment->p_type == PT_GNU_RELRO)
5498             segment->p_type = PT_NULL;
5499           continue;
5500         }
5501
5502       /* Determine if this segment overlaps any previous segments.  */
5503       for (j = 0, segment2 = elf_tdata (ibfd)->phdr; j < i; j++, segment2++)
5504         {
5505           bfd_signed_vma extra_length;
5506
5507           if (segment2->p_type != PT_LOAD
5508               || !SEGMENT_OVERLAPS (segment, segment2))
5509             continue;
5510
5511           /* Merge the two segments together.  */
5512           if (segment2->p_vaddr < segment->p_vaddr)
5513             {
5514               /* Extend SEGMENT2 to include SEGMENT and then delete
5515                  SEGMENT.  */
5516               extra_length = (SEGMENT_END (segment, segment->p_vaddr)
5517                               - SEGMENT_END (segment2, segment2->p_vaddr));
5518
5519               if (extra_length > 0)
5520                 {
5521                   segment2->p_memsz += extra_length;
5522                   segment2->p_filesz += extra_length;
5523                 }
5524
5525               segment->p_type = PT_NULL;
5526
5527               /* Since we have deleted P we must restart the outer loop.  */
5528               i = 0;
5529               segment = elf_tdata (ibfd)->phdr;
5530               break;
5531             }
5532           else
5533             {
5534               /* Extend SEGMENT to include SEGMENT2 and then delete
5535                  SEGMENT2.  */
5536               extra_length = (SEGMENT_END (segment2, segment2->p_vaddr)
5537                               - SEGMENT_END (segment, segment->p_vaddr));
5538
5539               if (extra_length > 0)
5540                 {
5541                   segment->p_memsz += extra_length;
5542                   segment->p_filesz += extra_length;
5543                 }
5544
5545               segment2->p_type = PT_NULL;
5546             }
5547         }
5548     }
5549
5550   /* The second scan attempts to assign sections to segments.  */
5551   for (i = 0, segment = elf_tdata (ibfd)->phdr;
5552        i < num_segments;
5553        i++, segment++)
5554     {
5555       unsigned int section_count;
5556       asection **sections;
5557       asection *output_section;
5558       unsigned int isec;
5559       bfd_vma matching_lma;
5560       bfd_vma suggested_lma;
5561       unsigned int j;
5562       bfd_size_type amt;
5563       asection *first_section;
5564       bfd_boolean first_matching_lma;
5565       bfd_boolean first_suggested_lma;
5566
5567       if (segment->p_type == PT_NULL)
5568         continue;
5569
5570       first_section = NULL;
5571       /* Compute how many sections might be placed into this segment.  */
5572       for (section = ibfd->sections, section_count = 0;
5573            section != NULL;
5574            section = section->next)
5575         {
5576           /* Find the first section in the input segment, which may be
5577              removed from the corresponding output segment.   */
5578           if (IS_SECTION_IN_INPUT_SEGMENT (section, segment, bed))
5579             {
5580               if (first_section == NULL)
5581                 first_section = section;
5582               if (section->output_section != NULL)
5583                 ++section_count;
5584             }
5585         }
5586
5587       /* Allocate a segment map big enough to contain
5588          all of the sections we have selected.  */
5589       amt = sizeof (struct elf_segment_map);
5590       amt += ((bfd_size_type) section_count - 1) * sizeof (asection *);
5591       map = (struct elf_segment_map *) bfd_zalloc (obfd, amt);
5592       if (map == NULL)
5593         return FALSE;
5594
5595       /* Initialise the fields of the segment map.  Default to
5596          using the physical address of the segment in the input BFD.  */
5597       map->next = NULL;
5598       map->p_type = segment->p_type;
5599       map->p_flags = segment->p_flags;
5600       map->p_flags_valid = 1;
5601
5602       /* If the first section in the input segment is removed, there is
5603          no need to preserve segment physical address in the corresponding
5604          output segment.  */
5605       if (!first_section || first_section->output_section != NULL)
5606         {
5607           map->p_paddr = segment->p_paddr;
5608           map->p_paddr_valid = p_paddr_valid;
5609         }
5610
5611       /* Determine if this segment contains the ELF file header
5612          and if it contains the program headers themselves.  */
5613       map->includes_filehdr = (segment->p_offset == 0
5614                                && segment->p_filesz >= iehdr->e_ehsize);
5615       map->includes_phdrs = 0;
5616
5617       if (!phdr_included || segment->p_type != PT_LOAD)
5618         {
5619           map->includes_phdrs =
5620             (segment->p_offset <= (bfd_vma) iehdr->e_phoff
5621              && (segment->p_offset + segment->p_filesz
5622                  >= ((bfd_vma) iehdr->e_phoff
5623                      + iehdr->e_phnum * iehdr->e_phentsize)));
5624
5625           if (segment->p_type == PT_LOAD && map->includes_phdrs)
5626             phdr_included = TRUE;
5627         }
5628
5629       if (section_count == 0)
5630         {
5631           /* Special segments, such as the PT_PHDR segment, may contain
5632              no sections, but ordinary, loadable segments should contain
5633              something.  They are allowed by the ELF spec however, so only
5634              a warning is produced.  */
5635           if (segment->p_type == PT_LOAD)
5636             (*_bfd_error_handler) (_("%B: warning: Empty loadable segment"
5637                                      " detected, is this intentional ?\n"),
5638                                    ibfd);
5639
5640           map->count = 0;
5641           *pointer_to_map = map;
5642           pointer_to_map = &map->next;
5643
5644           continue;
5645         }
5646
5647       /* Now scan the sections in the input BFD again and attempt
5648          to add their corresponding output sections to the segment map.
5649          The problem here is how to handle an output section which has
5650          been moved (ie had its LMA changed).  There are four possibilities:
5651
5652          1. None of the sections have been moved.
5653             In this case we can continue to use the segment LMA from the
5654             input BFD.
5655
5656          2. All of the sections have been moved by the same amount.
5657             In this case we can change the segment's LMA to match the LMA
5658             of the first section.
5659
5660          3. Some of the sections have been moved, others have not.
5661             In this case those sections which have not been moved can be
5662             placed in the current segment which will have to have its size,
5663             and possibly its LMA changed, and a new segment or segments will
5664             have to be created to contain the other sections.
5665
5666          4. The sections have been moved, but not by the same amount.
5667             In this case we can change the segment's LMA to match the LMA
5668             of the first section and we will have to create a new segment
5669             or segments to contain the other sections.
5670
5671          In order to save time, we allocate an array to hold the section
5672          pointers that we are interested in.  As these sections get assigned
5673          to a segment, they are removed from this array.  */
5674
5675       sections = (asection **) bfd_malloc2 (section_count, sizeof (asection *));
5676       if (sections == NULL)
5677         return FALSE;
5678
5679       /* Step One: Scan for segment vs section LMA conflicts.
5680          Also add the sections to the section array allocated above.
5681          Also add the sections to the current segment.  In the common
5682          case, where the sections have not been moved, this means that
5683          we have completely filled the segment, and there is nothing
5684          more to do.  */
5685       isec = 0;
5686       matching_lma = 0;
5687       suggested_lma = 0;
5688       first_matching_lma = TRUE;
5689       first_suggested_lma = TRUE;
5690
5691       for (section = ibfd->sections;
5692            section != NULL;
5693            section = section->next)
5694         if (section == first_section)
5695           break;
5696
5697       for (j = 0; section != NULL; section = section->next)
5698         {
5699           if (INCLUDE_SECTION_IN_SEGMENT (section, segment, bed))
5700             {
5701               output_section = section->output_section;
5702
5703               sections[j++] = section;
5704
5705               /* The Solaris native linker always sets p_paddr to 0.
5706                  We try to catch that case here, and set it to the
5707                  correct value.  Note - some backends require that
5708                  p_paddr be left as zero.  */
5709               if (!p_paddr_valid
5710                   && segment->p_vaddr != 0
5711                   && !bed->want_p_paddr_set_to_zero
5712                   && isec == 0
5713                   && output_section->lma != 0
5714                   && output_section->vma == (segment->p_vaddr
5715                                              + (map->includes_filehdr
5716                                                 ? iehdr->e_ehsize
5717                                                 : 0)
5718                                              + (map->includes_phdrs
5719                                                 ? (iehdr->e_phnum
5720                                                    * iehdr->e_phentsize)
5721                                                 : 0)))
5722                 map->p_paddr = segment->p_vaddr;
5723
5724               /* Match up the physical address of the segment with the
5725                  LMA address of the output section.  */
5726               if (IS_CONTAINED_BY_LMA (output_section, segment, map->p_paddr)
5727                   || IS_COREFILE_NOTE (segment, section)
5728                   || (bed->want_p_paddr_set_to_zero
5729                       && IS_CONTAINED_BY_VMA (output_section, segment)))
5730                 {
5731                   if (first_matching_lma || output_section->lma < matching_lma)
5732                     {
5733                       matching_lma = output_section->lma;
5734                       first_matching_lma = FALSE;
5735                     }
5736
5737                   /* We assume that if the section fits within the segment
5738                      then it does not overlap any other section within that
5739                      segment.  */
5740                   map->sections[isec++] = output_section;
5741                 }
5742               else if (first_suggested_lma)
5743                 {
5744                   suggested_lma = output_section->lma;
5745                   first_suggested_lma = FALSE;
5746                 }
5747
5748               if (j == section_count)
5749                 break;
5750             }
5751         }
5752
5753       BFD_ASSERT (j == section_count);
5754
5755       /* Step Two: Adjust the physical address of the current segment,
5756          if necessary.  */
5757       if (isec == section_count)
5758         {
5759           /* All of the sections fitted within the segment as currently
5760              specified.  This is the default case.  Add the segment to
5761              the list of built segments and carry on to process the next
5762              program header in the input BFD.  */
5763           map->count = section_count;
5764           *pointer_to_map = map;
5765           pointer_to_map = &map->next;
5766
5767           if (p_paddr_valid
5768               && !bed->want_p_paddr_set_to_zero
5769               && matching_lma != map->p_paddr
5770               && !map->includes_filehdr
5771               && !map->includes_phdrs)
5772             /* There is some padding before the first section in the
5773                segment.  So, we must account for that in the output
5774                segment's vma.  */
5775             map->p_vaddr_offset = matching_lma - map->p_paddr;
5776
5777           free (sections);
5778           continue;
5779         }
5780       else
5781         {
5782           if (!first_matching_lma)
5783             {
5784               /* At least one section fits inside the current segment.
5785                  Keep it, but modify its physical address to match the
5786                  LMA of the first section that fitted.  */
5787               map->p_paddr = matching_lma;
5788             }
5789           else
5790             {
5791               /* None of the sections fitted inside the current segment.
5792                  Change the current segment's physical address to match
5793                  the LMA of the first section.  */
5794               map->p_paddr = suggested_lma;
5795             }
5796
5797           /* Offset the segment physical address from the lma
5798              to allow for space taken up by elf headers.  */
5799           if (map->includes_filehdr)
5800             {
5801               if (map->p_paddr >= iehdr->e_ehsize)
5802                 map->p_paddr -= iehdr->e_ehsize;
5803               else
5804                 {
5805                   map->includes_filehdr = FALSE;
5806                   map->includes_phdrs = FALSE;
5807                 }
5808             }
5809
5810           if (map->includes_phdrs)
5811             {
5812               if (map->p_paddr >= iehdr->e_phnum * iehdr->e_phentsize)
5813                 {
5814                   map->p_paddr -= iehdr->e_phnum * iehdr->e_phentsize;
5815
5816                   /* iehdr->e_phnum is just an estimate of the number
5817                      of program headers that we will need.  Make a note
5818                      here of the number we used and the segment we chose
5819                      to hold these headers, so that we can adjust the
5820                      offset when we know the correct value.  */
5821                   phdr_adjust_num = iehdr->e_phnum;
5822                   phdr_adjust_seg = map;
5823                 }
5824               else
5825                 map->includes_phdrs = FALSE;
5826             }
5827         }
5828
5829       /* Step Three: Loop over the sections again, this time assigning
5830          those that fit to the current segment and removing them from the
5831          sections array; but making sure not to leave large gaps.  Once all
5832          possible sections have been assigned to the current segment it is
5833          added to the list of built segments and if sections still remain
5834          to be assigned, a new segment is constructed before repeating
5835          the loop.  */
5836       isec = 0;
5837       do
5838         {
5839           map->count = 0;
5840           suggested_lma = 0;
5841           first_suggested_lma = TRUE;
5842
5843           /* Fill the current segment with sections that fit.  */
5844           for (j = 0; j < section_count; j++)
5845             {
5846               section = sections[j];
5847
5848               if (section == NULL)
5849                 continue;
5850
5851               output_section = section->output_section;
5852
5853               BFD_ASSERT (output_section != NULL);
5854
5855               if (IS_CONTAINED_BY_LMA (output_section, segment, map->p_paddr)
5856                   || IS_COREFILE_NOTE (segment, section))
5857                 {
5858                   if (map->count == 0)
5859                     {
5860                       /* If the first section in a segment does not start at
5861                          the beginning of the segment, then something is
5862                          wrong.  */
5863                       if (output_section->lma
5864                           != (map->p_paddr
5865                               + (map->includes_filehdr ? iehdr->e_ehsize : 0)
5866                               + (map->includes_phdrs
5867                                  ? iehdr->e_phnum * iehdr->e_phentsize
5868                                  : 0)))
5869                         abort ();
5870                     }
5871                   else
5872                     {
5873                       asection *prev_sec;
5874
5875                       prev_sec = map->sections[map->count - 1];
5876
5877                       /* If the gap between the end of the previous section
5878                          and the start of this section is more than
5879                          maxpagesize then we need to start a new segment.  */
5880                       if ((BFD_ALIGN (prev_sec->lma + prev_sec->size,
5881                                       maxpagesize)
5882                            < BFD_ALIGN (output_section->lma, maxpagesize))
5883                           || (prev_sec->lma + prev_sec->size
5884                               > output_section->lma))
5885                         {
5886                           if (first_suggested_lma)
5887                             {
5888                               suggested_lma = output_section->lma;
5889                               first_suggested_lma = FALSE;
5890                             }
5891
5892                           continue;
5893                         }
5894                     }
5895
5896                   map->sections[map->count++] = output_section;
5897                   ++isec;
5898                   sections[j] = NULL;
5899                   section->segment_mark = TRUE;
5900                 }
5901               else if (first_suggested_lma)
5902                 {
5903                   suggested_lma = output_section->lma;
5904                   first_suggested_lma = FALSE;
5905                 }
5906             }
5907
5908           BFD_ASSERT (map->count > 0);
5909
5910           /* Add the current segment to the list of built segments.  */
5911           *pointer_to_map = map;
5912           pointer_to_map = &map->next;
5913
5914           if (isec < section_count)
5915             {
5916               /* We still have not allocated all of the sections to
5917                  segments.  Create a new segment here, initialise it
5918                  and carry on looping.  */
5919               amt = sizeof (struct elf_segment_map);
5920               amt += ((bfd_size_type) section_count - 1) * sizeof (asection *);
5921               map = (struct elf_segment_map *) bfd_alloc (obfd, amt);
5922               if (map == NULL)
5923                 {
5924                   free (sections);
5925                   return FALSE;
5926                 }
5927
5928               /* Initialise the fields of the segment map.  Set the physical
5929                  physical address to the LMA of the first section that has
5930                  not yet been assigned.  */
5931               map->next = NULL;
5932               map->p_type = segment->p_type;
5933               map->p_flags = segment->p_flags;
5934               map->p_flags_valid = 1;
5935               map->p_paddr = suggested_lma;
5936               map->p_paddr_valid = p_paddr_valid;
5937               map->includes_filehdr = 0;
5938               map->includes_phdrs = 0;
5939             }
5940         }
5941       while (isec < section_count);
5942
5943       free (sections);
5944     }
5945
5946   elf_tdata (obfd)->segment_map = map_first;
5947
5948   /* If we had to estimate the number of program headers that were
5949      going to be needed, then check our estimate now and adjust
5950      the offset if necessary.  */
5951   if (phdr_adjust_seg != NULL)
5952     {
5953       unsigned int count;
5954
5955       for (count = 0, map = map_first; map != NULL; map = map->next)
5956         count++;
5957
5958       if (count > phdr_adjust_num)
5959         phdr_adjust_seg->p_paddr
5960           -= (count - phdr_adjust_num) * iehdr->e_phentsize;
5961     }
5962
5963 #undef SEGMENT_END
5964 #undef SECTION_SIZE
5965 #undef IS_CONTAINED_BY_VMA
5966 #undef IS_CONTAINED_BY_LMA
5967 #undef IS_NOTE
5968 #undef IS_COREFILE_NOTE
5969 #undef IS_SOLARIS_PT_INTERP
5970 #undef IS_SECTION_IN_INPUT_SEGMENT
5971 #undef INCLUDE_SECTION_IN_SEGMENT
5972 #undef SEGMENT_AFTER_SEGMENT
5973 #undef SEGMENT_OVERLAPS
5974   return TRUE;
5975 }
5976
5977 /* Copy ELF program header information.  */
5978
5979 static bfd_boolean
5980 copy_elf_program_header (bfd *ibfd, bfd *obfd)
5981 {
5982   Elf_Internal_Ehdr *iehdr;
5983   struct elf_segment_map *map;
5984   struct elf_segment_map *map_first;
5985   struct elf_segment_map **pointer_to_map;
5986   Elf_Internal_Phdr *segment;
5987   unsigned int i;
5988   unsigned int num_segments;
5989   bfd_boolean phdr_included = FALSE;
5990   bfd_boolean p_paddr_valid;
5991
5992   iehdr = elf_elfheader (ibfd);
5993
5994   map_first = NULL;
5995   pointer_to_map = &map_first;
5996
5997   /* If all the segment p_paddr fields are zero, don't set
5998      map->p_paddr_valid.  */
5999   p_paddr_valid = FALSE;
6000   num_segments = elf_elfheader (ibfd)->e_phnum;
6001   for (i = 0, segment = elf_tdata (ibfd)->phdr;
6002        i < num_segments;
6003        i++, segment++)
6004     if (segment->p_paddr != 0)
6005       {
6006         p_paddr_valid = TRUE;
6007         break;
6008       }
6009
6010   for (i = 0, segment = elf_tdata (ibfd)->phdr;
6011        i < num_segments;
6012        i++, segment++)
6013     {
6014       asection *section;
6015       unsigned int section_count;
6016       bfd_size_type amt;
6017       Elf_Internal_Shdr *this_hdr;
6018       asection *first_section = NULL;
6019       asection *lowest_section;
6020
6021       /* Compute how many sections are in this segment.  */
6022       for (section = ibfd->sections, section_count = 0;
6023            section != NULL;
6024            section = section->next)
6025         {
6026           this_hdr = &(elf_section_data(section)->this_hdr);
6027           if (ELF_SECTION_IN_SEGMENT (this_hdr, segment))
6028             {
6029               if (first_section == NULL)
6030                 first_section = section;
6031               section_count++;
6032             }
6033         }
6034
6035       /* Allocate a segment map big enough to contain
6036          all of the sections we have selected.  */
6037       amt = sizeof (struct elf_segment_map);
6038       if (section_count != 0)
6039         amt += ((bfd_size_type) section_count - 1) * sizeof (asection *);
6040       map = (struct elf_segment_map *) bfd_zalloc (obfd, amt);
6041       if (map == NULL)
6042         return FALSE;
6043
6044       /* Initialize the fields of the output segment map with the
6045          input segment.  */
6046       map->next = NULL;
6047       map->p_type = segment->p_type;
6048       map->p_flags = segment->p_flags;
6049       map->p_flags_valid = 1;
6050       map->p_paddr = segment->p_paddr;
6051       map->p_paddr_valid = p_paddr_valid;
6052       map->p_align = segment->p_align;
6053       map->p_align_valid = 1;
6054       map->p_vaddr_offset = 0;
6055
6056       if (map->p_type == PT_GNU_RELRO)
6057         {
6058           /* The PT_GNU_RELRO segment may contain the first a few
6059              bytes in the .got.plt section even if the whole .got.plt
6060              section isn't in the PT_GNU_RELRO segment.  We won't
6061              change the size of the PT_GNU_RELRO segment.  */
6062           map->p_size = segment->p_memsz;
6063           map->p_size_valid = 1;
6064         }
6065
6066       /* Determine if this segment contains the ELF file header
6067          and if it contains the program headers themselves.  */
6068       map->includes_filehdr = (segment->p_offset == 0
6069                                && segment->p_filesz >= iehdr->e_ehsize);
6070
6071       map->includes_phdrs = 0;
6072       if (! phdr_included || segment->p_type != PT_LOAD)
6073         {
6074           map->includes_phdrs =
6075             (segment->p_offset <= (bfd_vma) iehdr->e_phoff
6076              && (segment->p_offset + segment->p_filesz
6077                  >= ((bfd_vma) iehdr->e_phoff
6078                      + iehdr->e_phnum * iehdr->e_phentsize)));
6079
6080           if (segment->p_type == PT_LOAD && map->includes_phdrs)
6081             phdr_included = TRUE;
6082         }
6083
6084       lowest_section = first_section;
6085       if (section_count != 0)
6086         {
6087           unsigned int isec = 0;
6088
6089           for (section = first_section;
6090                section != NULL;
6091                section = section->next)
6092             {
6093               this_hdr = &(elf_section_data(section)->this_hdr);
6094               if (ELF_SECTION_IN_SEGMENT (this_hdr, segment))
6095                 {
6096                   map->sections[isec++] = section->output_section;
6097                   if (section->lma < lowest_section->lma)
6098                     lowest_section = section;
6099                   if ((section->flags & SEC_ALLOC) != 0)
6100                     {
6101                       bfd_vma seg_off;
6102
6103                       /* Section lmas are set up from PT_LOAD header
6104                          p_paddr in _bfd_elf_make_section_from_shdr.
6105                          If this header has a p_paddr that disagrees
6106                          with the section lma, flag the p_paddr as
6107                          invalid.  */
6108                       if ((section->flags & SEC_LOAD) != 0)
6109                         seg_off = this_hdr->sh_offset - segment->p_offset;
6110                       else
6111                         seg_off = this_hdr->sh_addr - segment->p_vaddr;
6112                       if (section->lma - segment->p_paddr != seg_off)
6113                         map->p_paddr_valid = FALSE;
6114                     }
6115                   if (isec == section_count)
6116                     break;
6117                 }
6118             }
6119         }
6120
6121       if (map->includes_filehdr && lowest_section != NULL)
6122         /* We need to keep the space used by the headers fixed.  */
6123         map->header_size = lowest_section->vma - segment->p_vaddr;
6124       
6125       if (!map->includes_phdrs
6126           && !map->includes_filehdr
6127           && map->p_paddr_valid)
6128         /* There is some other padding before the first section.  */
6129         map->p_vaddr_offset = ((lowest_section ? lowest_section->lma : 0)
6130                                - segment->p_paddr);
6131
6132       map->count = section_count;
6133       *pointer_to_map = map;
6134       pointer_to_map = &map->next;
6135     }
6136
6137   elf_tdata (obfd)->segment_map = map_first;
6138   return TRUE;
6139 }
6140
6141 /* Copy private BFD data.  This copies or rewrites ELF program header
6142    information.  */
6143
6144 static bfd_boolean
6145 copy_private_bfd_data (bfd *ibfd, bfd *obfd)
6146 {
6147   if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
6148       || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
6149     return TRUE;
6150
6151   if (elf_tdata (ibfd)->phdr == NULL)
6152     return TRUE;
6153
6154   if (ibfd->xvec == obfd->xvec)
6155     {
6156       /* Check to see if any sections in the input BFD
6157          covered by ELF program header have changed.  */
6158       Elf_Internal_Phdr *segment;
6159       asection *section, *osec;
6160       unsigned int i, num_segments;
6161       Elf_Internal_Shdr *this_hdr;
6162       const struct elf_backend_data *bed;
6163
6164       bed = get_elf_backend_data (ibfd);
6165
6166       /* Regenerate the segment map if p_paddr is set to 0.  */
6167       if (bed->want_p_paddr_set_to_zero)
6168         goto rewrite;
6169
6170       /* Initialize the segment mark field.  */
6171       for (section = obfd->sections; section != NULL;
6172            section = section->next)
6173         section->segment_mark = FALSE;
6174
6175       num_segments = elf_elfheader (ibfd)->e_phnum;
6176       for (i = 0, segment = elf_tdata (ibfd)->phdr;
6177            i < num_segments;
6178            i++, segment++)
6179         {
6180           /* PR binutils/3535.  The Solaris linker always sets the p_paddr
6181              and p_memsz fields of special segments (DYNAMIC, INTERP) to 0
6182              which severly confuses things, so always regenerate the segment
6183              map in this case.  */
6184           if (segment->p_paddr == 0
6185               && segment->p_memsz == 0
6186               && (segment->p_type == PT_INTERP || segment->p_type == PT_DYNAMIC))
6187             goto rewrite;
6188
6189           for (section = ibfd->sections;
6190                section != NULL; section = section->next)
6191             {
6192               /* We mark the output section so that we know it comes
6193                  from the input BFD.  */
6194               osec = section->output_section;
6195               if (osec)
6196                 osec->segment_mark = TRUE;
6197
6198               /* Check if this section is covered by the segment.  */
6199               this_hdr = &(elf_section_data(section)->this_hdr);
6200               if (ELF_SECTION_IN_SEGMENT (this_hdr, segment))
6201                 {
6202                   /* FIXME: Check if its output section is changed or
6203                      removed.  What else do we need to check?  */
6204                   if (osec == NULL
6205                       || section->flags != osec->flags
6206                       || section->lma != osec->lma
6207                       || section->vma != osec->vma
6208                       || section->size != osec->size
6209                       || section->rawsize != osec->rawsize
6210                       || section->alignment_power != osec->alignment_power)
6211                     goto rewrite;
6212                 }
6213             }
6214         }
6215
6216       /* Check to see if any output section do not come from the
6217          input BFD.  */
6218       for (section = obfd->sections; section != NULL;
6219            section = section->next)
6220         {
6221           if (section->segment_mark == FALSE)
6222             goto rewrite;
6223           else
6224             section->segment_mark = FALSE;
6225         }
6226
6227       return copy_elf_program_header (ibfd, obfd);
6228     }
6229
6230 rewrite:
6231   return rewrite_elf_program_header (ibfd, obfd);
6232 }
6233
6234 /* Initialize private output section information from input section.  */
6235
6236 bfd_boolean
6237 _bfd_elf_init_private_section_data (bfd *ibfd,
6238                                     asection *isec,
6239                                     bfd *obfd,
6240                                     asection *osec,
6241                                     struct bfd_link_info *link_info)
6242
6243 {
6244   Elf_Internal_Shdr *ihdr, *ohdr;
6245   bfd_boolean final_link = link_info != NULL && !link_info->relocatable;
6246
6247   if (ibfd->xvec->flavour != bfd_target_elf_flavour
6248       || obfd->xvec->flavour != bfd_target_elf_flavour)
6249     return TRUE;
6250
6251   /* For objcopy and relocatable link, don't copy the output ELF
6252      section type from input if the output BFD section flags have been
6253      set to something different.  For a final link allow some flags
6254      that the linker clears to differ.  */
6255   if (elf_section_type (osec) == SHT_NULL
6256       && (osec->flags == isec->flags
6257           || (final_link
6258               && ((osec->flags ^ isec->flags)
6259                   & ~(SEC_LINK_ONCE | SEC_LINK_DUPLICATES | SEC_RELOC)) == 0)))
6260     elf_section_type (osec) = elf_section_type (isec);
6261
6262   /* FIXME: Is this correct for all OS/PROC specific flags?  */
6263   elf_section_flags (osec) |= (elf_section_flags (isec)
6264                                & (SHF_MASKOS | SHF_MASKPROC));
6265
6266   /* Set things up for objcopy and relocatable link.  The output
6267      SHT_GROUP section will have its elf_next_in_group pointing back
6268      to the input group members.  Ignore linker created group section.
6269      See elfNN_ia64_object_p in elfxx-ia64.c.  */
6270   if (!final_link)
6271     {
6272       if (elf_sec_group (isec) == NULL
6273           || (elf_sec_group (isec)->flags & SEC_LINKER_CREATED) == 0)
6274         {
6275           if (elf_section_flags (isec) & SHF_GROUP)
6276             elf_section_flags (osec) |= SHF_GROUP;
6277           elf_next_in_group (osec) = elf_next_in_group (isec);
6278           elf_section_data (osec)->group = elf_section_data (isec)->group;
6279         }
6280     }
6281
6282   ihdr = &elf_section_data (isec)->this_hdr;
6283
6284   /* We need to handle elf_linked_to_section for SHF_LINK_ORDER. We
6285      don't use the output section of the linked-to section since it
6286      may be NULL at this point.  */
6287   if ((ihdr->sh_flags & SHF_LINK_ORDER) != 0)
6288     {
6289       ohdr = &elf_section_data (osec)->this_hdr;
6290       ohdr->sh_flags |= SHF_LINK_ORDER;
6291       elf_linked_to_section (osec) = elf_linked_to_section (isec);
6292     }
6293
6294   osec->use_rela_p = isec->use_rela_p;
6295
6296   return TRUE;
6297 }
6298
6299 /* Copy private section information.  This copies over the entsize
6300    field, and sometimes the info field.  */
6301
6302 bfd_boolean
6303 _bfd_elf_copy_private_section_data (bfd *ibfd,
6304                                     asection *isec,
6305                                     bfd *obfd,
6306                                     asection *osec)
6307 {
6308   Elf_Internal_Shdr *ihdr, *ohdr;
6309
6310   if (ibfd->xvec->flavour != bfd_target_elf_flavour
6311       || obfd->xvec->flavour != bfd_target_elf_flavour)
6312     return TRUE;
6313
6314   ihdr = &elf_section_data (isec)->this_hdr;
6315   ohdr = &elf_section_data (osec)->this_hdr;
6316
6317   ohdr->sh_entsize = ihdr->sh_entsize;
6318
6319   if (ihdr->sh_type == SHT_SYMTAB
6320       || ihdr->sh_type == SHT_DYNSYM
6321       || ihdr->sh_type == SHT_GNU_verneed
6322       || ihdr->sh_type == SHT_GNU_verdef)
6323     ohdr->sh_info = ihdr->sh_info;
6324
6325   return _bfd_elf_init_private_section_data (ibfd, isec, obfd, osec,
6326                                              NULL);
6327 }
6328
6329 /* Look at all the SHT_GROUP sections in IBFD, making any adjustments
6330    necessary if we are removing either the SHT_GROUP section or any of
6331    the group member sections.  DISCARDED is the value that a section's
6332    output_section has if the section will be discarded, NULL when this
6333    function is called from objcopy, bfd_abs_section_ptr when called
6334    from the linker.  */
6335
6336 bfd_boolean
6337 _bfd_elf_fixup_group_sections (bfd *ibfd, asection *discarded)
6338 {
6339   asection *isec;
6340
6341   for (isec = ibfd->sections; isec != NULL; isec = isec->next)
6342     if (elf_section_type (isec) == SHT_GROUP)
6343       {
6344         asection *first = elf_next_in_group (isec);
6345         asection *s = first;
6346         bfd_size_type removed = 0;
6347
6348         while (s != NULL)
6349           {
6350             /* If this member section is being output but the
6351                SHT_GROUP section is not, then clear the group info
6352                set up by _bfd_elf_copy_private_section_data.  */
6353             if (s->output_section != discarded
6354                 && isec->output_section == discarded)
6355               {
6356                 elf_section_flags (s->output_section) &= ~SHF_GROUP;
6357                 elf_group_name (s->output_section) = NULL;
6358               }
6359             /* Conversely, if the member section is not being output
6360                but the SHT_GROUP section is, then adjust its size.  */
6361             else if (s->output_section == discarded
6362                      && isec->output_section != discarded)
6363               removed += 4;
6364             s = elf_next_in_group (s);
6365             if (s == first)
6366               break;
6367           }
6368         if (removed != 0)
6369           {
6370             if (discarded != NULL)
6371               {
6372                 /* If we've been called for ld -r, then we need to
6373                    adjust the input section size.  This function may
6374                    be called multiple times, so save the original
6375                    size.  */
6376                 if (isec->rawsize == 0)
6377                   isec->rawsize = isec->size;
6378                 isec->size = isec->rawsize - removed;
6379               }
6380             else
6381               {
6382                 /* Adjust the output section size when called from
6383                    objcopy. */
6384                 isec->output_section->size -= removed;
6385               }
6386           }
6387       }
6388
6389   return TRUE;
6390 }
6391
6392 /* Copy private header information.  */
6393
6394 bfd_boolean
6395 _bfd_elf_copy_private_header_data (bfd *ibfd, bfd *obfd)
6396 {
6397   if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
6398       || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
6399     return TRUE;
6400
6401   /* Copy over private BFD data if it has not already been copied.
6402      This must be done here, rather than in the copy_private_bfd_data
6403      entry point, because the latter is called after the section
6404      contents have been set, which means that the program headers have
6405      already been worked out.  */
6406   if (elf_tdata (obfd)->segment_map == NULL && elf_tdata (ibfd)->phdr != NULL)
6407     {
6408       if (! copy_private_bfd_data (ibfd, obfd))
6409         return FALSE;
6410     }
6411
6412   return _bfd_elf_fixup_group_sections (ibfd, NULL);
6413 }
6414
6415 /* Copy private symbol information.  If this symbol is in a section
6416    which we did not map into a BFD section, try to map the section
6417    index correctly.  We use special macro definitions for the mapped
6418    section indices; these definitions are interpreted by the
6419    swap_out_syms function.  */
6420
6421 #define MAP_ONESYMTAB (SHN_HIOS + 1)
6422 #define MAP_DYNSYMTAB (SHN_HIOS + 2)
6423 #define MAP_STRTAB    (SHN_HIOS + 3)
6424 #define MAP_SHSTRTAB  (SHN_HIOS + 4)
6425 #define MAP_SYM_SHNDX (SHN_HIOS + 5)
6426
6427 bfd_boolean
6428 _bfd_elf_copy_private_symbol_data (bfd *ibfd,
6429                                    asymbol *isymarg,
6430                                    bfd *obfd,
6431                                    asymbol *osymarg)
6432 {
6433   elf_symbol_type *isym, *osym;
6434
6435   if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
6436       || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
6437     return TRUE;
6438
6439   isym = elf_symbol_from (ibfd, isymarg);
6440   osym = elf_symbol_from (obfd, osymarg);
6441
6442   if (isym != NULL
6443       && isym->internal_elf_sym.st_shndx != 0
6444       && osym != NULL
6445       && bfd_is_abs_section (isym->symbol.section))
6446     {
6447       unsigned int shndx;
6448
6449       shndx = isym->internal_elf_sym.st_shndx;
6450       if (shndx == elf_onesymtab (ibfd))
6451         shndx = MAP_ONESYMTAB;
6452       else if (shndx == elf_dynsymtab (ibfd))
6453         shndx = MAP_DYNSYMTAB;
6454       else if (shndx == elf_tdata (ibfd)->strtab_section)
6455         shndx = MAP_STRTAB;
6456       else if (shndx == elf_tdata (ibfd)->shstrtab_section)
6457         shndx = MAP_SHSTRTAB;
6458       else if (shndx == elf_tdata (ibfd)->symtab_shndx_section)
6459         shndx = MAP_SYM_SHNDX;
6460       osym->internal_elf_sym.st_shndx = shndx;
6461     }
6462
6463   return TRUE;
6464 }
6465
6466 /* Swap out the symbols.  */
6467
6468 static bfd_boolean
6469 swap_out_syms (bfd *abfd,
6470                struct bfd_strtab_hash **sttp,
6471                int relocatable_p)
6472 {
6473   const struct elf_backend_data *bed;
6474   int symcount;
6475   asymbol **syms;
6476   struct bfd_strtab_hash *stt;
6477   Elf_Internal_Shdr *symtab_hdr;
6478   Elf_Internal_Shdr *symtab_shndx_hdr;
6479   Elf_Internal_Shdr *symstrtab_hdr;
6480   bfd_byte *outbound_syms;
6481   bfd_byte *outbound_shndx;
6482   int idx;
6483   bfd_size_type amt;
6484   bfd_boolean name_local_sections;
6485
6486   if (!elf_map_symbols (abfd))
6487     return FALSE;
6488
6489   /* Dump out the symtabs.  */
6490   stt = _bfd_elf_stringtab_init ();
6491   if (stt == NULL)
6492     return FALSE;
6493
6494   bed = get_elf_backend_data (abfd);
6495   symcount = bfd_get_symcount (abfd);
6496   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
6497   symtab_hdr->sh_type = SHT_SYMTAB;
6498   symtab_hdr->sh_entsize = bed->s->sizeof_sym;
6499   symtab_hdr->sh_size = symtab_hdr->sh_entsize * (symcount + 1);
6500   symtab_hdr->sh_info = elf_num_locals (abfd) + 1;
6501   symtab_hdr->sh_addralign = (bfd_vma) 1 << bed->s->log_file_align;
6502
6503   symstrtab_hdr = &elf_tdata (abfd)->strtab_hdr;
6504   symstrtab_hdr->sh_type = SHT_STRTAB;
6505
6506   outbound_syms = (bfd_byte *) bfd_alloc2 (abfd, 1 + symcount,
6507                                            bed->s->sizeof_sym);
6508   if (outbound_syms == NULL)
6509     {
6510       _bfd_stringtab_free (stt);
6511       return FALSE;
6512     }
6513   symtab_hdr->contents = outbound_syms;
6514
6515   outbound_shndx = NULL;
6516   symtab_shndx_hdr = &elf_tdata (abfd)->symtab_shndx_hdr;
6517   if (symtab_shndx_hdr->sh_name != 0)
6518     {
6519       amt = (bfd_size_type) (1 + symcount) * sizeof (Elf_External_Sym_Shndx);
6520       outbound_shndx =  (bfd_byte *)
6521           bfd_zalloc2 (abfd, 1 + symcount, sizeof (Elf_External_Sym_Shndx));
6522       if (outbound_shndx == NULL)
6523         {
6524           _bfd_stringtab_free (stt);
6525           return FALSE;
6526         }
6527
6528       symtab_shndx_hdr->contents = outbound_shndx;
6529       symtab_shndx_hdr->sh_type = SHT_SYMTAB_SHNDX;
6530       symtab_shndx_hdr->sh_size = amt;
6531       symtab_shndx_hdr->sh_addralign = sizeof (Elf_External_Sym_Shndx);
6532       symtab_shndx_hdr->sh_entsize = sizeof (Elf_External_Sym_Shndx);
6533     }
6534
6535   /* Now generate the data (for "contents").  */
6536   {
6537     /* Fill in zeroth symbol and swap it out.  */
6538     Elf_Internal_Sym sym;
6539     sym.st_name = 0;
6540     sym.st_value = 0;
6541     sym.st_size = 0;
6542     sym.st_info = 0;
6543     sym.st_other = 0;
6544     sym.st_shndx = SHN_UNDEF;
6545     sym.st_target_internal = 0;
6546     bed->s->swap_symbol_out (abfd, &sym, outbound_syms, outbound_shndx);
6547     outbound_syms += bed->s->sizeof_sym;
6548     if (outbound_shndx != NULL)
6549       outbound_shndx += sizeof (Elf_External_Sym_Shndx);
6550   }
6551
6552   name_local_sections
6553     = (bed->elf_backend_name_local_section_symbols
6554        && bed->elf_backend_name_local_section_symbols (abfd));
6555
6556   syms = bfd_get_outsymbols (abfd);
6557   for (idx = 0; idx < symcount; idx++)
6558     {
6559       Elf_Internal_Sym sym;
6560       bfd_vma value = syms[idx]->value;
6561       elf_symbol_type *type_ptr;
6562       flagword flags = syms[idx]->flags;
6563       int type;
6564
6565       if (!name_local_sections
6566           && (flags & (BSF_SECTION_SYM | BSF_GLOBAL)) == BSF_SECTION_SYM)
6567         {
6568           /* Local section symbols have no name.  */
6569           sym.st_name = 0;
6570         }
6571       else
6572         {
6573           sym.st_name = (unsigned long) _bfd_stringtab_add (stt,
6574                                                             syms[idx]->name,
6575                                                             TRUE, FALSE);
6576           if (sym.st_name == (unsigned long) -1)
6577             {
6578               _bfd_stringtab_free (stt);
6579               return FALSE;
6580             }
6581         }
6582
6583       type_ptr = elf_symbol_from (abfd, syms[idx]);
6584
6585       if ((flags & BSF_SECTION_SYM) == 0
6586           && bfd_is_com_section (syms[idx]->section))
6587         {
6588           /* ELF common symbols put the alignment into the `value' field,
6589              and the size into the `size' field.  This is backwards from
6590              how BFD handles it, so reverse it here.  */
6591           sym.st_size = value;
6592           if (type_ptr == NULL
6593               || type_ptr->internal_elf_sym.st_value == 0)
6594             sym.st_value = value >= 16 ? 16 : (1 << bfd_log2 (value));
6595           else
6596             sym.st_value = type_ptr->internal_elf_sym.st_value;
6597           sym.st_shndx = _bfd_elf_section_from_bfd_section
6598             (abfd, syms[idx]->section);
6599         }
6600       else
6601         {
6602           asection *sec = syms[idx]->section;
6603           unsigned int shndx;
6604
6605           if (sec->output_section)
6606             {
6607               value += sec->output_offset;
6608               sec = sec->output_section;
6609             }
6610
6611           /* Don't add in the section vma for relocatable output.  */
6612           if (! relocatable_p)
6613             value += sec->vma;
6614           sym.st_value = value;
6615           sym.st_size = type_ptr ? type_ptr->internal_elf_sym.st_size : 0;
6616
6617           if (bfd_is_abs_section (sec)
6618               && type_ptr != NULL
6619               && type_ptr->internal_elf_sym.st_shndx != 0)
6620             {
6621               /* This symbol is in a real ELF section which we did
6622                  not create as a BFD section.  Undo the mapping done
6623                  by copy_private_symbol_data.  */
6624               shndx = type_ptr->internal_elf_sym.st_shndx;
6625               switch (shndx)
6626                 {
6627                 case MAP_ONESYMTAB:
6628                   shndx = elf_onesymtab (abfd);
6629                   break;
6630                 case MAP_DYNSYMTAB:
6631                   shndx = elf_dynsymtab (abfd);
6632                   break;
6633                 case MAP_STRTAB:
6634                   shndx = elf_tdata (abfd)->strtab_section;
6635                   break;
6636                 case MAP_SHSTRTAB:
6637                   shndx = elf_tdata (abfd)->shstrtab_section;
6638                   break;
6639                 case MAP_SYM_SHNDX:
6640                   shndx = elf_tdata (abfd)->symtab_shndx_section;
6641                   break;
6642                 default:
6643                   break;
6644                 }
6645             }
6646           else
6647             {
6648               shndx = _bfd_elf_section_from_bfd_section (abfd, sec);
6649
6650               if (shndx == SHN_BAD)
6651                 {
6652                   asection *sec2;
6653
6654                   /* Writing this would be a hell of a lot easier if
6655                      we had some decent documentation on bfd, and
6656                      knew what to expect of the library, and what to
6657                      demand of applications.  For example, it
6658                      appears that `objcopy' might not set the
6659                      section of a symbol to be a section that is
6660                      actually in the output file.  */
6661                   sec2 = bfd_get_section_by_name (abfd, sec->name);
6662                   if (sec2 == NULL)
6663                     {
6664                       _bfd_error_handler (_("\
6665 Unable to find equivalent output section for symbol '%s' from section '%s'"),
6666                                           syms[idx]->name ? syms[idx]->name : "<Local sym>",
6667                                           sec->name);
6668                       bfd_set_error (bfd_error_invalid_operation);
6669                       _bfd_stringtab_free (stt);
6670                       return FALSE;
6671                     }
6672
6673                   shndx = _bfd_elf_section_from_bfd_section (abfd, sec2);
6674                   BFD_ASSERT (shndx != SHN_BAD);
6675                 }
6676             }
6677
6678           sym.st_shndx = shndx;
6679         }
6680
6681       if ((flags & BSF_THREAD_LOCAL) != 0)
6682         type = STT_TLS;
6683       else if ((flags & BSF_GNU_INDIRECT_FUNCTION) != 0)
6684         type = STT_GNU_IFUNC;
6685       else if ((flags & BSF_FUNCTION) != 0)
6686         type = STT_FUNC;
6687       else if ((flags & BSF_OBJECT) != 0)
6688         type = STT_OBJECT;
6689       else if ((flags & BSF_RELC) != 0)
6690         type = STT_RELC;
6691       else if ((flags & BSF_SRELC) != 0)
6692         type = STT_SRELC;
6693       else
6694         type = STT_NOTYPE;
6695
6696       if (syms[idx]->section->flags & SEC_THREAD_LOCAL)
6697         type = STT_TLS;
6698
6699       /* Processor-specific types.  */
6700       if (type_ptr != NULL
6701           && bed->elf_backend_get_symbol_type)
6702         type = ((*bed->elf_backend_get_symbol_type)
6703                 (&type_ptr->internal_elf_sym, type));
6704
6705       if (flags & BSF_SECTION_SYM)
6706         {
6707           if (flags & BSF_GLOBAL)
6708             sym.st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
6709           else
6710             sym.st_info = ELF_ST_INFO (STB_LOCAL, STT_SECTION);
6711         }
6712       else if (bfd_is_com_section (syms[idx]->section))
6713         {
6714 #ifdef USE_STT_COMMON
6715           if (type == STT_OBJECT)
6716             sym.st_info = ELF_ST_INFO (STB_GLOBAL, STT_COMMON);
6717           else
6718 #endif
6719             sym.st_info = ELF_ST_INFO (STB_GLOBAL, type);
6720         }
6721       else if (bfd_is_und_section (syms[idx]->section))
6722         sym.st_info = ELF_ST_INFO (((flags & BSF_WEAK)
6723                                     ? STB_WEAK
6724                                     : STB_GLOBAL),
6725                                    type);
6726       else if (flags & BSF_FILE)
6727         sym.st_info = ELF_ST_INFO (STB_LOCAL, STT_FILE);
6728       else
6729         {
6730           int bind = STB_LOCAL;
6731
6732           if (flags & BSF_LOCAL)
6733             bind = STB_LOCAL;
6734           else if (flags & BSF_GNU_UNIQUE)
6735             bind = STB_GNU_UNIQUE;
6736           else if (flags & BSF_WEAK)
6737             bind = STB_WEAK;
6738           else if (flags & BSF_GLOBAL)
6739             bind = STB_GLOBAL;
6740
6741           sym.st_info = ELF_ST_INFO (bind, type);
6742         }
6743
6744       if (type_ptr != NULL)
6745         {
6746           sym.st_other = type_ptr->internal_elf_sym.st_other;
6747           sym.st_target_internal
6748             = type_ptr->internal_elf_sym.st_target_internal;
6749         }
6750       else
6751         {
6752           sym.st_other = 0;
6753           sym.st_target_internal = 0;
6754         }
6755
6756       bed->s->swap_symbol_out (abfd, &sym, outbound_syms, outbound_shndx);
6757       outbound_syms += bed->s->sizeof_sym;
6758       if (outbound_shndx != NULL)
6759         outbound_shndx += sizeof (Elf_External_Sym_Shndx);
6760     }
6761
6762   *sttp = stt;
6763   symstrtab_hdr->sh_size = _bfd_stringtab_size (stt);
6764   symstrtab_hdr->sh_type = SHT_STRTAB;
6765
6766   symstrtab_hdr->sh_flags = 0;
6767   symstrtab_hdr->sh_addr = 0;
6768   symstrtab_hdr->sh_entsize = 0;
6769   symstrtab_hdr->sh_link = 0;
6770   symstrtab_hdr->sh_info = 0;
6771   symstrtab_hdr->sh_addralign = 1;
6772
6773   return TRUE;
6774 }
6775
6776 /* Return the number of bytes required to hold the symtab vector.
6777
6778    Note that we base it on the count plus 1, since we will null terminate
6779    the vector allocated based on this size.  However, the ELF symbol table
6780    always has a dummy entry as symbol #0, so it ends up even.  */
6781
6782 long
6783 _bfd_elf_get_symtab_upper_bound (bfd *abfd)
6784 {
6785   long symcount;
6786   long symtab_size;
6787   Elf_Internal_Shdr *hdr = &elf_tdata (abfd)->symtab_hdr;
6788
6789   symcount = hdr->sh_size / get_elf_backend_data (abfd)->s->sizeof_sym;
6790   symtab_size = (symcount + 1) * (sizeof (asymbol *));
6791   if (symcount > 0)
6792     symtab_size -= sizeof (asymbol *);
6793
6794   return symtab_size;
6795 }
6796
6797 long
6798 _bfd_elf_get_dynamic_symtab_upper_bound (bfd *abfd)
6799 {
6800   long symcount;
6801   long symtab_size;
6802   Elf_Internal_Shdr *hdr = &elf_tdata (abfd)->dynsymtab_hdr;
6803
6804   if (elf_dynsymtab (abfd) == 0)
6805     {
6806       bfd_set_error (bfd_error_invalid_operation);
6807       return -1;
6808     }
6809
6810   symcount = hdr->sh_size / get_elf_backend_data (abfd)->s->sizeof_sym;
6811   symtab_size = (symcount + 1) * (sizeof (asymbol *));
6812   if (symcount > 0)
6813     symtab_size -= sizeof (asymbol *);
6814
6815   return symtab_size;
6816 }
6817
6818 long
6819 _bfd_elf_get_reloc_upper_bound (bfd *abfd ATTRIBUTE_UNUSED,
6820                                 sec_ptr asect)
6821 {
6822   return (asect->reloc_count + 1) * sizeof (arelent *);
6823 }
6824
6825 /* Canonicalize the relocs.  */
6826
6827 long
6828 _bfd_elf_canonicalize_reloc (bfd *abfd,
6829                              sec_ptr section,
6830                              arelent **relptr,
6831                              asymbol **symbols)
6832 {
6833   arelent *tblptr;
6834   unsigned int i;
6835   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
6836
6837   if (! bed->s->slurp_reloc_table (abfd, section, symbols, FALSE))
6838     return -1;
6839
6840   tblptr = section->relocation;
6841   for (i = 0; i < section->reloc_count; i++)
6842     *relptr++ = tblptr++;
6843
6844   *relptr = NULL;
6845
6846   return section->reloc_count;
6847 }
6848
6849 long
6850 _bfd_elf_canonicalize_symtab (bfd *abfd, asymbol **allocation)
6851 {
6852   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
6853   long symcount = bed->s->slurp_symbol_table (abfd, allocation, FALSE);
6854
6855   if (symcount >= 0)
6856     bfd_get_symcount (abfd) = symcount;
6857   return symcount;
6858 }
6859
6860 long
6861 _bfd_elf_canonicalize_dynamic_symtab (bfd *abfd,
6862                                       asymbol **allocation)
6863 {
6864   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
6865   long symcount = bed->s->slurp_symbol_table (abfd, allocation, TRUE);
6866
6867   if (symcount >= 0)
6868     bfd_get_dynamic_symcount (abfd) = symcount;
6869   return symcount;
6870 }
6871
6872 /* Return the size required for the dynamic reloc entries.  Any loadable
6873    section that was actually installed in the BFD, and has type SHT_REL
6874    or SHT_RELA, and uses the dynamic symbol table, is considered to be a
6875    dynamic reloc section.  */
6876
6877 long
6878 _bfd_elf_get_dynamic_reloc_upper_bound (bfd *abfd)
6879 {
6880   long ret;
6881   asection *s;
6882
6883   if (elf_dynsymtab (abfd) == 0)
6884     {
6885       bfd_set_error (bfd_error_invalid_operation);
6886       return -1;
6887     }
6888
6889   ret = sizeof (arelent *);
6890   for (s = abfd->sections; s != NULL; s = s->next)
6891     if (elf_section_data (s)->this_hdr.sh_link == elf_dynsymtab (abfd)
6892         && (elf_section_data (s)->this_hdr.sh_type == SHT_REL
6893             || elf_section_data (s)->this_hdr.sh_type == SHT_RELA))
6894       ret += ((s->size / elf_section_data (s)->this_hdr.sh_entsize)
6895               * sizeof (arelent *));
6896
6897   return ret;
6898 }
6899
6900 /* Canonicalize the dynamic relocation entries.  Note that we return the
6901    dynamic relocations as a single block, although they are actually
6902    associated with particular sections; the interface, which was
6903    designed for SunOS style shared libraries, expects that there is only
6904    one set of dynamic relocs.  Any loadable section that was actually
6905    installed in the BFD, and has type SHT_REL or SHT_RELA, and uses the
6906    dynamic symbol table, is considered to be a dynamic reloc section.  */
6907
6908 long
6909 _bfd_elf_canonicalize_dynamic_reloc (bfd *abfd,
6910                                      arelent **storage,
6911                                      asymbol **syms)
6912 {
6913   bfd_boolean (*slurp_relocs) (bfd *, asection *, asymbol **, bfd_boolean);
6914   asection *s;
6915   long ret;
6916
6917   if (elf_dynsymtab (abfd) == 0)
6918     {
6919       bfd_set_error (bfd_error_invalid_operation);
6920       return -1;
6921     }
6922
6923   slurp_relocs = get_elf_backend_data (abfd)->s->slurp_reloc_table;
6924   ret = 0;
6925   for (s = abfd->sections; s != NULL; s = s->next)
6926     {
6927       if (elf_section_data (s)->this_hdr.sh_link == elf_dynsymtab (abfd)
6928           && (elf_section_data (s)->this_hdr.sh_type == SHT_REL
6929               || elf_section_data (s)->this_hdr.sh_type == SHT_RELA))
6930         {
6931           arelent *p;
6932           long count, i;
6933
6934           if (! (*slurp_relocs) (abfd, s, syms, TRUE))
6935             return -1;
6936           count = s->size / elf_section_data (s)->this_hdr.sh_entsize;
6937           p = s->relocation;
6938           for (i = 0; i < count; i++)
6939             *storage++ = p++;
6940           ret += count;
6941         }
6942     }
6943
6944   *storage = NULL;
6945
6946   return ret;
6947 }
6948 \f
6949 /* Read in the version information.  */
6950
6951 bfd_boolean
6952 _bfd_elf_slurp_version_tables (bfd *abfd, bfd_boolean default_imported_symver)
6953 {
6954   bfd_byte *contents = NULL;
6955   unsigned int freeidx = 0;
6956
6957   if (elf_dynverref (abfd) != 0)
6958     {
6959       Elf_Internal_Shdr *hdr;
6960       Elf_External_Verneed *everneed;
6961       Elf_Internal_Verneed *iverneed;
6962       unsigned int i;
6963       bfd_byte *contents_end;
6964
6965       hdr = &elf_tdata (abfd)->dynverref_hdr;
6966
6967       elf_tdata (abfd)->verref = (Elf_Internal_Verneed *)
6968           bfd_zalloc2 (abfd, hdr->sh_info, sizeof (Elf_Internal_Verneed));
6969       if (elf_tdata (abfd)->verref == NULL)
6970         goto error_return;
6971
6972       elf_tdata (abfd)->cverrefs = hdr->sh_info;
6973
6974       contents = (bfd_byte *) bfd_malloc (hdr->sh_size);
6975       if (contents == NULL)
6976         {
6977 error_return_verref:
6978           elf_tdata (abfd)->verref = NULL;
6979           elf_tdata (abfd)->cverrefs = 0;
6980           goto error_return;
6981         }
6982       if (bfd_seek (abfd, hdr->sh_offset, SEEK_SET) != 0
6983           || bfd_bread (contents, hdr->sh_size, abfd) != hdr->sh_size)
6984         goto error_return_verref;
6985
6986       if (hdr->sh_info && hdr->sh_size < sizeof (Elf_External_Verneed))
6987         goto error_return_verref;
6988
6989       BFD_ASSERT (sizeof (Elf_External_Verneed)
6990                   == sizeof (Elf_External_Vernaux));
6991       contents_end = contents + hdr->sh_size - sizeof (Elf_External_Verneed);
6992       everneed = (Elf_External_Verneed *) contents;
6993       iverneed = elf_tdata (abfd)->verref;
6994       for (i = 0; i < hdr->sh_info; i++, iverneed++)
6995         {
6996           Elf_External_Vernaux *evernaux;
6997           Elf_Internal_Vernaux *ivernaux;
6998           unsigned int j;
6999
7000           _bfd_elf_swap_verneed_in (abfd, everneed, iverneed);
7001
7002           iverneed->vn_bfd = abfd;
7003
7004           iverneed->vn_filename =
7005             bfd_elf_string_from_elf_section (abfd, hdr->sh_link,
7006                                              iverneed->vn_file);
7007           if (iverneed->vn_filename == NULL)
7008             goto error_return_verref;
7009
7010           if (iverneed->vn_cnt == 0)
7011             iverneed->vn_auxptr = NULL;
7012           else
7013             {
7014               iverneed->vn_auxptr = (struct elf_internal_vernaux *)
7015                   bfd_alloc2 (abfd, iverneed->vn_cnt,
7016                               sizeof (Elf_Internal_Vernaux));
7017               if (iverneed->vn_auxptr == NULL)
7018                 goto error_return_verref;
7019             }
7020
7021           if (iverneed->vn_aux
7022               > (size_t) (contents_end - (bfd_byte *) everneed))
7023             goto error_return_verref;
7024
7025           evernaux = ((Elf_External_Vernaux *)
7026                       ((bfd_byte *) everneed + iverneed->vn_aux));
7027           ivernaux = iverneed->vn_auxptr;
7028           for (j = 0; j < iverneed->vn_cnt; j++, ivernaux++)
7029             {
7030               _bfd_elf_swap_vernaux_in (abfd, evernaux, ivernaux);
7031
7032               ivernaux->vna_nodename =
7033                 bfd_elf_string_from_elf_section (abfd, hdr->sh_link,
7034                                                  ivernaux->vna_name);
7035               if (ivernaux->vna_nodename == NULL)
7036                 goto error_return_verref;
7037
7038               if (j + 1 < iverneed->vn_cnt)
7039                 ivernaux->vna_nextptr = ivernaux + 1;
7040               else
7041                 ivernaux->vna_nextptr = NULL;
7042
7043               if (ivernaux->vna_next
7044                   > (size_t) (contents_end - (bfd_byte *) evernaux))
7045                 goto error_return_verref;
7046
7047               evernaux = ((Elf_External_Vernaux *)
7048                           ((bfd_byte *) evernaux + ivernaux->vna_next));
7049
7050               if (ivernaux->vna_other > freeidx)
7051                 freeidx = ivernaux->vna_other;
7052             }
7053
7054           if (i + 1 < hdr->sh_info)
7055             iverneed->vn_nextref = iverneed + 1;
7056           else
7057             iverneed->vn_nextref = NULL;
7058
7059           if (iverneed->vn_next
7060               > (size_t) (contents_end - (bfd_byte *) everneed))
7061             goto error_return_verref;
7062
7063           everneed = ((Elf_External_Verneed *)
7064                       ((bfd_byte *) everneed + iverneed->vn_next));
7065         }
7066
7067       free (contents);
7068       contents = NULL;
7069     }
7070
7071   if (elf_dynverdef (abfd) != 0)
7072     {
7073       Elf_Internal_Shdr *hdr;
7074       Elf_External_Verdef *everdef;
7075       Elf_Internal_Verdef *iverdef;
7076       Elf_Internal_Verdef *iverdefarr;
7077       Elf_Internal_Verdef iverdefmem;
7078       unsigned int i;
7079       unsigned int maxidx;
7080       bfd_byte *contents_end_def, *contents_end_aux;
7081
7082       hdr = &elf_tdata (abfd)->dynverdef_hdr;
7083
7084       contents = (bfd_byte *) bfd_malloc (hdr->sh_size);
7085       if (contents == NULL)
7086         goto error_return;
7087       if (bfd_seek (abfd, hdr->sh_offset, SEEK_SET) != 0
7088           || bfd_bread (contents, hdr->sh_size, abfd) != hdr->sh_size)
7089         goto error_return;
7090
7091       if (hdr->sh_info && hdr->sh_size < sizeof (Elf_External_Verdef))
7092         goto error_return;
7093
7094       BFD_ASSERT (sizeof (Elf_External_Verdef)
7095                   >= sizeof (Elf_External_Verdaux));
7096       contents_end_def = contents + hdr->sh_size
7097                          - sizeof (Elf_External_Verdef);
7098       contents_end_aux = contents + hdr->sh_size
7099                          - sizeof (Elf_External_Verdaux);
7100
7101       /* We know the number of entries in the section but not the maximum
7102          index.  Therefore we have to run through all entries and find
7103          the maximum.  */
7104       everdef = (Elf_External_Verdef *) contents;
7105       maxidx = 0;
7106       for (i = 0; i < hdr->sh_info; ++i)
7107         {
7108           _bfd_elf_swap_verdef_in (abfd, everdef, &iverdefmem);
7109
7110           if ((iverdefmem.vd_ndx & ((unsigned) VERSYM_VERSION)) > maxidx)
7111             maxidx = iverdefmem.vd_ndx & ((unsigned) VERSYM_VERSION);
7112
7113           if (iverdefmem.vd_next
7114               > (size_t) (contents_end_def - (bfd_byte *) everdef))
7115             goto error_return;
7116
7117           everdef = ((Elf_External_Verdef *)
7118                      ((bfd_byte *) everdef + iverdefmem.vd_next));
7119         }
7120
7121       if (default_imported_symver)
7122         {
7123           if (freeidx > maxidx)
7124             maxidx = ++freeidx;
7125           else
7126             freeidx = ++maxidx;
7127         }
7128       elf_tdata (abfd)->verdef = (Elf_Internal_Verdef *)
7129           bfd_zalloc2 (abfd, maxidx, sizeof (Elf_Internal_Verdef));
7130       if (elf_tdata (abfd)->verdef == NULL)
7131         goto error_return;
7132
7133       elf_tdata (abfd)->cverdefs = maxidx;
7134
7135       everdef = (Elf_External_Verdef *) contents;
7136       iverdefarr = elf_tdata (abfd)->verdef;
7137       for (i = 0; i < hdr->sh_info; i++)
7138         {
7139           Elf_External_Verdaux *everdaux;
7140           Elf_Internal_Verdaux *iverdaux;
7141           unsigned int j;
7142
7143           _bfd_elf_swap_verdef_in (abfd, everdef, &iverdefmem);
7144
7145           if ((iverdefmem.vd_ndx & VERSYM_VERSION) == 0)
7146             {
7147 error_return_verdef:
7148               elf_tdata (abfd)->verdef = NULL;
7149               elf_tdata (abfd)->cverdefs = 0;
7150               goto error_return;
7151             }
7152
7153           iverdef = &iverdefarr[(iverdefmem.vd_ndx & VERSYM_VERSION) - 1];
7154           memcpy (iverdef, &iverdefmem, sizeof (Elf_Internal_Verdef));
7155
7156           iverdef->vd_bfd = abfd;
7157
7158           if (iverdef->vd_cnt == 0)
7159             iverdef->vd_auxptr = NULL;
7160           else
7161             {
7162               iverdef->vd_auxptr = (struct elf_internal_verdaux *)
7163                   bfd_alloc2 (abfd, iverdef->vd_cnt,
7164                               sizeof (Elf_Internal_Verdaux));
7165               if (iverdef->vd_auxptr == NULL)
7166                 goto error_return_verdef;
7167             }
7168
7169           if (iverdef->vd_aux
7170               > (size_t) (contents_end_aux - (bfd_byte *) everdef))
7171             goto error_return_verdef;
7172
7173           everdaux = ((Elf_External_Verdaux *)
7174                       ((bfd_byte *) everdef + iverdef->vd_aux));
7175           iverdaux = iverdef->vd_auxptr;
7176           for (j = 0; j < iverdef->vd_cnt; j++, iverdaux++)
7177             {
7178               _bfd_elf_swap_verdaux_in (abfd, everdaux, iverdaux);
7179
7180               iverdaux->vda_nodename =
7181                 bfd_elf_string_from_elf_section (abfd, hdr->sh_link,
7182                                                  iverdaux->vda_name);
7183               if (iverdaux->vda_nodename == NULL)
7184                 goto error_return_verdef;
7185
7186               if (j + 1 < iverdef->vd_cnt)
7187                 iverdaux->vda_nextptr = iverdaux + 1;
7188               else
7189                 iverdaux->vda_nextptr = NULL;
7190
7191               if (iverdaux->vda_next
7192                   > (size_t) (contents_end_aux - (bfd_byte *) everdaux))
7193                 goto error_return_verdef;
7194
7195               everdaux = ((Elf_External_Verdaux *)
7196                           ((bfd_byte *) everdaux + iverdaux->vda_next));
7197             }
7198
7199           if (iverdef->vd_cnt)
7200             iverdef->vd_nodename = iverdef->vd_auxptr->vda_nodename;
7201
7202           if ((size_t) (iverdef - iverdefarr) + 1 < maxidx)
7203             iverdef->vd_nextdef = iverdef + 1;
7204           else
7205             iverdef->vd_nextdef = NULL;
7206
7207           everdef = ((Elf_External_Verdef *)
7208                      ((bfd_byte *) everdef + iverdef->vd_next));
7209         }
7210
7211       free (contents);
7212       contents = NULL;
7213     }
7214   else if (default_imported_symver)
7215     {
7216       if (freeidx < 3)
7217         freeidx = 3;
7218       else
7219         freeidx++;
7220
7221       elf_tdata (abfd)->verdef = (Elf_Internal_Verdef *)
7222           bfd_zalloc2 (abfd, freeidx, sizeof (Elf_Internal_Verdef));
7223       if (elf_tdata (abfd)->verdef == NULL)
7224         goto error_return;
7225
7226       elf_tdata (abfd)->cverdefs = freeidx;
7227     }
7228
7229   /* Create a default version based on the soname.  */
7230   if (default_imported_symver)
7231     {
7232       Elf_Internal_Verdef *iverdef;
7233       Elf_Internal_Verdaux *iverdaux;
7234
7235       iverdef = &elf_tdata (abfd)->verdef[freeidx - 1];;
7236
7237       iverdef->vd_version = VER_DEF_CURRENT;
7238       iverdef->vd_flags = 0;
7239       iverdef->vd_ndx = freeidx;
7240       iverdef->vd_cnt = 1;
7241
7242       iverdef->vd_bfd = abfd;
7243
7244       iverdef->vd_nodename = bfd_elf_get_dt_soname (abfd);
7245       if (iverdef->vd_nodename == NULL)
7246         goto error_return_verdef;
7247       iverdef->vd_nextdef = NULL;
7248       iverdef->vd_auxptr = (struct elf_internal_verdaux *)
7249           bfd_alloc (abfd, sizeof (Elf_Internal_Verdaux));
7250       if (iverdef->vd_auxptr == NULL)
7251         goto error_return_verdef;
7252
7253       iverdaux = iverdef->vd_auxptr;
7254       iverdaux->vda_nodename = iverdef->vd_nodename;
7255       iverdaux->vda_nextptr = NULL;
7256     }
7257
7258   return TRUE;
7259
7260  error_return:
7261   if (contents != NULL)
7262     free (contents);
7263   return FALSE;
7264 }
7265 \f
7266 asymbol *
7267 _bfd_elf_make_empty_symbol (bfd *abfd)
7268 {
7269   elf_symbol_type *newsym;
7270   bfd_size_type amt = sizeof (elf_symbol_type);
7271
7272   newsym = (elf_symbol_type *) bfd_zalloc (abfd, amt);
7273   if (!newsym)
7274     return NULL;
7275   else
7276     {
7277       newsym->symbol.the_bfd = abfd;
7278       return &newsym->symbol;
7279     }
7280 }
7281
7282 void
7283 _bfd_elf_get_symbol_info (bfd *abfd ATTRIBUTE_UNUSED,
7284                           asymbol *symbol,
7285                           symbol_info *ret)
7286 {
7287   bfd_symbol_info (symbol, ret);
7288 }
7289
7290 /* Return whether a symbol name implies a local symbol.  Most targets
7291    use this function for the is_local_label_name entry point, but some
7292    override it.  */
7293
7294 bfd_boolean
7295 _bfd_elf_is_local_label_name (bfd *abfd ATTRIBUTE_UNUSED,
7296                               const char *name)
7297 {
7298   /* Normal local symbols start with ``.L''.  */
7299   if (name[0] == '.' && name[1] == 'L')
7300     return TRUE;
7301
7302   /* At least some SVR4 compilers (e.g., UnixWare 2.1 cc) generate
7303      DWARF debugging symbols starting with ``..''.  */
7304   if (name[0] == '.' && name[1] == '.')
7305     return TRUE;
7306
7307   /* gcc will sometimes generate symbols beginning with ``_.L_'' when
7308      emitting DWARF debugging output.  I suspect this is actually a
7309      small bug in gcc (it calls ASM_OUTPUT_LABEL when it should call
7310      ASM_GENERATE_INTERNAL_LABEL, and this causes the leading
7311      underscore to be emitted on some ELF targets).  For ease of use,
7312      we treat such symbols as local.  */
7313   if (name[0] == '_' && name[1] == '.' && name[2] == 'L' && name[3] == '_')
7314     return TRUE;
7315
7316   return FALSE;
7317 }
7318
7319 alent *
7320 _bfd_elf_get_lineno (bfd *abfd ATTRIBUTE_UNUSED,
7321                      asymbol *symbol ATTRIBUTE_UNUSED)
7322 {
7323   abort ();
7324   return NULL;
7325 }
7326
7327 bfd_boolean
7328 _bfd_elf_set_arch_mach (bfd *abfd,
7329                         enum bfd_architecture arch,
7330                         unsigned long machine)
7331 {
7332   /* If this isn't the right architecture for this backend, and this
7333      isn't the generic backend, fail.  */
7334   if (arch != get_elf_backend_data (abfd)->arch
7335       && arch != bfd_arch_unknown
7336       && get_elf_backend_data (abfd)->arch != bfd_arch_unknown)
7337     return FALSE;
7338
7339   return bfd_default_set_arch_mach (abfd, arch, machine);
7340 }
7341
7342 /* Find the function to a particular section and offset,
7343    for error reporting.  */
7344
7345 static bfd_boolean
7346 elf_find_function (bfd *abfd,
7347                    asection *section,
7348                    asymbol **symbols,
7349                    bfd_vma offset,
7350                    const char **filename_ptr,
7351                    const char **functionname_ptr)
7352 {
7353   const char *filename;
7354   asymbol *func, *file;
7355   bfd_vma low_func;
7356   asymbol **p;
7357   /* ??? Given multiple file symbols, it is impossible to reliably
7358      choose the right file name for global symbols.  File symbols are
7359      local symbols, and thus all file symbols must sort before any
7360      global symbols.  The ELF spec may be interpreted to say that a
7361      file symbol must sort before other local symbols, but currently
7362      ld -r doesn't do this.  So, for ld -r output, it is possible to
7363      make a better choice of file name for local symbols by ignoring
7364      file symbols appearing after a given local symbol.  */
7365   enum { nothing_seen, symbol_seen, file_after_symbol_seen } state;
7366   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
7367
7368   filename = NULL;
7369   func = NULL;
7370   file = NULL;
7371   low_func = 0;
7372   state = nothing_seen;
7373
7374   for (p = symbols; *p != NULL; p++)
7375     {
7376       elf_symbol_type *q;
7377       unsigned int type;
7378
7379       q = (elf_symbol_type *) *p;
7380
7381       type = ELF_ST_TYPE (q->internal_elf_sym.st_info);
7382       switch (type)
7383         {
7384         case STT_FILE:
7385           file = &q->symbol;
7386           if (state == symbol_seen)
7387             state = file_after_symbol_seen;
7388           continue;
7389         default:
7390           if (!bed->is_function_type (type))
7391             break;
7392         case STT_NOTYPE:
7393           if (bfd_get_section (&q->symbol) == section
7394               && q->symbol.value >= low_func
7395               && q->symbol.value <= offset)
7396             {
7397               func = (asymbol *) q;
7398               low_func = q->symbol.value;
7399               filename = NULL;
7400               if (file != NULL
7401                   && (ELF_ST_BIND (q->internal_elf_sym.st_info) == STB_LOCAL
7402                       || state != file_after_symbol_seen))
7403                 filename = bfd_asymbol_name (file);
7404             }
7405           break;
7406         }
7407       if (state == nothing_seen)
7408         state = symbol_seen;
7409     }
7410
7411   if (func == NULL)
7412     return FALSE;
7413
7414   if (filename_ptr)
7415     *filename_ptr = filename;
7416   if (functionname_ptr)
7417     *functionname_ptr = bfd_asymbol_name (func);
7418
7419   return TRUE;
7420 }
7421
7422 /* Find the nearest line to a particular section and offset,
7423    for error reporting.  */
7424
7425 bfd_boolean
7426 _bfd_elf_find_nearest_line (bfd *abfd,
7427                             asection *section,
7428                             asymbol **symbols,
7429                             bfd_vma offset,
7430                             const char **filename_ptr,
7431                             const char **functionname_ptr,
7432                             unsigned int *line_ptr)
7433 {
7434   bfd_boolean found;
7435
7436   if (_bfd_dwarf1_find_nearest_line (abfd, section, symbols, offset,
7437                                      filename_ptr, functionname_ptr,
7438                                      line_ptr))
7439     {
7440       if (!*functionname_ptr)
7441         elf_find_function (abfd, section, symbols, offset,
7442                            *filename_ptr ? NULL : filename_ptr,
7443                            functionname_ptr);
7444
7445       return TRUE;
7446     }
7447
7448   if (_bfd_dwarf2_find_nearest_line (abfd, section, symbols, offset,
7449                                      filename_ptr, functionname_ptr,
7450                                      line_ptr, 0,
7451                                      &elf_tdata (abfd)->dwarf2_find_line_info))
7452     {
7453       if (!*functionname_ptr)
7454         elf_find_function (abfd, section, symbols, offset,
7455                            *filename_ptr ? NULL : filename_ptr,
7456                            functionname_ptr);
7457
7458       return TRUE;
7459     }
7460
7461   if (! _bfd_stab_section_find_nearest_line (abfd, symbols, section, offset,
7462                                              &found, filename_ptr,
7463                                              functionname_ptr, line_ptr,
7464                                              &elf_tdata (abfd)->line_info))
7465     return FALSE;
7466   if (found && (*functionname_ptr || *line_ptr))
7467     return TRUE;
7468
7469   if (symbols == NULL)
7470     return FALSE;
7471
7472   if (! elf_find_function (abfd, section, symbols, offset,
7473                            filename_ptr, functionname_ptr))
7474     return FALSE;
7475
7476   *line_ptr = 0;
7477   return TRUE;
7478 }
7479
7480 /* Find the line for a symbol.  */
7481
7482 bfd_boolean
7483 _bfd_elf_find_line (bfd *abfd, asymbol **symbols, asymbol *symbol,
7484                     const char **filename_ptr, unsigned int *line_ptr)
7485 {
7486   return _bfd_dwarf2_find_line (abfd, symbols, symbol,
7487                                 filename_ptr, line_ptr, 0,
7488                                 &elf_tdata (abfd)->dwarf2_find_line_info);
7489 }
7490
7491 /* After a call to bfd_find_nearest_line, successive calls to
7492    bfd_find_inliner_info can be used to get source information about
7493    each level of function inlining that terminated at the address
7494    passed to bfd_find_nearest_line.  Currently this is only supported
7495    for DWARF2 with appropriate DWARF3 extensions. */
7496
7497 bfd_boolean
7498 _bfd_elf_find_inliner_info (bfd *abfd,
7499                             const char **filename_ptr,
7500                             const char **functionname_ptr,
7501                             unsigned int *line_ptr)
7502 {
7503   bfd_boolean found;
7504   found = _bfd_dwarf2_find_inliner_info (abfd, filename_ptr,
7505                                          functionname_ptr, line_ptr,
7506                                          & elf_tdata (abfd)->dwarf2_find_line_info);
7507   return found;
7508 }
7509
7510 int
7511 _bfd_elf_sizeof_headers (bfd *abfd, struct bfd_link_info *info)
7512 {
7513   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
7514   int ret = bed->s->sizeof_ehdr;
7515
7516   if (!info->relocatable)
7517     {
7518       bfd_size_type phdr_size = elf_tdata (abfd)->program_header_size;
7519
7520       if (phdr_size == (bfd_size_type) -1)
7521         {
7522           struct elf_segment_map *m;
7523
7524           phdr_size = 0;
7525           for (m = elf_tdata (abfd)->segment_map; m != NULL; m = m->next)
7526             phdr_size += bed->s->sizeof_phdr;
7527
7528           if (phdr_size == 0)
7529             phdr_size = get_program_header_size (abfd, info);
7530         }
7531
7532       elf_tdata (abfd)->program_header_size = phdr_size;
7533       ret += phdr_size;
7534     }
7535
7536   return ret;
7537 }
7538
7539 bfd_boolean
7540 _bfd_elf_set_section_contents (bfd *abfd,
7541                                sec_ptr section,
7542                                const void *location,
7543                                file_ptr offset,
7544                                bfd_size_type count)
7545 {
7546   Elf_Internal_Shdr *hdr;
7547   bfd_signed_vma pos;
7548
7549   if (! abfd->output_has_begun
7550       && ! _bfd_elf_compute_section_file_positions (abfd, NULL))
7551     return FALSE;
7552
7553   hdr = &elf_section_data (section)->this_hdr;
7554   pos = hdr->sh_offset + offset;
7555   if (bfd_seek (abfd, pos, SEEK_SET) != 0
7556       || bfd_bwrite (location, count, abfd) != count)
7557     return FALSE;
7558
7559   return TRUE;
7560 }
7561
7562 void
7563 _bfd_elf_no_info_to_howto (bfd *abfd ATTRIBUTE_UNUSED,
7564                            arelent *cache_ptr ATTRIBUTE_UNUSED,
7565                            Elf_Internal_Rela *dst ATTRIBUTE_UNUSED)
7566 {
7567   abort ();
7568 }
7569
7570 /* Try to convert a non-ELF reloc into an ELF one.  */
7571
7572 bfd_boolean
7573 _bfd_elf_validate_reloc (bfd *abfd, arelent *areloc)
7574 {
7575   /* Check whether we really have an ELF howto.  */
7576
7577   if ((*areloc->sym_ptr_ptr)->the_bfd->xvec != abfd->xvec)
7578     {
7579       bfd_reloc_code_real_type code;
7580       reloc_howto_type *howto;
7581
7582       /* Alien reloc: Try to determine its type to replace it with an
7583          equivalent ELF reloc.  */
7584
7585       if (areloc->howto->pc_relative)
7586         {
7587           switch (areloc->howto->bitsize)
7588             {
7589             case 8:
7590               code = BFD_RELOC_8_PCREL;
7591               break;
7592             case 12:
7593               code = BFD_RELOC_12_PCREL;
7594               break;
7595             case 16:
7596               code = BFD_RELOC_16_PCREL;
7597               break;
7598             case 24:
7599               code = BFD_RELOC_24_PCREL;
7600               break;
7601             case 32:
7602               code = BFD_RELOC_32_PCREL;
7603               break;
7604             case 64:
7605               code = BFD_RELOC_64_PCREL;
7606               break;
7607             default:
7608               goto fail;
7609             }
7610
7611           howto = bfd_reloc_type_lookup (abfd, code);
7612
7613           if (areloc->howto->pcrel_offset != howto->pcrel_offset)
7614             {
7615               if (howto->pcrel_offset)
7616                 areloc->addend += areloc->address;
7617               else
7618                 areloc->addend -= areloc->address; /* addend is unsigned!! */
7619             }
7620         }
7621       else
7622         {
7623           switch (areloc->howto->bitsize)
7624             {
7625             case 8:
7626               code = BFD_RELOC_8;
7627               break;
7628             case 14:
7629               code = BFD_RELOC_14;
7630               break;
7631             case 16:
7632               code = BFD_RELOC_16;
7633               break;
7634             case 26:
7635               code = BFD_RELOC_26;
7636               break;
7637             case 32:
7638               code = BFD_RELOC_32;
7639               break;
7640             case 64:
7641               code = BFD_RELOC_64;
7642               break;
7643             default:
7644               goto fail;
7645             }
7646
7647           howto = bfd_reloc_type_lookup (abfd, code);
7648         }
7649
7650       if (howto)
7651         areloc->howto = howto;
7652       else
7653         goto fail;
7654     }
7655
7656   return TRUE;
7657
7658  fail:
7659   (*_bfd_error_handler)
7660     (_("%B: unsupported relocation type %s"),
7661      abfd, areloc->howto->name);
7662   bfd_set_error (bfd_error_bad_value);
7663   return FALSE;
7664 }
7665
7666 bfd_boolean
7667 _bfd_elf_close_and_cleanup (bfd *abfd)
7668 {
7669   if (bfd_get_format (abfd) == bfd_object)
7670     {
7671       if (elf_tdata (abfd) != NULL && elf_shstrtab (abfd) != NULL)
7672         _bfd_elf_strtab_free (elf_shstrtab (abfd));
7673       _bfd_dwarf2_cleanup_debug_info (abfd);
7674     }
7675
7676   return _bfd_generic_close_and_cleanup (abfd);
7677 }
7678
7679 /* For Rel targets, we encode meaningful data for BFD_RELOC_VTABLE_ENTRY
7680    in the relocation's offset.  Thus we cannot allow any sort of sanity
7681    range-checking to interfere.  There is nothing else to do in processing
7682    this reloc.  */
7683
7684 bfd_reloc_status_type
7685 _bfd_elf_rel_vtable_reloc_fn
7686   (bfd *abfd ATTRIBUTE_UNUSED, arelent *re ATTRIBUTE_UNUSED,
7687    struct bfd_symbol *symbol ATTRIBUTE_UNUSED,
7688    void *data ATTRIBUTE_UNUSED, asection *is ATTRIBUTE_UNUSED,
7689    bfd *obfd ATTRIBUTE_UNUSED, char **errmsg ATTRIBUTE_UNUSED)
7690 {
7691   return bfd_reloc_ok;
7692 }
7693 \f
7694 /* Elf core file support.  Much of this only works on native
7695    toolchains, since we rely on knowing the
7696    machine-dependent procfs structure in order to pick
7697    out details about the corefile.  */
7698
7699 #ifdef HAVE_SYS_PROCFS_H
7700 /* Needed for new procfs interface on sparc-solaris.  */
7701 # define _STRUCTURED_PROC 1
7702 # include <sys/procfs.h>
7703 #endif
7704
7705 /* Return a PID that identifies a "thread" for threaded cores, or the
7706    PID of the main process for non-threaded cores.  */
7707
7708 static int
7709 elfcore_make_pid (bfd *abfd)
7710 {
7711   int pid;
7712
7713   pid = elf_tdata (abfd)->core_lwpid;
7714   if (pid == 0)
7715     pid = elf_tdata (abfd)->core_pid;
7716
7717   return pid;
7718 }
7719
7720 /* If there isn't a section called NAME, make one, using
7721    data from SECT.  Note, this function will generate a
7722    reference to NAME, so you shouldn't deallocate or
7723    overwrite it.  */
7724
7725 static bfd_boolean
7726 elfcore_maybe_make_sect (bfd *abfd, char *name, asection *sect)
7727 {
7728   asection *sect2;
7729
7730   if (bfd_get_section_by_name (abfd, name) != NULL)
7731     return TRUE;
7732
7733   sect2 = bfd_make_section_with_flags (abfd, name, sect->flags);
7734   if (sect2 == NULL)
7735     return FALSE;
7736
7737   sect2->size = sect->size;
7738   sect2->filepos = sect->filepos;
7739   sect2->alignment_power = sect->alignment_power;
7740   return TRUE;
7741 }
7742
7743 /* Create a pseudosection containing SIZE bytes at FILEPOS.  This
7744    actually creates up to two pseudosections:
7745    - For the single-threaded case, a section named NAME, unless
7746      such a section already exists.
7747    - For the multi-threaded case, a section named "NAME/PID", where
7748      PID is elfcore_make_pid (abfd).
7749    Both pseudosections have identical contents. */
7750 bfd_boolean
7751 _bfd_elfcore_make_pseudosection (bfd *abfd,
7752                                  char *name,
7753                                  size_t size,
7754                                  ufile_ptr filepos)
7755 {
7756   char buf[100];
7757   char *threaded_name;
7758   size_t len;
7759   asection *sect;
7760
7761   /* Build the section name.  */
7762
7763   sprintf (buf, "%s/%d", name, elfcore_make_pid (abfd));
7764   len = strlen (buf) + 1;
7765   threaded_name = (char *) bfd_alloc (abfd, len);
7766   if (threaded_name == NULL)
7767     return FALSE;
7768   memcpy (threaded_name, buf, len);
7769
7770   sect = bfd_make_section_anyway_with_flags (abfd, threaded_name,
7771                                              SEC_HAS_CONTENTS);
7772   if (sect == NULL)
7773     return FALSE;
7774   sect->size = size;
7775   sect->filepos = filepos;
7776   sect->alignment_power = 2;
7777
7778   return elfcore_maybe_make_sect (abfd, name, sect);
7779 }
7780
7781 /* prstatus_t exists on:
7782      solaris 2.5+
7783      linux 2.[01] + glibc
7784      unixware 4.2
7785 */
7786
7787 #if defined (HAVE_PRSTATUS_T)
7788
7789 static bfd_boolean
7790 elfcore_grok_prstatus (bfd *abfd, Elf_Internal_Note *note)
7791 {
7792   size_t size;
7793   int offset;
7794
7795   if (note->descsz == sizeof (prstatus_t))
7796     {
7797       prstatus_t prstat;
7798
7799       size = sizeof (prstat.pr_reg);
7800       offset   = offsetof (prstatus_t, pr_reg);
7801       memcpy (&prstat, note->descdata, sizeof (prstat));
7802
7803       /* Do not overwrite the core signal if it
7804          has already been set by another thread.  */
7805       if (elf_tdata (abfd)->core_signal == 0)
7806         elf_tdata (abfd)->core_signal = prstat.pr_cursig;
7807       if (elf_tdata (abfd)->core_pid == 0)
7808         elf_tdata (abfd)->core_pid = prstat.pr_pid;
7809
7810       /* pr_who exists on:
7811          solaris 2.5+
7812          unixware 4.2
7813          pr_who doesn't exist on:
7814          linux 2.[01]
7815          */
7816 #if defined (HAVE_PRSTATUS_T_PR_WHO)
7817       elf_tdata (abfd)->core_lwpid = prstat.pr_who;
7818 #else
7819       elf_tdata (abfd)->core_lwpid = prstat.pr_pid;
7820 #endif
7821     }
7822 #if defined (HAVE_PRSTATUS32_T)
7823   else if (note->descsz == sizeof (prstatus32_t))
7824     {
7825       /* 64-bit host, 32-bit corefile */
7826       prstatus32_t prstat;
7827
7828       size = sizeof (prstat.pr_reg);
7829       offset   = offsetof (prstatus32_t, pr_reg);
7830       memcpy (&prstat, note->descdata, sizeof (prstat));
7831
7832       /* Do not overwrite the core signal if it
7833          has already been set by another thread.  */
7834       if (elf_tdata (abfd)->core_signal == 0)
7835         elf_tdata (abfd)->core_signal = prstat.pr_cursig;
7836       if (elf_tdata (abfd)->core_pid == 0)
7837         elf_tdata (abfd)->core_pid = prstat.pr_pid;
7838
7839       /* pr_who exists on:
7840          solaris 2.5+
7841          unixware 4.2
7842          pr_who doesn't exist on:
7843          linux 2.[01]
7844          */
7845 #if defined (HAVE_PRSTATUS32_T_PR_WHO)
7846       elf_tdata (abfd)->core_lwpid = prstat.pr_who;
7847 #else
7848       elf_tdata (abfd)->core_lwpid = prstat.pr_pid;
7849 #endif
7850     }
7851 #endif /* HAVE_PRSTATUS32_T */
7852   else
7853     {
7854       /* Fail - we don't know how to handle any other
7855          note size (ie. data object type).  */
7856       return TRUE;
7857     }
7858
7859   /* Make a ".reg/999" section and a ".reg" section.  */
7860   return _bfd_elfcore_make_pseudosection (abfd, ".reg",
7861                                           size, note->descpos + offset);
7862 }
7863 #endif /* defined (HAVE_PRSTATUS_T) */
7864
7865 /* Create a pseudosection containing the exact contents of NOTE.  */
7866 static bfd_boolean
7867 elfcore_make_note_pseudosection (bfd *abfd,
7868                                  char *name,
7869                                  Elf_Internal_Note *note)
7870 {
7871   return _bfd_elfcore_make_pseudosection (abfd, name,
7872                                           note->descsz, note->descpos);
7873 }
7874
7875 /* There isn't a consistent prfpregset_t across platforms,
7876    but it doesn't matter, because we don't have to pick this
7877    data structure apart.  */
7878
7879 static bfd_boolean
7880 elfcore_grok_prfpreg (bfd *abfd, Elf_Internal_Note *note)
7881 {
7882   return elfcore_make_note_pseudosection (abfd, ".reg2", note);
7883 }
7884
7885 /* Linux dumps the Intel SSE regs in a note named "LINUX" with a note
7886    type of NT_PRXFPREG.  Just include the whole note's contents
7887    literally.  */
7888
7889 static bfd_boolean
7890 elfcore_grok_prxfpreg (bfd *abfd, Elf_Internal_Note *note)
7891 {
7892   return elfcore_make_note_pseudosection (abfd, ".reg-xfp", note);
7893 }
7894
7895 /* Linux dumps the Intel XSAVE extended state in a note named "LINUX"
7896    with a note type of NT_X86_XSTATE.  Just include the whole note's
7897    contents literally.  */
7898
7899 static bfd_boolean
7900 elfcore_grok_xstatereg (bfd *abfd, Elf_Internal_Note *note)
7901 {
7902   return elfcore_make_note_pseudosection (abfd, ".reg-xstate", note);
7903 }
7904
7905 static bfd_boolean
7906 elfcore_grok_ppc_vmx (bfd *abfd, Elf_Internal_Note *note)
7907 {
7908   return elfcore_make_note_pseudosection (abfd, ".reg-ppc-vmx", note);
7909 }
7910
7911 static bfd_boolean
7912 elfcore_grok_ppc_vsx (bfd *abfd, Elf_Internal_Note *note)
7913 {
7914   return elfcore_make_note_pseudosection (abfd, ".reg-ppc-vsx", note);
7915 }
7916
7917 static bfd_boolean
7918 elfcore_grok_s390_high_gprs (bfd *abfd, Elf_Internal_Note *note)
7919 {
7920   return elfcore_make_note_pseudosection (abfd, ".reg-s390-high-gprs", note);
7921 }
7922
7923 static bfd_boolean
7924 elfcore_grok_s390_timer (bfd *abfd, Elf_Internal_Note *note)
7925 {
7926   return elfcore_make_note_pseudosection (abfd, ".reg-s390-timer", note);
7927 }
7928
7929 static bfd_boolean
7930 elfcore_grok_s390_todcmp (bfd *abfd, Elf_Internal_Note *note)
7931 {
7932   return elfcore_make_note_pseudosection (abfd, ".reg-s390-todcmp", note);
7933 }
7934
7935 static bfd_boolean
7936 elfcore_grok_s390_todpreg (bfd *abfd, Elf_Internal_Note *note)
7937 {
7938   return elfcore_make_note_pseudosection (abfd, ".reg-s390-todpreg", note);
7939 }
7940
7941 static bfd_boolean
7942 elfcore_grok_s390_ctrs (bfd *abfd, Elf_Internal_Note *note)
7943 {
7944   return elfcore_make_note_pseudosection (abfd, ".reg-s390-ctrs", note);
7945 }
7946
7947 static bfd_boolean
7948 elfcore_grok_s390_prefix (bfd *abfd, Elf_Internal_Note *note)
7949 {
7950   return elfcore_make_note_pseudosection (abfd, ".reg-s390-prefix", note);
7951 }
7952
7953 #if defined (HAVE_PRPSINFO_T)
7954 typedef prpsinfo_t   elfcore_psinfo_t;
7955 #if defined (HAVE_PRPSINFO32_T)         /* Sparc64 cross Sparc32 */
7956 typedef prpsinfo32_t elfcore_psinfo32_t;
7957 #endif
7958 #endif
7959
7960 #if defined (HAVE_PSINFO_T)
7961 typedef psinfo_t   elfcore_psinfo_t;
7962 #if defined (HAVE_PSINFO32_T)           /* Sparc64 cross Sparc32 */
7963 typedef psinfo32_t elfcore_psinfo32_t;
7964 #endif
7965 #endif
7966
7967 /* return a malloc'ed copy of a string at START which is at
7968    most MAX bytes long, possibly without a terminating '\0'.
7969    the copy will always have a terminating '\0'.  */
7970
7971 char *
7972 _bfd_elfcore_strndup (bfd *abfd, char *start, size_t max)
7973 {
7974   char *dups;
7975   char *end = (char *) memchr (start, '\0', max);
7976   size_t len;
7977
7978   if (end == NULL)
7979     len = max;
7980   else
7981     len = end - start;
7982
7983   dups = (char *) bfd_alloc (abfd, len + 1);
7984   if (dups == NULL)
7985     return NULL;
7986
7987   memcpy (dups, start, len);
7988   dups[len] = '\0';
7989
7990   return dups;
7991 }
7992
7993 #if defined (HAVE_PRPSINFO_T) || defined (HAVE_PSINFO_T)
7994 static bfd_boolean
7995 elfcore_grok_psinfo (bfd *abfd, Elf_Internal_Note *note)
7996 {
7997   if (note->descsz == sizeof (elfcore_psinfo_t))
7998     {
7999       elfcore_psinfo_t psinfo;
8000
8001       memcpy (&psinfo, note->descdata, sizeof (psinfo));
8002
8003       elf_tdata (abfd)->core_program
8004         = _bfd_elfcore_strndup (abfd, psinfo.pr_fname,
8005                                 sizeof (psinfo.pr_fname));
8006
8007       elf_tdata (abfd)->core_command
8008         = _bfd_elfcore_strndup (abfd, psinfo.pr_psargs,
8009                                 sizeof (psinfo.pr_psargs));
8010     }
8011 #if defined (HAVE_PRPSINFO32_T) || defined (HAVE_PSINFO32_T)
8012   else if (note->descsz == sizeof (elfcore_psinfo32_t))
8013     {
8014       /* 64-bit host, 32-bit corefile */
8015       elfcore_psinfo32_t psinfo;
8016
8017       memcpy (&psinfo, note->descdata, sizeof (psinfo));
8018
8019       elf_tdata (abfd)->core_program
8020         = _bfd_elfcore_strndup (abfd, psinfo.pr_fname,
8021                                 sizeof (psinfo.pr_fname));
8022
8023       elf_tdata (abfd)->core_command
8024         = _bfd_elfcore_strndup (abfd, psinfo.pr_psargs,
8025                                 sizeof (psinfo.pr_psargs));
8026     }
8027 #endif
8028
8029   else
8030     {
8031       /* Fail - we don't know how to handle any other
8032          note size (ie. data object type).  */
8033       return TRUE;
8034     }
8035
8036   /* Note that for some reason, a spurious space is tacked
8037      onto the end of the args in some (at least one anyway)
8038      implementations, so strip it off if it exists.  */
8039
8040   {
8041     char *command = elf_tdata (abfd)->core_command;
8042     int n = strlen (command);
8043
8044     if (0 < n && command[n - 1] == ' ')
8045       command[n - 1] = '\0';
8046   }
8047
8048   return TRUE;
8049 }
8050 #endif /* defined (HAVE_PRPSINFO_T) || defined (HAVE_PSINFO_T) */
8051
8052 #if defined (HAVE_PSTATUS_T)
8053 static bfd_boolean
8054 elfcore_grok_pstatus (bfd *abfd, Elf_Internal_Note *note)
8055 {
8056   if (note->descsz == sizeof (pstatus_t)
8057 #if defined (HAVE_PXSTATUS_T)
8058       || note->descsz == sizeof (pxstatus_t)
8059 #endif
8060       )
8061     {
8062       pstatus_t pstat;
8063
8064       memcpy (&pstat, note->descdata, sizeof (pstat));
8065
8066       elf_tdata (abfd)->core_pid = pstat.pr_pid;
8067     }
8068 #if defined (HAVE_PSTATUS32_T)
8069   else if (note->descsz == sizeof (pstatus32_t))
8070     {
8071       /* 64-bit host, 32-bit corefile */
8072       pstatus32_t pstat;
8073
8074       memcpy (&pstat, note->descdata, sizeof (pstat));
8075
8076       elf_tdata (abfd)->core_pid = pstat.pr_pid;
8077     }
8078 #endif
8079   /* Could grab some more details from the "representative"
8080      lwpstatus_t in pstat.pr_lwp, but we'll catch it all in an
8081      NT_LWPSTATUS note, presumably.  */
8082
8083   return TRUE;
8084 }
8085 #endif /* defined (HAVE_PSTATUS_T) */
8086
8087 #if defined (HAVE_LWPSTATUS_T)
8088 static bfd_boolean
8089 elfcore_grok_lwpstatus (bfd *abfd, Elf_Internal_Note *note)
8090 {
8091   lwpstatus_t lwpstat;
8092   char buf[100];
8093   char *name;
8094   size_t len;
8095   asection *sect;
8096
8097   if (note->descsz != sizeof (lwpstat)
8098 #if defined (HAVE_LWPXSTATUS_T)
8099       && note->descsz != sizeof (lwpxstatus_t)
8100 #endif
8101       )
8102     return TRUE;
8103
8104   memcpy (&lwpstat, note->descdata, sizeof (lwpstat));
8105
8106   elf_tdata (abfd)->core_lwpid = lwpstat.pr_lwpid;
8107   /* Do not overwrite the core signal if it has already been set by
8108      another thread.  */
8109   if (elf_tdata (abfd)->core_signal == 0)
8110     elf_tdata (abfd)->core_signal = lwpstat.pr_cursig;
8111
8112   /* Make a ".reg/999" section.  */
8113
8114   sprintf (buf, ".reg/%d", elfcore_make_pid (abfd));
8115   len = strlen (buf) + 1;
8116   name = bfd_alloc (abfd, len);
8117   if (name == NULL)
8118     return FALSE;
8119   memcpy (name, buf, len);
8120
8121   sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS);
8122   if (sect == NULL)
8123     return FALSE;
8124
8125 #if defined (HAVE_LWPSTATUS_T_PR_CONTEXT)
8126   sect->size = sizeof (lwpstat.pr_context.uc_mcontext.gregs);
8127   sect->filepos = note->descpos
8128     + offsetof (lwpstatus_t, pr_context.uc_mcontext.gregs);
8129 #endif
8130
8131 #if defined (HAVE_LWPSTATUS_T_PR_REG)
8132   sect->size = sizeof (lwpstat.pr_reg);
8133   sect->filepos = note->descpos + offsetof (lwpstatus_t, pr_reg);
8134 #endif
8135
8136   sect->alignment_power = 2;
8137
8138   if (!elfcore_maybe_make_sect (abfd, ".reg", sect))
8139     return FALSE;
8140
8141   /* Make a ".reg2/999" section */
8142
8143   sprintf (buf, ".reg2/%d", elfcore_make_pid (abfd));
8144   len = strlen (buf) + 1;
8145   name = bfd_alloc (abfd, len);
8146   if (name == NULL)
8147     return FALSE;
8148   memcpy (name, buf, len);
8149
8150   sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS);
8151   if (sect == NULL)
8152     return FALSE;
8153
8154 #if defined (HAVE_LWPSTATUS_T_PR_CONTEXT)
8155   sect->size = sizeof (lwpstat.pr_context.uc_mcontext.fpregs);
8156   sect->filepos = note->descpos
8157     + offsetof (lwpstatus_t, pr_context.uc_mcontext.fpregs);
8158 #endif
8159
8160 #if defined (HAVE_LWPSTATUS_T_PR_FPREG)
8161   sect->size = sizeof (lwpstat.pr_fpreg);
8162   sect->filepos = note->descpos + offsetof (lwpstatus_t, pr_fpreg);
8163 #endif
8164
8165   sect->alignment_power = 2;
8166
8167   return elfcore_maybe_make_sect (abfd, ".reg2", sect);
8168 }
8169 #endif /* defined (HAVE_LWPSTATUS_T) */
8170
8171 static bfd_boolean
8172 elfcore_grok_win32pstatus (bfd *abfd, Elf_Internal_Note *note)
8173 {
8174   char buf[30];
8175   char *name;
8176   size_t len;
8177   asection *sect;
8178   int type;
8179   int is_active_thread;
8180   bfd_vma base_addr;
8181
8182   if (note->descsz < 728)
8183     return TRUE;
8184
8185   if (! CONST_STRNEQ (note->namedata, "win32"))
8186     return TRUE;
8187
8188   type = bfd_get_32 (abfd, note->descdata);
8189
8190   switch (type)
8191     {
8192     case 1 /* NOTE_INFO_PROCESS */:
8193       /* FIXME: need to add ->core_command.  */
8194       /* process_info.pid */
8195       elf_tdata (abfd)->core_pid = bfd_get_32 (abfd, note->descdata + 8);
8196       /* process_info.signal */
8197       elf_tdata (abfd)->core_signal = bfd_get_32 (abfd, note->descdata + 12);
8198       break;
8199
8200     case 2 /* NOTE_INFO_THREAD */:
8201       /* Make a ".reg/999" section.  */
8202       /* thread_info.tid */
8203       sprintf (buf, ".reg/%ld", (long) bfd_get_32 (abfd, note->descdata + 8));
8204
8205       len = strlen (buf) + 1;
8206       name = (char *) bfd_alloc (abfd, len);
8207       if (name == NULL)
8208         return FALSE;
8209
8210       memcpy (name, buf, len);
8211
8212       sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS);
8213       if (sect == NULL)
8214         return FALSE;
8215
8216       /* sizeof (thread_info.thread_context) */
8217       sect->size = 716;
8218       /* offsetof (thread_info.thread_context) */
8219       sect->filepos = note->descpos + 12;
8220       sect->alignment_power = 2;
8221
8222       /* thread_info.is_active_thread */
8223       is_active_thread = bfd_get_32 (abfd, note->descdata + 8);
8224
8225       if (is_active_thread)
8226         if (! elfcore_maybe_make_sect (abfd, ".reg", sect))
8227           return FALSE;
8228       break;
8229
8230     case 3 /* NOTE_INFO_MODULE */:
8231       /* Make a ".module/xxxxxxxx" section.  */
8232       /* module_info.base_address */
8233       base_addr = bfd_get_32 (abfd, note->descdata + 4);
8234       sprintf (buf, ".module/%08lx", (unsigned long) base_addr);
8235
8236       len = strlen (buf) + 1;
8237       name = (char *) bfd_alloc (abfd, len);
8238       if (name == NULL)
8239         return FALSE;
8240
8241       memcpy (name, buf, len);
8242
8243       sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS);
8244
8245       if (sect == NULL)
8246         return FALSE;
8247
8248       sect->size = note->descsz;
8249       sect->filepos = note->descpos;
8250       sect->alignment_power = 2;
8251       break;
8252
8253     default:
8254       return TRUE;
8255     }
8256
8257   return TRUE;
8258 }
8259
8260 static bfd_boolean
8261 elfcore_grok_note (bfd *abfd, Elf_Internal_Note *note)
8262 {
8263   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
8264
8265   switch (note->type)
8266     {
8267     default:
8268       return TRUE;
8269
8270     case NT_PRSTATUS:
8271       if (bed->elf_backend_grok_prstatus)
8272         if ((*bed->elf_backend_grok_prstatus) (abfd, note))
8273           return TRUE;
8274 #if defined (HAVE_PRSTATUS_T)
8275       return elfcore_grok_prstatus (abfd, note);
8276 #else
8277       return TRUE;
8278 #endif
8279
8280 #if defined (HAVE_PSTATUS_T)
8281     case NT_PSTATUS:
8282       return elfcore_grok_pstatus (abfd, note);
8283 #endif
8284
8285 #if defined (HAVE_LWPSTATUS_T)
8286     case NT_LWPSTATUS:
8287       return elfcore_grok_lwpstatus (abfd, note);
8288 #endif
8289
8290     case NT_FPREGSET:           /* FIXME: rename to NT_PRFPREG */
8291       return elfcore_grok_prfpreg (abfd, note);
8292
8293     case NT_WIN32PSTATUS:
8294       return elfcore_grok_win32pstatus (abfd, note);
8295
8296     case NT_PRXFPREG:           /* Linux SSE extension */
8297       if (note->namesz == 6
8298           && strcmp (note->namedata, "LINUX") == 0)
8299         return elfcore_grok_prxfpreg (abfd, note);
8300       else
8301         return TRUE;
8302
8303     case NT_X86_XSTATE:         /* Linux XSAVE extension */
8304       if (note->namesz == 6
8305           && strcmp (note->namedata, "LINUX") == 0)
8306         return elfcore_grok_xstatereg (abfd, note);
8307       else
8308         return TRUE;
8309
8310     case NT_PPC_VMX:
8311       if (note->namesz == 6
8312           && strcmp (note->namedata, "LINUX") == 0)
8313         return elfcore_grok_ppc_vmx (abfd, note);
8314       else
8315         return TRUE;
8316
8317     case NT_PPC_VSX:
8318       if (note->namesz == 6
8319           && strcmp (note->namedata, "LINUX") == 0)
8320         return elfcore_grok_ppc_vsx (abfd, note);
8321       else
8322         return TRUE;
8323
8324     case NT_S390_HIGH_GPRS:
8325       if (note->namesz == 6
8326           && strcmp (note->namedata, "LINUX") == 0)
8327         return elfcore_grok_s390_high_gprs (abfd, note);
8328       else
8329         return TRUE;
8330
8331     case NT_S390_TIMER:
8332       if (note->namesz == 6
8333           && strcmp (note->namedata, "LINUX") == 0)
8334         return elfcore_grok_s390_timer (abfd, note);
8335       else
8336         return TRUE;
8337
8338     case NT_S390_TODCMP:
8339       if (note->namesz == 6
8340           && strcmp (note->namedata, "LINUX") == 0)
8341         return elfcore_grok_s390_todcmp (abfd, note);
8342       else
8343         return TRUE;
8344
8345     case NT_S390_TODPREG:
8346       if (note->namesz == 6
8347           && strcmp (note->namedata, "LINUX") == 0)
8348         return elfcore_grok_s390_todpreg (abfd, note);
8349       else
8350         return TRUE;
8351
8352     case NT_S390_CTRS:
8353       if (note->namesz == 6
8354           && strcmp (note->namedata, "LINUX") == 0)
8355         return elfcore_grok_s390_ctrs (abfd, note);
8356       else
8357         return TRUE;
8358
8359     case NT_S390_PREFIX:
8360       if (note->namesz == 6
8361           && strcmp (note->namedata, "LINUX") == 0)
8362         return elfcore_grok_s390_prefix (abfd, note);
8363       else
8364         return TRUE;
8365
8366     case NT_PRPSINFO:
8367     case NT_PSINFO:
8368       if (bed->elf_backend_grok_psinfo)
8369         if ((*bed->elf_backend_grok_psinfo) (abfd, note))
8370           return TRUE;
8371 #if defined (HAVE_PRPSINFO_T) || defined (HAVE_PSINFO_T)
8372       return elfcore_grok_psinfo (abfd, note);
8373 #else
8374       return TRUE;
8375 #endif
8376
8377     case NT_AUXV:
8378       {
8379         asection *sect = bfd_make_section_anyway_with_flags (abfd, ".auxv",
8380                                                              SEC_HAS_CONTENTS);
8381
8382         if (sect == NULL)
8383           return FALSE;
8384         sect->size = note->descsz;
8385         sect->filepos = note->descpos;
8386         sect->alignment_power = 1 + bfd_get_arch_size (abfd) / 32;
8387
8388         return TRUE;
8389       }
8390     }
8391 }
8392
8393 static bfd_boolean
8394 elfobj_grok_gnu_build_id (bfd *abfd, Elf_Internal_Note *note)
8395 {
8396   elf_tdata (abfd)->build_id_size = note->descsz;
8397   elf_tdata (abfd)->build_id = (bfd_byte *) bfd_alloc (abfd, note->descsz);
8398   if (elf_tdata (abfd)->build_id == NULL)
8399     return FALSE;
8400
8401   memcpy (elf_tdata (abfd)->build_id, note->descdata, note->descsz);
8402
8403   return TRUE;
8404 }
8405
8406 static bfd_boolean
8407 elfobj_grok_gnu_note (bfd *abfd, Elf_Internal_Note *note)
8408 {
8409   switch (note->type)
8410     {
8411     default:
8412       return TRUE;
8413
8414     case NT_GNU_BUILD_ID:
8415       return elfobj_grok_gnu_build_id (abfd, note);
8416     }
8417 }
8418
8419 static bfd_boolean
8420 elfcore_netbsd_get_lwpid (Elf_Internal_Note *note, int *lwpidp)
8421 {
8422   char *cp;
8423
8424   cp = strchr (note->namedata, '@');
8425   if (cp != NULL)
8426     {
8427       *lwpidp = atoi(cp + 1);
8428       return TRUE;
8429     }
8430   return FALSE;
8431 }
8432
8433 static bfd_boolean
8434 elfcore_grok_netbsd_procinfo (bfd *abfd, Elf_Internal_Note *note)
8435 {
8436   /* Signal number at offset 0x08. */
8437   elf_tdata (abfd)->core_signal
8438     = bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + 0x08);
8439
8440   /* Process ID at offset 0x50. */
8441   elf_tdata (abfd)->core_pid
8442     = bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + 0x50);
8443
8444   /* Command name at 0x7c (max 32 bytes, including nul). */
8445   elf_tdata (abfd)->core_command
8446     = _bfd_elfcore_strndup (abfd, note->descdata + 0x7c, 31);
8447
8448   return elfcore_make_note_pseudosection (abfd, ".note.netbsdcore.procinfo",
8449                                           note);
8450 }
8451
8452 static bfd_boolean
8453 elfcore_grok_netbsd_note (bfd *abfd, Elf_Internal_Note *note)
8454 {
8455   int lwp;
8456
8457   if (elfcore_netbsd_get_lwpid (note, &lwp))
8458     elf_tdata (abfd)->core_lwpid = lwp;
8459
8460   if (note->type == NT_NETBSDCORE_PROCINFO)
8461     {
8462       /* NetBSD-specific core "procinfo".  Note that we expect to
8463          find this note before any of the others, which is fine,
8464          since the kernel writes this note out first when it
8465          creates a core file.  */
8466
8467       return elfcore_grok_netbsd_procinfo (abfd, note);
8468     }
8469
8470   /* As of Jan 2002 there are no other machine-independent notes
8471      defined for NetBSD core files.  If the note type is less
8472      than the start of the machine-dependent note types, we don't
8473      understand it.  */
8474
8475   if (note->type < NT_NETBSDCORE_FIRSTMACH)
8476     return TRUE;
8477
8478
8479   switch (bfd_get_arch (abfd))
8480     {
8481       /* On the Alpha, SPARC (32-bit and 64-bit), PT_GETREGS == mach+0 and
8482          PT_GETFPREGS == mach+2.  */
8483
8484     case bfd_arch_alpha:
8485     case bfd_arch_sparc:
8486       switch (note->type)
8487         {
8488         case NT_NETBSDCORE_FIRSTMACH+0:
8489           return elfcore_make_note_pseudosection (abfd, ".reg", note);
8490
8491         case NT_NETBSDCORE_FIRSTMACH+2:
8492           return elfcore_make_note_pseudosection (abfd, ".reg2", note);
8493
8494         default:
8495           return TRUE;
8496         }
8497
8498       /* On all other arch's, PT_GETREGS == mach+1 and
8499          PT_GETFPREGS == mach+3.  */
8500
8501     default:
8502       switch (note->type)
8503         {
8504         case NT_NETBSDCORE_FIRSTMACH+1:
8505           return elfcore_make_note_pseudosection (abfd, ".reg", note);
8506
8507         case NT_NETBSDCORE_FIRSTMACH+3:
8508           return elfcore_make_note_pseudosection (abfd, ".reg2", note);
8509
8510         default:
8511           return TRUE;
8512         }
8513     }
8514     /* NOTREACHED */
8515 }
8516
8517 static bfd_boolean
8518 elfcore_grok_openbsd_procinfo (bfd *abfd, Elf_Internal_Note *note)
8519 {
8520   /* Signal number at offset 0x08. */
8521   elf_tdata (abfd)->core_signal
8522     = bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + 0x08);
8523
8524   /* Process ID at offset 0x20. */
8525   elf_tdata (abfd)->core_pid
8526     = bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + 0x20);
8527
8528   /* Command name at 0x48 (max 32 bytes, including nul). */
8529   elf_tdata (abfd)->core_command
8530     = _bfd_elfcore_strndup (abfd, note->descdata + 0x48, 31);
8531
8532   return TRUE;
8533 }
8534
8535 static bfd_boolean
8536 elfcore_grok_openbsd_note (bfd *abfd, Elf_Internal_Note *note)
8537 {
8538   if (note->type == NT_OPENBSD_PROCINFO)
8539     return elfcore_grok_openbsd_procinfo (abfd, note);
8540
8541   if (note->type == NT_OPENBSD_REGS)
8542     return elfcore_make_note_pseudosection (abfd, ".reg", note);
8543
8544   if (note->type == NT_OPENBSD_FPREGS)
8545     return elfcore_make_note_pseudosection (abfd, ".reg2", note);
8546
8547   if (note->type == NT_OPENBSD_XFPREGS)
8548     return elfcore_make_note_pseudosection (abfd, ".reg-xfp", note);
8549
8550   if (note->type == NT_OPENBSD_AUXV)
8551     {
8552       asection *sect = bfd_make_section_anyway_with_flags (abfd, ".auxv",
8553                                                            SEC_HAS_CONTENTS);
8554
8555       if (sect == NULL)
8556         return FALSE;
8557       sect->size = note->descsz;
8558       sect->filepos = note->descpos;
8559       sect->alignment_power = 1 + bfd_get_arch_size (abfd) / 32;
8560
8561       return TRUE;
8562     }
8563
8564   if (note->type == NT_OPENBSD_WCOOKIE)
8565     {
8566       asection *sect = bfd_make_section_anyway_with_flags (abfd, ".wcookie",
8567                                                            SEC_HAS_CONTENTS);
8568
8569       if (sect == NULL)
8570         return FALSE;
8571       sect->size = note->descsz;
8572       sect->filepos = note->descpos;
8573       sect->alignment_power = 1 + bfd_get_arch_size (abfd) / 32;
8574
8575       return TRUE;
8576     }
8577
8578   return TRUE;
8579 }
8580
8581 static bfd_boolean
8582 elfcore_grok_nto_status (bfd *abfd, Elf_Internal_Note *note, long *tid)
8583 {
8584   void *ddata = note->descdata;
8585   char buf[100];
8586   char *name;
8587   asection *sect;
8588   short sig;
8589   unsigned flags;
8590
8591   /* nto_procfs_status 'pid' field is at offset 0.  */
8592   elf_tdata (abfd)->core_pid = bfd_get_32 (abfd, (bfd_byte *) ddata);
8593
8594   /* nto_procfs_status 'tid' field is at offset 4.  Pass it back.  */
8595   *tid = bfd_get_32 (abfd, (bfd_byte *) ddata + 4);
8596
8597   /* nto_procfs_status 'flags' field is at offset 8.  */
8598   flags = bfd_get_32 (abfd, (bfd_byte *) ddata + 8);
8599
8600   /* nto_procfs_status 'what' field is at offset 14.  */
8601   if ((sig = bfd_get_16 (abfd, (bfd_byte *) ddata + 14)) > 0)
8602     {
8603       elf_tdata (abfd)->core_signal = sig;
8604       elf_tdata (abfd)->core_lwpid = *tid;
8605     }
8606
8607   /* _DEBUG_FLAG_CURTID (current thread) is 0x80.  Some cores
8608      do not come from signals so we make sure we set the current
8609      thread just in case.  */
8610   if (flags & 0x00000080)
8611     elf_tdata (abfd)->core_lwpid = *tid;
8612
8613   /* Make a ".qnx_core_status/%d" section.  */
8614   sprintf (buf, ".qnx_core_status/%ld", *tid);
8615
8616   name = (char *) bfd_alloc (abfd, strlen (buf) + 1);
8617   if (name == NULL)
8618     return FALSE;
8619   strcpy (name, buf);
8620
8621   sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS);
8622   if (sect == NULL)
8623     return FALSE;
8624
8625   sect->size            = note->descsz;
8626   sect->filepos         = note->descpos;
8627   sect->alignment_power = 2;
8628
8629   return (elfcore_maybe_make_sect (abfd, ".qnx_core_status", sect));
8630 }
8631
8632 static bfd_boolean
8633 elfcore_grok_nto_regs (bfd *abfd,
8634                        Elf_Internal_Note *note,
8635                        long tid,
8636                        char *base)
8637 {
8638   char buf[100];
8639   char *name;
8640   asection *sect;
8641
8642   /* Make a "(base)/%d" section.  */
8643   sprintf (buf, "%s/%ld", base, tid);
8644
8645   name = (char *) bfd_alloc (abfd, strlen (buf) + 1);
8646   if (name == NULL)
8647     return FALSE;
8648   strcpy (name, buf);
8649
8650   sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS);
8651   if (sect == NULL)
8652     return FALSE;
8653
8654   sect->size            = note->descsz;
8655   sect->filepos         = note->descpos;
8656   sect->alignment_power = 2;
8657
8658   /* This is the current thread.  */
8659   if (elf_tdata (abfd)->core_lwpid == tid)
8660     return elfcore_maybe_make_sect (abfd, base, sect);
8661
8662   return TRUE;
8663 }
8664
8665 #define BFD_QNT_CORE_INFO       7
8666 #define BFD_QNT_CORE_STATUS     8
8667 #define BFD_QNT_CORE_GREG       9
8668 #define BFD_QNT_CORE_FPREG      10
8669
8670 static bfd_boolean
8671 elfcore_grok_nto_note (bfd *abfd, Elf_Internal_Note *note)
8672 {
8673   /* Every GREG section has a STATUS section before it.  Store the
8674      tid from the previous call to pass down to the next gregs
8675      function.  */
8676   static long tid = 1;
8677
8678   switch (note->type)
8679     {
8680     case BFD_QNT_CORE_INFO:
8681       return elfcore_make_note_pseudosection (abfd, ".qnx_core_info", note);
8682     case BFD_QNT_CORE_STATUS:
8683       return elfcore_grok_nto_status (abfd, note, &tid);
8684     case BFD_QNT_CORE_GREG:
8685       return elfcore_grok_nto_regs (abfd, note, tid, ".reg");
8686     case BFD_QNT_CORE_FPREG:
8687       return elfcore_grok_nto_regs (abfd, note, tid, ".reg2");
8688     default:
8689       return TRUE;
8690     }
8691 }
8692
8693 static bfd_boolean
8694 elfcore_grok_spu_note (bfd *abfd, Elf_Internal_Note *note)
8695 {
8696   char *name;
8697   asection *sect;
8698   size_t len;
8699
8700   /* Use note name as section name.  */
8701   len = note->namesz;
8702   name = (char *) bfd_alloc (abfd, len);
8703   if (name == NULL)
8704     return FALSE;
8705   memcpy (name, note->namedata, len);
8706   name[len - 1] = '\0';
8707
8708   sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS);
8709   if (sect == NULL)
8710     return FALSE;
8711
8712   sect->size            = note->descsz;
8713   sect->filepos         = note->descpos;
8714   sect->alignment_power = 1;
8715
8716   return TRUE;
8717 }
8718
8719 /* Function: elfcore_write_note
8720
8721    Inputs:
8722      buffer to hold note, and current size of buffer
8723      name of note
8724      type of note
8725      data for note
8726      size of data for note
8727
8728    Writes note to end of buffer.  ELF64 notes are written exactly as
8729    for ELF32, despite the current (as of 2006) ELF gabi specifying
8730    that they ought to have 8-byte namesz and descsz field, and have
8731    8-byte alignment.  Other writers, eg. Linux kernel, do the same.
8732
8733    Return:
8734    Pointer to realloc'd buffer, *BUFSIZ updated.  */
8735
8736 char *
8737 elfcore_write_note (bfd *abfd,
8738                     char *buf,
8739                     int *bufsiz,
8740                     const char *name,
8741                     int type,
8742                     const void *input,
8743                     int size)
8744 {
8745   Elf_External_Note *xnp;
8746   size_t namesz;
8747   size_t newspace;
8748   char *dest;
8749
8750   namesz = 0;
8751   if (name != NULL)
8752     namesz = strlen (name) + 1;
8753
8754   newspace = 12 + ((namesz + 3) & -4) + ((size + 3) & -4);
8755
8756   buf = (char *) realloc (buf, *bufsiz + newspace);
8757   if (buf == NULL)
8758     return buf;
8759   dest = buf + *bufsiz;
8760   *bufsiz += newspace;
8761   xnp = (Elf_External_Note *) dest;
8762   H_PUT_32 (abfd, namesz, xnp->namesz);
8763   H_PUT_32 (abfd, size, xnp->descsz);
8764   H_PUT_32 (abfd, type, xnp->type);
8765   dest = xnp->name;
8766   if (name != NULL)
8767     {
8768       memcpy (dest, name, namesz);
8769       dest += namesz;
8770       while (namesz & 3)
8771         {
8772           *dest++ = '\0';
8773           ++namesz;
8774         }
8775     }
8776   memcpy (dest, input, size);
8777   dest += size;
8778   while (size & 3)
8779     {
8780       *dest++ = '\0';
8781       ++size;
8782     }
8783   return buf;
8784 }
8785
8786 #if defined (HAVE_PRPSINFO_T) || defined (HAVE_PSINFO_T)
8787 char *
8788 elfcore_write_prpsinfo (bfd  *abfd,
8789                         char *buf,
8790                         int  *bufsiz,
8791                         const char *fname,
8792                         const char *psargs)
8793 {
8794   const char *note_name = "CORE";
8795   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
8796
8797   if (bed->elf_backend_write_core_note != NULL)
8798     {
8799       char *ret;
8800       ret = (*bed->elf_backend_write_core_note) (abfd, buf, bufsiz,
8801                                                  NT_PRPSINFO, fname, psargs);
8802       if (ret != NULL)
8803         return ret;
8804     }
8805
8806 #if defined (HAVE_PRPSINFO32_T) || defined (HAVE_PSINFO32_T)
8807   if (bed->s->elfclass == ELFCLASS32)
8808     {
8809 #if defined (HAVE_PSINFO32_T)
8810       psinfo32_t data;
8811       int note_type = NT_PSINFO;
8812 #else
8813       prpsinfo32_t data;
8814       int note_type = NT_PRPSINFO;
8815 #endif
8816
8817       memset (&data, 0, sizeof (data));
8818       strncpy (data.pr_fname, fname, sizeof (data.pr_fname));
8819       strncpy (data.pr_psargs, psargs, sizeof (data.pr_psargs));
8820       return elfcore_write_note (abfd, buf, bufsiz,
8821                                  note_name, note_type, &data, sizeof (data));
8822     }
8823   else
8824 #endif
8825     {
8826 #if defined (HAVE_PSINFO_T)
8827       psinfo_t data;
8828       int note_type = NT_PSINFO;
8829 #else
8830       prpsinfo_t data;
8831       int note_type = NT_PRPSINFO;
8832 #endif
8833
8834       memset (&data, 0, sizeof (data));
8835       strncpy (data.pr_fname, fname, sizeof (data.pr_fname));
8836       strncpy (data.pr_psargs, psargs, sizeof (data.pr_psargs));
8837       return elfcore_write_note (abfd, buf, bufsiz,
8838                                  note_name, note_type, &data, sizeof (data));
8839     }
8840 }
8841 #endif  /* PSINFO_T or PRPSINFO_T */
8842
8843 #if defined (HAVE_PRSTATUS_T)
8844 char *
8845 elfcore_write_prstatus (bfd *abfd,
8846                         char *buf,
8847                         int *bufsiz,
8848                         long pid,
8849                         int cursig,
8850                         const void *gregs)
8851 {
8852   const char *note_name = "CORE";
8853   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
8854
8855   if (bed->elf_backend_write_core_note != NULL)
8856     {
8857       char *ret;
8858       ret = (*bed->elf_backend_write_core_note) (abfd, buf, bufsiz,
8859                                                  NT_PRSTATUS,
8860                                                  pid, cursig, gregs);
8861       if (ret != NULL)
8862         return ret;
8863     }
8864
8865 #if defined (HAVE_PRSTATUS32_T)
8866   if (bed->s->elfclass == ELFCLASS32)
8867     {
8868       prstatus32_t prstat;
8869
8870       memset (&prstat, 0, sizeof (prstat));
8871       prstat.pr_pid = pid;
8872       prstat.pr_cursig = cursig;
8873       memcpy (&prstat.pr_reg, gregs, sizeof (prstat.pr_reg));
8874       return elfcore_write_note (abfd, buf, bufsiz, note_name,
8875                                  NT_PRSTATUS, &prstat, sizeof (prstat));
8876     }
8877   else
8878 #endif
8879     {
8880       prstatus_t prstat;
8881
8882       memset (&prstat, 0, sizeof (prstat));
8883       prstat.pr_pid = pid;
8884       prstat.pr_cursig = cursig;
8885       memcpy (&prstat.pr_reg, gregs, sizeof (prstat.pr_reg));
8886       return elfcore_write_note (abfd, buf, bufsiz, note_name,
8887                                  NT_PRSTATUS, &prstat, sizeof (prstat));
8888     }
8889 }
8890 #endif /* HAVE_PRSTATUS_T */
8891
8892 #if defined (HAVE_LWPSTATUS_T)
8893 char *
8894 elfcore_write_lwpstatus (bfd *abfd,
8895                          char *buf,
8896                          int *bufsiz,
8897                          long pid,
8898                          int cursig,
8899                          const void *gregs)
8900 {
8901   lwpstatus_t lwpstat;
8902   const char *note_name = "CORE";
8903
8904   memset (&lwpstat, 0, sizeof (lwpstat));
8905   lwpstat.pr_lwpid  = pid >> 16;
8906   lwpstat.pr_cursig = cursig;
8907 #if defined (HAVE_LWPSTATUS_T_PR_REG)
8908   memcpy (lwpstat.pr_reg, gregs, sizeof (lwpstat.pr_reg));
8909 #elif defined (HAVE_LWPSTATUS_T_PR_CONTEXT)
8910 #if !defined(gregs)
8911   memcpy (lwpstat.pr_context.uc_mcontext.gregs,
8912           gregs, sizeof (lwpstat.pr_context.uc_mcontext.gregs));
8913 #else
8914   memcpy (lwpstat.pr_context.uc_mcontext.__gregs,
8915           gregs, sizeof (lwpstat.pr_context.uc_mcontext.__gregs));
8916 #endif
8917 #endif
8918   return elfcore_write_note (abfd, buf, bufsiz, note_name,
8919                              NT_LWPSTATUS, &lwpstat, sizeof (lwpstat));
8920 }
8921 #endif /* HAVE_LWPSTATUS_T */
8922
8923 #if defined (HAVE_PSTATUS_T)
8924 char *
8925 elfcore_write_pstatus (bfd *abfd,
8926                        char *buf,
8927                        int *bufsiz,
8928                        long pid,
8929                        int cursig ATTRIBUTE_UNUSED,
8930                        const void *gregs ATTRIBUTE_UNUSED)
8931 {
8932   const char *note_name = "CORE";
8933 #if defined (HAVE_PSTATUS32_T)
8934   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
8935
8936   if (bed->s->elfclass == ELFCLASS32)
8937     {
8938       pstatus32_t pstat;
8939
8940       memset (&pstat, 0, sizeof (pstat));
8941       pstat.pr_pid = pid & 0xffff;
8942       buf = elfcore_write_note (abfd, buf, bufsiz, note_name,
8943                                 NT_PSTATUS, &pstat, sizeof (pstat));
8944       return buf;
8945     }
8946   else
8947 #endif
8948     {
8949       pstatus_t pstat;
8950
8951       memset (&pstat, 0, sizeof (pstat));
8952       pstat.pr_pid = pid & 0xffff;
8953       buf = elfcore_write_note (abfd, buf, bufsiz, note_name,
8954                                 NT_PSTATUS, &pstat, sizeof (pstat));
8955       return buf;
8956     }
8957 }
8958 #endif /* HAVE_PSTATUS_T */
8959
8960 char *
8961 elfcore_write_prfpreg (bfd *abfd,
8962                        char *buf,
8963                        int *bufsiz,
8964                        const void *fpregs,
8965                        int size)
8966 {
8967   const char *note_name = "CORE";
8968   return elfcore_write_note (abfd, buf, bufsiz,
8969                              note_name, NT_FPREGSET, fpregs, size);
8970 }
8971
8972 char *
8973 elfcore_write_prxfpreg (bfd *abfd,
8974                         char *buf,
8975                         int *bufsiz,
8976                         const void *xfpregs,
8977                         int size)
8978 {
8979   char *note_name = "LINUX";
8980   return elfcore_write_note (abfd, buf, bufsiz,
8981                              note_name, NT_PRXFPREG, xfpregs, size);
8982 }
8983
8984 char *
8985 elfcore_write_xstatereg (bfd *abfd, char *buf, int *bufsiz,
8986                          const void *xfpregs, int size)
8987 {
8988   char *note_name = "LINUX";
8989   return elfcore_write_note (abfd, buf, bufsiz,
8990                              note_name, NT_X86_XSTATE, xfpregs, size);
8991 }
8992
8993 char *
8994 elfcore_write_ppc_vmx (bfd *abfd,
8995                        char *buf,
8996                        int *bufsiz,
8997                        const void *ppc_vmx,
8998                        int size)
8999 {
9000   char *note_name = "LINUX";
9001   return elfcore_write_note (abfd, buf, bufsiz,
9002                              note_name, NT_PPC_VMX, ppc_vmx, size);
9003 }
9004
9005 char *
9006 elfcore_write_ppc_vsx (bfd *abfd,
9007                        char *buf,
9008                        int *bufsiz,
9009                        const void *ppc_vsx,
9010                        int size)
9011 {
9012   char *note_name = "LINUX";
9013   return elfcore_write_note (abfd, buf, bufsiz,
9014                              note_name, NT_PPC_VSX, ppc_vsx, size);
9015 }
9016
9017 static char *
9018 elfcore_write_s390_high_gprs (bfd *abfd,
9019                               char *buf,
9020                               int *bufsiz,
9021                               const void *s390_high_gprs,
9022                               int size)
9023 {
9024   char *note_name = "LINUX";
9025   return elfcore_write_note (abfd, buf, bufsiz,
9026                              note_name, NT_S390_HIGH_GPRS,
9027                              s390_high_gprs, size);
9028 }
9029
9030 char *
9031 elfcore_write_s390_timer (bfd *abfd,
9032                           char *buf,
9033                           int *bufsiz,
9034                           const void *s390_timer,
9035                           int size)
9036 {
9037   char *note_name = "LINUX";
9038   return elfcore_write_note (abfd, buf, bufsiz,
9039                              note_name, NT_S390_TIMER, s390_timer, size);
9040 }
9041
9042 char *
9043 elfcore_write_s390_todcmp (bfd *abfd,
9044                            char *buf,
9045                            int *bufsiz,
9046                            const void *s390_todcmp,
9047                            int size)
9048 {
9049   char *note_name = "LINUX";
9050   return elfcore_write_note (abfd, buf, bufsiz,
9051                              note_name, NT_S390_TODCMP, s390_todcmp, size);
9052 }
9053
9054 char *
9055 elfcore_write_s390_todpreg (bfd *abfd,
9056                             char *buf,
9057                             int *bufsiz,
9058                             const void *s390_todpreg,
9059                             int size)
9060 {
9061   char *note_name = "LINUX";
9062   return elfcore_write_note (abfd, buf, bufsiz,
9063                              note_name, NT_S390_TODPREG, s390_todpreg, size);
9064 }
9065
9066 char *
9067 elfcore_write_s390_ctrs (bfd *abfd,
9068                          char *buf,
9069                          int *bufsiz,
9070                          const void *s390_ctrs,
9071                          int size)
9072 {
9073   char *note_name = "LINUX";
9074   return elfcore_write_note (abfd, buf, bufsiz,
9075                              note_name, NT_S390_CTRS, s390_ctrs, size);
9076 }
9077
9078 char *
9079 elfcore_write_s390_prefix (bfd *abfd,
9080                            char *buf,
9081                            int *bufsiz,
9082                            const void *s390_prefix,
9083                            int size)
9084 {
9085   char *note_name = "LINUX";
9086   return elfcore_write_note (abfd, buf, bufsiz,
9087                              note_name, NT_S390_PREFIX, s390_prefix, size);
9088 }
9089
9090 char *
9091 elfcore_write_register_note (bfd *abfd,
9092                              char *buf,
9093                              int *bufsiz,
9094                              const char *section,
9095                              const void *data,
9096                              int size)
9097 {
9098   if (strcmp (section, ".reg2") == 0)
9099     return elfcore_write_prfpreg (abfd, buf, bufsiz, data, size);
9100   if (strcmp (section, ".reg-xfp") == 0)
9101     return elfcore_write_prxfpreg (abfd, buf, bufsiz, data, size);
9102   if (strcmp (section, ".reg-xstate") == 0)
9103     return elfcore_write_xstatereg (abfd, buf, bufsiz, data, size);
9104   if (strcmp (section, ".reg-ppc-vmx") == 0)
9105     return elfcore_write_ppc_vmx (abfd, buf, bufsiz, data, size);
9106   if (strcmp (section, ".reg-ppc-vsx") == 0)
9107     return elfcore_write_ppc_vsx (abfd, buf, bufsiz, data, size);
9108   if (strcmp (section, ".reg-s390-high-gprs") == 0)
9109     return elfcore_write_s390_high_gprs (abfd, buf, bufsiz, data, size);
9110   if (strcmp (section, ".reg-s390-timer") == 0)
9111     return elfcore_write_s390_timer (abfd, buf, bufsiz, data, size);
9112   if (strcmp (section, ".reg-s390-todcmp") == 0)
9113     return elfcore_write_s390_todcmp (abfd, buf, bufsiz, data, size);
9114   if (strcmp (section, ".reg-s390-todpreg") == 0)
9115     return elfcore_write_s390_todpreg (abfd, buf, bufsiz, data, size);
9116   if (strcmp (section, ".reg-s390-ctrs") == 0)
9117     return elfcore_write_s390_ctrs (abfd, buf, bufsiz, data, size);
9118   if (strcmp (section, ".reg-s390-prefix") == 0)
9119     return elfcore_write_s390_prefix (abfd, buf, bufsiz, data, size);
9120   return NULL;
9121 }
9122
9123 static bfd_boolean
9124 elf_parse_notes (bfd *abfd, char *buf, size_t size, file_ptr offset)
9125 {
9126   char *p;
9127
9128   p = buf;
9129   while (p < buf + size)
9130     {
9131       /* FIXME: bad alignment assumption.  */
9132       Elf_External_Note *xnp = (Elf_External_Note *) p;
9133       Elf_Internal_Note in;
9134
9135       if (offsetof (Elf_External_Note, name) > buf - p + size)
9136         return FALSE;
9137
9138       in.type = H_GET_32 (abfd, xnp->type);
9139
9140       in.namesz = H_GET_32 (abfd, xnp->namesz);
9141       in.namedata = xnp->name;
9142       if (in.namesz > buf - in.namedata + size)
9143         return FALSE;
9144
9145       in.descsz = H_GET_32 (abfd, xnp->descsz);
9146       in.descdata = in.namedata + BFD_ALIGN (in.namesz, 4);
9147       in.descpos = offset + (in.descdata - buf);
9148       if (in.descsz != 0
9149           && (in.descdata >= buf + size
9150               || in.descsz > buf - in.descdata + size))
9151         return FALSE;
9152
9153       switch (bfd_get_format (abfd))
9154         {
9155         default:
9156           return TRUE;
9157
9158         case bfd_core:
9159           if (CONST_STRNEQ (in.namedata, "NetBSD-CORE"))
9160             {
9161               if (! elfcore_grok_netbsd_note (abfd, &in))
9162                 return FALSE;
9163             }
9164           else if (CONST_STRNEQ (in.namedata, "OpenBSD"))
9165             {
9166               if (! elfcore_grok_openbsd_note (abfd, &in))
9167                 return FALSE;
9168             }
9169           else if (CONST_STRNEQ (in.namedata, "QNX"))
9170             {
9171               if (! elfcore_grok_nto_note (abfd, &in))
9172                 return FALSE;
9173             }
9174           else if (CONST_STRNEQ (in.namedata, "SPU/"))
9175             {
9176               if (! elfcore_grok_spu_note (abfd, &in))
9177                 return FALSE;
9178             }
9179           else
9180             {
9181               if (! elfcore_grok_note (abfd, &in))
9182                 return FALSE;
9183             }
9184           break;
9185
9186         case bfd_object:
9187           if (in.namesz == sizeof "GNU" && strcmp (in.namedata, "GNU") == 0)
9188             {
9189               if (! elfobj_grok_gnu_note (abfd, &in))
9190                 return FALSE;
9191             }
9192           break;
9193         }
9194
9195       p = in.descdata + BFD_ALIGN (in.descsz, 4);
9196     }
9197
9198   return TRUE;
9199 }
9200
9201 static bfd_boolean
9202 elf_read_notes (bfd *abfd, file_ptr offset, bfd_size_type size)
9203 {
9204   char *buf;
9205
9206   if (size <= 0)
9207     return TRUE;
9208
9209   if (bfd_seek (abfd, offset, SEEK_SET) != 0)
9210     return FALSE;
9211
9212   buf = (char *) bfd_malloc (size);
9213   if (buf == NULL)
9214     return FALSE;
9215
9216   if (bfd_bread (buf, size, abfd) != size
9217       || !elf_parse_notes (abfd, buf, size, offset))
9218     {
9219       free (buf);
9220       return FALSE;
9221     }
9222
9223   free (buf);
9224   return TRUE;
9225 }
9226 \f
9227 /* Providing external access to the ELF program header table.  */
9228
9229 /* Return an upper bound on the number of bytes required to store a
9230    copy of ABFD's program header table entries.  Return -1 if an error
9231    occurs; bfd_get_error will return an appropriate code.  */
9232
9233 long
9234 bfd_get_elf_phdr_upper_bound (bfd *abfd)
9235 {
9236   if (abfd->xvec->flavour != bfd_target_elf_flavour)
9237     {
9238       bfd_set_error (bfd_error_wrong_format);
9239       return -1;
9240     }
9241
9242   return elf_elfheader (abfd)->e_phnum * sizeof (Elf_Internal_Phdr);
9243 }
9244
9245 /* Copy ABFD's program header table entries to *PHDRS.  The entries
9246    will be stored as an array of Elf_Internal_Phdr structures, as
9247    defined in include/elf/internal.h.  To find out how large the
9248    buffer needs to be, call bfd_get_elf_phdr_upper_bound.
9249
9250    Return the number of program header table entries read, or -1 if an
9251    error occurs; bfd_get_error will return an appropriate code.  */
9252
9253 int
9254 bfd_get_elf_phdrs (bfd *abfd, void *phdrs)
9255 {
9256   int num_phdrs;
9257
9258   if (abfd->xvec->flavour != bfd_target_elf_flavour)
9259     {
9260       bfd_set_error (bfd_error_wrong_format);
9261       return -1;
9262     }
9263
9264   num_phdrs = elf_elfheader (abfd)->e_phnum;
9265   memcpy (phdrs, elf_tdata (abfd)->phdr,
9266           num_phdrs * sizeof (Elf_Internal_Phdr));
9267
9268   return num_phdrs;
9269 }
9270
9271 enum elf_reloc_type_class
9272 _bfd_elf_reloc_type_class (const Elf_Internal_Rela *rela ATTRIBUTE_UNUSED)
9273 {
9274   return reloc_class_normal;
9275 }
9276
9277 /* For RELA architectures, return the relocation value for a
9278    relocation against a local symbol.  */
9279
9280 bfd_vma
9281 _bfd_elf_rela_local_sym (bfd *abfd,
9282                          Elf_Internal_Sym *sym,
9283                          asection **psec,
9284                          Elf_Internal_Rela *rel)
9285 {
9286   asection *sec = *psec;
9287   bfd_vma relocation;
9288
9289   relocation = (sec->output_section->vma
9290                 + sec->output_offset
9291                 + sym->st_value);
9292   if ((sec->flags & SEC_MERGE)
9293       && ELF_ST_TYPE (sym->st_info) == STT_SECTION
9294       && sec->sec_info_type == ELF_INFO_TYPE_MERGE)
9295     {
9296       rel->r_addend =
9297         _bfd_merged_section_offset (abfd, psec,
9298                                     elf_section_data (sec)->sec_info,
9299                                     sym->st_value + rel->r_addend);
9300       if (sec != *psec)
9301         {
9302           /* If we have changed the section, and our original section is
9303              marked with SEC_EXCLUDE, it means that the original
9304              SEC_MERGE section has been completely subsumed in some
9305              other SEC_MERGE section.  In this case, we need to leave
9306              some info around for --emit-relocs.  */
9307           if ((sec->flags & SEC_EXCLUDE) != 0)
9308             sec->kept_section = *psec;
9309           sec = *psec;
9310         }
9311       rel->r_addend -= relocation;
9312       rel->r_addend += sec->output_section->vma + sec->output_offset;
9313     }
9314   return relocation;
9315 }
9316
9317 bfd_vma
9318 _bfd_elf_rel_local_sym (bfd *abfd,
9319                         Elf_Internal_Sym *sym,
9320                         asection **psec,
9321                         bfd_vma addend)
9322 {
9323   asection *sec = *psec;
9324
9325   if (sec->sec_info_type != ELF_INFO_TYPE_MERGE)
9326     return sym->st_value + addend;
9327
9328   return _bfd_merged_section_offset (abfd, psec,
9329                                      elf_section_data (sec)->sec_info,
9330                                      sym->st_value + addend);
9331 }
9332
9333 bfd_vma
9334 _bfd_elf_section_offset (bfd *abfd,
9335                          struct bfd_link_info *info,
9336                          asection *sec,
9337                          bfd_vma offset)
9338 {
9339   switch (sec->sec_info_type)
9340     {
9341     case ELF_INFO_TYPE_STABS:
9342       return _bfd_stab_section_offset (sec, elf_section_data (sec)->sec_info,
9343                                        offset);
9344     case ELF_INFO_TYPE_EH_FRAME:
9345       return _bfd_elf_eh_frame_section_offset (abfd, info, sec, offset);
9346     default:
9347       return offset;
9348     }
9349 }
9350 \f
9351 /* Create a new BFD as if by bfd_openr.  Rather than opening a file,
9352    reconstruct an ELF file by reading the segments out of remote memory
9353    based on the ELF file header at EHDR_VMA and the ELF program headers it
9354    points to.  If not null, *LOADBASEP is filled in with the difference
9355    between the VMAs from which the segments were read, and the VMAs the
9356    file headers (and hence BFD's idea of each section's VMA) put them at.
9357
9358    The function TARGET_READ_MEMORY is called to copy LEN bytes from the
9359    remote memory at target address VMA into the local buffer at MYADDR; it
9360    should return zero on success or an `errno' code on failure.  TEMPL must
9361    be a BFD for an ELF target with the word size and byte order found in
9362    the remote memory.  */
9363
9364 bfd *
9365 bfd_elf_bfd_from_remote_memory
9366   (bfd *templ,
9367    bfd_vma ehdr_vma,
9368    bfd_vma *loadbasep,
9369    int (*target_read_memory) (bfd_vma, bfd_byte *, int))
9370 {
9371   return (*get_elf_backend_data (templ)->elf_backend_bfd_from_remote_memory)
9372     (templ, ehdr_vma, loadbasep, target_read_memory);
9373 }
9374 \f
9375 long
9376 _bfd_elf_get_synthetic_symtab (bfd *abfd,
9377                                long symcount ATTRIBUTE_UNUSED,
9378                                asymbol **syms ATTRIBUTE_UNUSED,
9379                                long dynsymcount,
9380                                asymbol **dynsyms,
9381                                asymbol **ret)
9382 {
9383   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
9384   asection *relplt;
9385   asymbol *s;
9386   const char *relplt_name;
9387   bfd_boolean (*slurp_relocs) (bfd *, asection *, asymbol **, bfd_boolean);
9388   arelent *p;
9389   long count, i, n;
9390   size_t size;
9391   Elf_Internal_Shdr *hdr;
9392   char *names;
9393   asection *plt;
9394
9395   *ret = NULL;
9396
9397   if ((abfd->flags & (DYNAMIC | EXEC_P)) == 0)
9398     return 0;
9399
9400   if (dynsymcount <= 0)
9401     return 0;
9402
9403   if (!bed->plt_sym_val)
9404     return 0;
9405
9406   relplt_name = bed->relplt_name;
9407   if (relplt_name == NULL)
9408     relplt_name = bed->rela_plts_and_copies_p ? ".rela.plt" : ".rel.plt";
9409   relplt = bfd_get_section_by_name (abfd, relplt_name);
9410   if (relplt == NULL)
9411     return 0;
9412
9413   hdr = &elf_section_data (relplt)->this_hdr;
9414   if (hdr->sh_link != elf_dynsymtab (abfd)
9415       || (hdr->sh_type != SHT_REL && hdr->sh_type != SHT_RELA))
9416     return 0;
9417
9418   plt = bfd_get_section_by_name (abfd, ".plt");
9419   if (plt == NULL)
9420     return 0;
9421
9422   slurp_relocs = get_elf_backend_data (abfd)->s->slurp_reloc_table;
9423   if (! (*slurp_relocs) (abfd, relplt, dynsyms, TRUE))
9424     return -1;
9425
9426   count = relplt->size / hdr->sh_entsize;
9427   size = count * sizeof (asymbol);
9428   p = relplt->relocation;
9429   for (i = 0; i < count; i++, p += bed->s->int_rels_per_ext_rel)
9430     {
9431       size += strlen ((*p->sym_ptr_ptr)->name) + sizeof ("@plt");
9432       if (p->addend != 0)
9433         {
9434 #ifdef BFD64
9435           size += sizeof ("+0x") - 1 + 8 + 8 * (bed->s->elfclass == ELFCLASS64);
9436 #else
9437           size += sizeof ("+0x") - 1 + 8;
9438 #endif
9439         }
9440     }
9441
9442   s = *ret = (asymbol *) bfd_malloc (size);
9443   if (s == NULL)
9444     return -1;
9445
9446   names = (char *) (s + count);
9447   p = relplt->relocation;
9448   n = 0;
9449   for (i = 0; i < count; i++, p += bed->s->int_rels_per_ext_rel)
9450     {
9451       size_t len;
9452       bfd_vma addr;
9453
9454       addr = bed->plt_sym_val (i, plt, p);
9455       if (addr == (bfd_vma) -1)
9456         continue;
9457
9458       *s = **p->sym_ptr_ptr;
9459       /* Undefined syms won't have BSF_LOCAL or BSF_GLOBAL set.  Since
9460          we are defining a symbol, ensure one of them is set.  */
9461       if ((s->flags & BSF_LOCAL) == 0)
9462         s->flags |= BSF_GLOBAL;
9463       s->flags |= BSF_SYNTHETIC;
9464       s->section = plt;
9465       s->value = addr - plt->vma;
9466       s->name = names;
9467       s->udata.p = NULL;
9468       len = strlen ((*p->sym_ptr_ptr)->name);
9469       memcpy (names, (*p->sym_ptr_ptr)->name, len);
9470       names += len;
9471       if (p->addend != 0)
9472         {
9473           char buf[30], *a;
9474           
9475           memcpy (names, "+0x", sizeof ("+0x") - 1);
9476           names += sizeof ("+0x") - 1;
9477           bfd_sprintf_vma (abfd, buf, p->addend);
9478           for (a = buf; *a == '0'; ++a)
9479             ;
9480           len = strlen (a);
9481           memcpy (names, a, len);
9482           names += len;
9483         }
9484       memcpy (names, "@plt", sizeof ("@plt"));
9485       names += sizeof ("@plt");
9486       ++s, ++n;
9487     }
9488
9489   return n;
9490 }
9491
9492 /* It is only used by x86-64 so far.  */
9493 asection _bfd_elf_large_com_section
9494   = BFD_FAKE_SECTION (_bfd_elf_large_com_section,
9495                       SEC_IS_COMMON, NULL, "LARGE_COMMON", 0);
9496
9497 void
9498 _bfd_elf_set_osabi (bfd * abfd,
9499                     struct bfd_link_info * link_info ATTRIBUTE_UNUSED)
9500 {
9501   Elf_Internal_Ehdr * i_ehdrp;  /* ELF file header, internal form.  */
9502
9503   i_ehdrp = elf_elfheader (abfd);
9504
9505   i_ehdrp->e_ident[EI_OSABI] = get_elf_backend_data (abfd)->elf_osabi;
9506
9507   /* To make things simpler for the loader on Linux systems we set the
9508      osabi field to ELFOSABI_LINUX if the binary contains symbols of
9509      the STT_GNU_IFUNC type.  */
9510   if (i_ehdrp->e_ident[EI_OSABI] == ELFOSABI_NONE
9511       && elf_tdata (abfd)->has_ifunc_symbols)
9512     i_ehdrp->e_ident[EI_OSABI] = ELFOSABI_LINUX;
9513 }
9514
9515
9516 /* Return TRUE for ELF symbol types that represent functions.
9517    This is the default version of this function, which is sufficient for
9518    most targets.  It returns true if TYPE is STT_FUNC or STT_GNU_IFUNC.  */
9519
9520 bfd_boolean
9521 _bfd_elf_is_function_type (unsigned int type)
9522 {
9523   return (type == STT_FUNC
9524           || type == STT_GNU_IFUNC);
9525 }