OSDN Git Service

daily update
[pf3gnuchains/sourceware.git] / bfd / elf.c
1 /* ELF executable support for BFD.
2
3    Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
4    2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
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     bed->s->swap_symbol_out (abfd, &sym, outbound_syms, outbound_shndx);
6546     outbound_syms += bed->s->sizeof_sym;
6547     if (outbound_shndx != NULL)
6548       outbound_shndx += sizeof (Elf_External_Sym_Shndx);
6549   }
6550
6551   name_local_sections
6552     = (bed->elf_backend_name_local_section_symbols
6553        && bed->elf_backend_name_local_section_symbols (abfd));
6554
6555   syms = bfd_get_outsymbols (abfd);
6556   for (idx = 0; idx < symcount; idx++)
6557     {
6558       Elf_Internal_Sym sym;
6559       bfd_vma value = syms[idx]->value;
6560       elf_symbol_type *type_ptr;
6561       flagword flags = syms[idx]->flags;
6562       int type;
6563
6564       if (!name_local_sections
6565           && (flags & (BSF_SECTION_SYM | BSF_GLOBAL)) == BSF_SECTION_SYM)
6566         {
6567           /* Local section symbols have no name.  */
6568           sym.st_name = 0;
6569         }
6570       else
6571         {
6572           sym.st_name = (unsigned long) _bfd_stringtab_add (stt,
6573                                                             syms[idx]->name,
6574                                                             TRUE, FALSE);
6575           if (sym.st_name == (unsigned long) -1)
6576             {
6577               _bfd_stringtab_free (stt);
6578               return FALSE;
6579             }
6580         }
6581
6582       type_ptr = elf_symbol_from (abfd, syms[idx]);
6583
6584       if ((flags & BSF_SECTION_SYM) == 0
6585           && bfd_is_com_section (syms[idx]->section))
6586         {
6587           /* ELF common symbols put the alignment into the `value' field,
6588              and the size into the `size' field.  This is backwards from
6589              how BFD handles it, so reverse it here.  */
6590           sym.st_size = value;
6591           if (type_ptr == NULL
6592               || type_ptr->internal_elf_sym.st_value == 0)
6593             sym.st_value = value >= 16 ? 16 : (1 << bfd_log2 (value));
6594           else
6595             sym.st_value = type_ptr->internal_elf_sym.st_value;
6596           sym.st_shndx = _bfd_elf_section_from_bfd_section
6597             (abfd, syms[idx]->section);
6598         }
6599       else
6600         {
6601           asection *sec = syms[idx]->section;
6602           unsigned int shndx;
6603
6604           if (sec->output_section)
6605             {
6606               value += sec->output_offset;
6607               sec = sec->output_section;
6608             }
6609
6610           /* Don't add in the section vma for relocatable output.  */
6611           if (! relocatable_p)
6612             value += sec->vma;
6613           sym.st_value = value;
6614           sym.st_size = type_ptr ? type_ptr->internal_elf_sym.st_size : 0;
6615
6616           if (bfd_is_abs_section (sec)
6617               && type_ptr != NULL
6618               && type_ptr->internal_elf_sym.st_shndx != 0)
6619             {
6620               /* This symbol is in a real ELF section which we did
6621                  not create as a BFD section.  Undo the mapping done
6622                  by copy_private_symbol_data.  */
6623               shndx = type_ptr->internal_elf_sym.st_shndx;
6624               switch (shndx)
6625                 {
6626                 case MAP_ONESYMTAB:
6627                   shndx = elf_onesymtab (abfd);
6628                   break;
6629                 case MAP_DYNSYMTAB:
6630                   shndx = elf_dynsymtab (abfd);
6631                   break;
6632                 case MAP_STRTAB:
6633                   shndx = elf_tdata (abfd)->strtab_section;
6634                   break;
6635                 case MAP_SHSTRTAB:
6636                   shndx = elf_tdata (abfd)->shstrtab_section;
6637                   break;
6638                 case MAP_SYM_SHNDX:
6639                   shndx = elf_tdata (abfd)->symtab_shndx_section;
6640                   break;
6641                 default:
6642                   break;
6643                 }
6644             }
6645           else
6646             {
6647               shndx = _bfd_elf_section_from_bfd_section (abfd, sec);
6648
6649               if (shndx == SHN_BAD)
6650                 {
6651                   asection *sec2;
6652
6653                   /* Writing this would be a hell of a lot easier if
6654                      we had some decent documentation on bfd, and
6655                      knew what to expect of the library, and what to
6656                      demand of applications.  For example, it
6657                      appears that `objcopy' might not set the
6658                      section of a symbol to be a section that is
6659                      actually in the output file.  */
6660                   sec2 = bfd_get_section_by_name (abfd, sec->name);
6661                   if (sec2 == NULL)
6662                     {
6663                       _bfd_error_handler (_("\
6664 Unable to find equivalent output section for symbol '%s' from section '%s'"),
6665                                           syms[idx]->name ? syms[idx]->name : "<Local sym>",
6666                                           sec->name);
6667                       bfd_set_error (bfd_error_invalid_operation);
6668                       _bfd_stringtab_free (stt);
6669                       return FALSE;
6670                     }
6671
6672                   shndx = _bfd_elf_section_from_bfd_section (abfd, sec2);
6673                   BFD_ASSERT (shndx != SHN_BAD);
6674                 }
6675             }
6676
6677           sym.st_shndx = shndx;
6678         }
6679
6680       if ((flags & BSF_THREAD_LOCAL) != 0)
6681         type = STT_TLS;
6682       else if ((flags & BSF_GNU_INDIRECT_FUNCTION) != 0)
6683         type = STT_GNU_IFUNC;
6684       else if ((flags & BSF_FUNCTION) != 0)
6685         type = STT_FUNC;
6686       else if ((flags & BSF_OBJECT) != 0)
6687         type = STT_OBJECT;
6688       else if ((flags & BSF_RELC) != 0)
6689         type = STT_RELC;
6690       else if ((flags & BSF_SRELC) != 0)
6691         type = STT_SRELC;
6692       else
6693         type = STT_NOTYPE;
6694
6695       if (syms[idx]->section->flags & SEC_THREAD_LOCAL)
6696         type = STT_TLS;
6697
6698       /* Processor-specific types.  */
6699       if (type_ptr != NULL
6700           && bed->elf_backend_get_symbol_type)
6701         type = ((*bed->elf_backend_get_symbol_type)
6702                 (&type_ptr->internal_elf_sym, type));
6703
6704       if (flags & BSF_SECTION_SYM)
6705         {
6706           if (flags & BSF_GLOBAL)
6707             sym.st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
6708           else
6709             sym.st_info = ELF_ST_INFO (STB_LOCAL, STT_SECTION);
6710         }
6711       else if (bfd_is_com_section (syms[idx]->section))
6712         {
6713 #ifdef USE_STT_COMMON
6714           if (type == STT_OBJECT)
6715             sym.st_info = ELF_ST_INFO (STB_GLOBAL, STT_COMMON);
6716           else
6717 #endif
6718             sym.st_info = ELF_ST_INFO (STB_GLOBAL, type);
6719         }
6720       else if (bfd_is_und_section (syms[idx]->section))
6721         sym.st_info = ELF_ST_INFO (((flags & BSF_WEAK)
6722                                     ? STB_WEAK
6723                                     : STB_GLOBAL),
6724                                    type);
6725       else if (flags & BSF_FILE)
6726         sym.st_info = ELF_ST_INFO (STB_LOCAL, STT_FILE);
6727       else
6728         {
6729           int bind = STB_LOCAL;
6730
6731           if (flags & BSF_LOCAL)
6732             bind = STB_LOCAL;
6733           else if (flags & BSF_GNU_UNIQUE)
6734             bind = STB_GNU_UNIQUE;
6735           else if (flags & BSF_WEAK)
6736             bind = STB_WEAK;
6737           else if (flags & BSF_GLOBAL)
6738             bind = STB_GLOBAL;
6739
6740           sym.st_info = ELF_ST_INFO (bind, type);
6741         }
6742
6743       if (type_ptr != NULL)
6744         sym.st_other = type_ptr->internal_elf_sym.st_other;
6745       else
6746         sym.st_other = 0;
6747
6748       bed->s->swap_symbol_out (abfd, &sym, outbound_syms, outbound_shndx);
6749       outbound_syms += bed->s->sizeof_sym;
6750       if (outbound_shndx != NULL)
6751         outbound_shndx += sizeof (Elf_External_Sym_Shndx);
6752     }
6753
6754   *sttp = stt;
6755   symstrtab_hdr->sh_size = _bfd_stringtab_size (stt);
6756   symstrtab_hdr->sh_type = SHT_STRTAB;
6757
6758   symstrtab_hdr->sh_flags = 0;
6759   symstrtab_hdr->sh_addr = 0;
6760   symstrtab_hdr->sh_entsize = 0;
6761   symstrtab_hdr->sh_link = 0;
6762   symstrtab_hdr->sh_info = 0;
6763   symstrtab_hdr->sh_addralign = 1;
6764
6765   return TRUE;
6766 }
6767
6768 /* Return the number of bytes required to hold the symtab vector.
6769
6770    Note that we base it on the count plus 1, since we will null terminate
6771    the vector allocated based on this size.  However, the ELF symbol table
6772    always has a dummy entry as symbol #0, so it ends up even.  */
6773
6774 long
6775 _bfd_elf_get_symtab_upper_bound (bfd *abfd)
6776 {
6777   long symcount;
6778   long symtab_size;
6779   Elf_Internal_Shdr *hdr = &elf_tdata (abfd)->symtab_hdr;
6780
6781   symcount = hdr->sh_size / get_elf_backend_data (abfd)->s->sizeof_sym;
6782   symtab_size = (symcount + 1) * (sizeof (asymbol *));
6783   if (symcount > 0)
6784     symtab_size -= sizeof (asymbol *);
6785
6786   return symtab_size;
6787 }
6788
6789 long
6790 _bfd_elf_get_dynamic_symtab_upper_bound (bfd *abfd)
6791 {
6792   long symcount;
6793   long symtab_size;
6794   Elf_Internal_Shdr *hdr = &elf_tdata (abfd)->dynsymtab_hdr;
6795
6796   if (elf_dynsymtab (abfd) == 0)
6797     {
6798       bfd_set_error (bfd_error_invalid_operation);
6799       return -1;
6800     }
6801
6802   symcount = hdr->sh_size / get_elf_backend_data (abfd)->s->sizeof_sym;
6803   symtab_size = (symcount + 1) * (sizeof (asymbol *));
6804   if (symcount > 0)
6805     symtab_size -= sizeof (asymbol *);
6806
6807   return symtab_size;
6808 }
6809
6810 long
6811 _bfd_elf_get_reloc_upper_bound (bfd *abfd ATTRIBUTE_UNUSED,
6812                                 sec_ptr asect)
6813 {
6814   return (asect->reloc_count + 1) * sizeof (arelent *);
6815 }
6816
6817 /* Canonicalize the relocs.  */
6818
6819 long
6820 _bfd_elf_canonicalize_reloc (bfd *abfd,
6821                              sec_ptr section,
6822                              arelent **relptr,
6823                              asymbol **symbols)
6824 {
6825   arelent *tblptr;
6826   unsigned int i;
6827   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
6828
6829   if (! bed->s->slurp_reloc_table (abfd, section, symbols, FALSE))
6830     return -1;
6831
6832   tblptr = section->relocation;
6833   for (i = 0; i < section->reloc_count; i++)
6834     *relptr++ = tblptr++;
6835
6836   *relptr = NULL;
6837
6838   return section->reloc_count;
6839 }
6840
6841 long
6842 _bfd_elf_canonicalize_symtab (bfd *abfd, asymbol **allocation)
6843 {
6844   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
6845   long symcount = bed->s->slurp_symbol_table (abfd, allocation, FALSE);
6846
6847   if (symcount >= 0)
6848     bfd_get_symcount (abfd) = symcount;
6849   return symcount;
6850 }
6851
6852 long
6853 _bfd_elf_canonicalize_dynamic_symtab (bfd *abfd,
6854                                       asymbol **allocation)
6855 {
6856   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
6857   long symcount = bed->s->slurp_symbol_table (abfd, allocation, TRUE);
6858
6859   if (symcount >= 0)
6860     bfd_get_dynamic_symcount (abfd) = symcount;
6861   return symcount;
6862 }
6863
6864 /* Return the size required for the dynamic reloc entries.  Any loadable
6865    section that was actually installed in the BFD, and has type SHT_REL
6866    or SHT_RELA, and uses the dynamic symbol table, is considered to be a
6867    dynamic reloc section.  */
6868
6869 long
6870 _bfd_elf_get_dynamic_reloc_upper_bound (bfd *abfd)
6871 {
6872   long ret;
6873   asection *s;
6874
6875   if (elf_dynsymtab (abfd) == 0)
6876     {
6877       bfd_set_error (bfd_error_invalid_operation);
6878       return -1;
6879     }
6880
6881   ret = sizeof (arelent *);
6882   for (s = abfd->sections; s != NULL; s = s->next)
6883     if (elf_section_data (s)->this_hdr.sh_link == elf_dynsymtab (abfd)
6884         && (elf_section_data (s)->this_hdr.sh_type == SHT_REL
6885             || elf_section_data (s)->this_hdr.sh_type == SHT_RELA))
6886       ret += ((s->size / elf_section_data (s)->this_hdr.sh_entsize)
6887               * sizeof (arelent *));
6888
6889   return ret;
6890 }
6891
6892 /* Canonicalize the dynamic relocation entries.  Note that we return the
6893    dynamic relocations as a single block, although they are actually
6894    associated with particular sections; the interface, which was
6895    designed for SunOS style shared libraries, expects that there is only
6896    one set of dynamic relocs.  Any loadable section that was actually
6897    installed in the BFD, and has type SHT_REL or SHT_RELA, and uses the
6898    dynamic symbol table, is considered to be a dynamic reloc section.  */
6899
6900 long
6901 _bfd_elf_canonicalize_dynamic_reloc (bfd *abfd,
6902                                      arelent **storage,
6903                                      asymbol **syms)
6904 {
6905   bfd_boolean (*slurp_relocs) (bfd *, asection *, asymbol **, bfd_boolean);
6906   asection *s;
6907   long ret;
6908
6909   if (elf_dynsymtab (abfd) == 0)
6910     {
6911       bfd_set_error (bfd_error_invalid_operation);
6912       return -1;
6913     }
6914
6915   slurp_relocs = get_elf_backend_data (abfd)->s->slurp_reloc_table;
6916   ret = 0;
6917   for (s = abfd->sections; s != NULL; s = s->next)
6918     {
6919       if (elf_section_data (s)->this_hdr.sh_link == elf_dynsymtab (abfd)
6920           && (elf_section_data (s)->this_hdr.sh_type == SHT_REL
6921               || elf_section_data (s)->this_hdr.sh_type == SHT_RELA))
6922         {
6923           arelent *p;
6924           long count, i;
6925
6926           if (! (*slurp_relocs) (abfd, s, syms, TRUE))
6927             return -1;
6928           count = s->size / elf_section_data (s)->this_hdr.sh_entsize;
6929           p = s->relocation;
6930           for (i = 0; i < count; i++)
6931             *storage++ = p++;
6932           ret += count;
6933         }
6934     }
6935
6936   *storage = NULL;
6937
6938   return ret;
6939 }
6940 \f
6941 /* Read in the version information.  */
6942
6943 bfd_boolean
6944 _bfd_elf_slurp_version_tables (bfd *abfd, bfd_boolean default_imported_symver)
6945 {
6946   bfd_byte *contents = NULL;
6947   unsigned int freeidx = 0;
6948
6949   if (elf_dynverref (abfd) != 0)
6950     {
6951       Elf_Internal_Shdr *hdr;
6952       Elf_External_Verneed *everneed;
6953       Elf_Internal_Verneed *iverneed;
6954       unsigned int i;
6955       bfd_byte *contents_end;
6956
6957       hdr = &elf_tdata (abfd)->dynverref_hdr;
6958
6959       elf_tdata (abfd)->verref = (Elf_Internal_Verneed *)
6960           bfd_zalloc2 (abfd, hdr->sh_info, sizeof (Elf_Internal_Verneed));
6961       if (elf_tdata (abfd)->verref == NULL)
6962         goto error_return;
6963
6964       elf_tdata (abfd)->cverrefs = hdr->sh_info;
6965
6966       contents = (bfd_byte *) bfd_malloc (hdr->sh_size);
6967       if (contents == NULL)
6968         {
6969 error_return_verref:
6970           elf_tdata (abfd)->verref = NULL;
6971           elf_tdata (abfd)->cverrefs = 0;
6972           goto error_return;
6973         }
6974       if (bfd_seek (abfd, hdr->sh_offset, SEEK_SET) != 0
6975           || bfd_bread (contents, hdr->sh_size, abfd) != hdr->sh_size)
6976         goto error_return_verref;
6977
6978       if (hdr->sh_info && hdr->sh_size < sizeof (Elf_External_Verneed))
6979         goto error_return_verref;
6980
6981       BFD_ASSERT (sizeof (Elf_External_Verneed)
6982                   == sizeof (Elf_External_Vernaux));
6983       contents_end = contents + hdr->sh_size - sizeof (Elf_External_Verneed);
6984       everneed = (Elf_External_Verneed *) contents;
6985       iverneed = elf_tdata (abfd)->verref;
6986       for (i = 0; i < hdr->sh_info; i++, iverneed++)
6987         {
6988           Elf_External_Vernaux *evernaux;
6989           Elf_Internal_Vernaux *ivernaux;
6990           unsigned int j;
6991
6992           _bfd_elf_swap_verneed_in (abfd, everneed, iverneed);
6993
6994           iverneed->vn_bfd = abfd;
6995
6996           iverneed->vn_filename =
6997             bfd_elf_string_from_elf_section (abfd, hdr->sh_link,
6998                                              iverneed->vn_file);
6999           if (iverneed->vn_filename == NULL)
7000             goto error_return_verref;
7001
7002           if (iverneed->vn_cnt == 0)
7003             iverneed->vn_auxptr = NULL;
7004           else
7005             {
7006               iverneed->vn_auxptr = (struct elf_internal_vernaux *)
7007                   bfd_alloc2 (abfd, iverneed->vn_cnt,
7008                               sizeof (Elf_Internal_Vernaux));
7009               if (iverneed->vn_auxptr == NULL)
7010                 goto error_return_verref;
7011             }
7012
7013           if (iverneed->vn_aux
7014               > (size_t) (contents_end - (bfd_byte *) everneed))
7015             goto error_return_verref;
7016
7017           evernaux = ((Elf_External_Vernaux *)
7018                       ((bfd_byte *) everneed + iverneed->vn_aux));
7019           ivernaux = iverneed->vn_auxptr;
7020           for (j = 0; j < iverneed->vn_cnt; j++, ivernaux++)
7021             {
7022               _bfd_elf_swap_vernaux_in (abfd, evernaux, ivernaux);
7023
7024               ivernaux->vna_nodename =
7025                 bfd_elf_string_from_elf_section (abfd, hdr->sh_link,
7026                                                  ivernaux->vna_name);
7027               if (ivernaux->vna_nodename == NULL)
7028                 goto error_return_verref;
7029
7030               if (j + 1 < iverneed->vn_cnt)
7031                 ivernaux->vna_nextptr = ivernaux + 1;
7032               else
7033                 ivernaux->vna_nextptr = NULL;
7034
7035               if (ivernaux->vna_next
7036                   > (size_t) (contents_end - (bfd_byte *) evernaux))
7037                 goto error_return_verref;
7038
7039               evernaux = ((Elf_External_Vernaux *)
7040                           ((bfd_byte *) evernaux + ivernaux->vna_next));
7041
7042               if (ivernaux->vna_other > freeidx)
7043                 freeidx = ivernaux->vna_other;
7044             }
7045
7046           if (i + 1 < hdr->sh_info)
7047             iverneed->vn_nextref = iverneed + 1;
7048           else
7049             iverneed->vn_nextref = NULL;
7050
7051           if (iverneed->vn_next
7052               > (size_t) (contents_end - (bfd_byte *) everneed))
7053             goto error_return_verref;
7054
7055           everneed = ((Elf_External_Verneed *)
7056                       ((bfd_byte *) everneed + iverneed->vn_next));
7057         }
7058
7059       free (contents);
7060       contents = NULL;
7061     }
7062
7063   if (elf_dynverdef (abfd) != 0)
7064     {
7065       Elf_Internal_Shdr *hdr;
7066       Elf_External_Verdef *everdef;
7067       Elf_Internal_Verdef *iverdef;
7068       Elf_Internal_Verdef *iverdefarr;
7069       Elf_Internal_Verdef iverdefmem;
7070       unsigned int i;
7071       unsigned int maxidx;
7072       bfd_byte *contents_end_def, *contents_end_aux;
7073
7074       hdr = &elf_tdata (abfd)->dynverdef_hdr;
7075
7076       contents = (bfd_byte *) bfd_malloc (hdr->sh_size);
7077       if (contents == NULL)
7078         goto error_return;
7079       if (bfd_seek (abfd, hdr->sh_offset, SEEK_SET) != 0
7080           || bfd_bread (contents, hdr->sh_size, abfd) != hdr->sh_size)
7081         goto error_return;
7082
7083       if (hdr->sh_info && hdr->sh_size < sizeof (Elf_External_Verdef))
7084         goto error_return;
7085
7086       BFD_ASSERT (sizeof (Elf_External_Verdef)
7087                   >= sizeof (Elf_External_Verdaux));
7088       contents_end_def = contents + hdr->sh_size
7089                          - sizeof (Elf_External_Verdef);
7090       contents_end_aux = contents + hdr->sh_size
7091                          - sizeof (Elf_External_Verdaux);
7092
7093       /* We know the number of entries in the section but not the maximum
7094          index.  Therefore we have to run through all entries and find
7095          the maximum.  */
7096       everdef = (Elf_External_Verdef *) contents;
7097       maxidx = 0;
7098       for (i = 0; i < hdr->sh_info; ++i)
7099         {
7100           _bfd_elf_swap_verdef_in (abfd, everdef, &iverdefmem);
7101
7102           if ((iverdefmem.vd_ndx & ((unsigned) VERSYM_VERSION)) > maxidx)
7103             maxidx = iverdefmem.vd_ndx & ((unsigned) VERSYM_VERSION);
7104
7105           if (iverdefmem.vd_next
7106               > (size_t) (contents_end_def - (bfd_byte *) everdef))
7107             goto error_return;
7108
7109           everdef = ((Elf_External_Verdef *)
7110                      ((bfd_byte *) everdef + iverdefmem.vd_next));
7111         }
7112
7113       if (default_imported_symver)
7114         {
7115           if (freeidx > maxidx)
7116             maxidx = ++freeidx;
7117           else
7118             freeidx = ++maxidx;
7119         }
7120       elf_tdata (abfd)->verdef = (Elf_Internal_Verdef *)
7121           bfd_zalloc2 (abfd, maxidx, sizeof (Elf_Internal_Verdef));
7122       if (elf_tdata (abfd)->verdef == NULL)
7123         goto error_return;
7124
7125       elf_tdata (abfd)->cverdefs = maxidx;
7126
7127       everdef = (Elf_External_Verdef *) contents;
7128       iverdefarr = elf_tdata (abfd)->verdef;
7129       for (i = 0; i < hdr->sh_info; i++)
7130         {
7131           Elf_External_Verdaux *everdaux;
7132           Elf_Internal_Verdaux *iverdaux;
7133           unsigned int j;
7134
7135           _bfd_elf_swap_verdef_in (abfd, everdef, &iverdefmem);
7136
7137           if ((iverdefmem.vd_ndx & VERSYM_VERSION) == 0)
7138             {
7139 error_return_verdef:
7140               elf_tdata (abfd)->verdef = NULL;
7141               elf_tdata (abfd)->cverdefs = 0;
7142               goto error_return;
7143             }
7144
7145           iverdef = &iverdefarr[(iverdefmem.vd_ndx & VERSYM_VERSION) - 1];
7146           memcpy (iverdef, &iverdefmem, sizeof (Elf_Internal_Verdef));
7147
7148           iverdef->vd_bfd = abfd;
7149
7150           if (iverdef->vd_cnt == 0)
7151             iverdef->vd_auxptr = NULL;
7152           else
7153             {
7154               iverdef->vd_auxptr = (struct elf_internal_verdaux *)
7155                   bfd_alloc2 (abfd, iverdef->vd_cnt,
7156                               sizeof (Elf_Internal_Verdaux));
7157               if (iverdef->vd_auxptr == NULL)
7158                 goto error_return_verdef;
7159             }
7160
7161           if (iverdef->vd_aux
7162               > (size_t) (contents_end_aux - (bfd_byte *) everdef))
7163             goto error_return_verdef;
7164
7165           everdaux = ((Elf_External_Verdaux *)
7166                       ((bfd_byte *) everdef + iverdef->vd_aux));
7167           iverdaux = iverdef->vd_auxptr;
7168           for (j = 0; j < iverdef->vd_cnt; j++, iverdaux++)
7169             {
7170               _bfd_elf_swap_verdaux_in (abfd, everdaux, iverdaux);
7171
7172               iverdaux->vda_nodename =
7173                 bfd_elf_string_from_elf_section (abfd, hdr->sh_link,
7174                                                  iverdaux->vda_name);
7175               if (iverdaux->vda_nodename == NULL)
7176                 goto error_return_verdef;
7177
7178               if (j + 1 < iverdef->vd_cnt)
7179                 iverdaux->vda_nextptr = iverdaux + 1;
7180               else
7181                 iverdaux->vda_nextptr = NULL;
7182
7183               if (iverdaux->vda_next
7184                   > (size_t) (contents_end_aux - (bfd_byte *) everdaux))
7185                 goto error_return_verdef;
7186
7187               everdaux = ((Elf_External_Verdaux *)
7188                           ((bfd_byte *) everdaux + iverdaux->vda_next));
7189             }
7190
7191           if (iverdef->vd_cnt)
7192             iverdef->vd_nodename = iverdef->vd_auxptr->vda_nodename;
7193
7194           if ((size_t) (iverdef - iverdefarr) + 1 < maxidx)
7195             iverdef->vd_nextdef = iverdef + 1;
7196           else
7197             iverdef->vd_nextdef = NULL;
7198
7199           everdef = ((Elf_External_Verdef *)
7200                      ((bfd_byte *) everdef + iverdef->vd_next));
7201         }
7202
7203       free (contents);
7204       contents = NULL;
7205     }
7206   else if (default_imported_symver)
7207     {
7208       if (freeidx < 3)
7209         freeidx = 3;
7210       else
7211         freeidx++;
7212
7213       elf_tdata (abfd)->verdef = (Elf_Internal_Verdef *)
7214           bfd_zalloc2 (abfd, freeidx, sizeof (Elf_Internal_Verdef));
7215       if (elf_tdata (abfd)->verdef == NULL)
7216         goto error_return;
7217
7218       elf_tdata (abfd)->cverdefs = freeidx;
7219     }
7220
7221   /* Create a default version based on the soname.  */
7222   if (default_imported_symver)
7223     {
7224       Elf_Internal_Verdef *iverdef;
7225       Elf_Internal_Verdaux *iverdaux;
7226
7227       iverdef = &elf_tdata (abfd)->verdef[freeidx - 1];;
7228
7229       iverdef->vd_version = VER_DEF_CURRENT;
7230       iverdef->vd_flags = 0;
7231       iverdef->vd_ndx = freeidx;
7232       iverdef->vd_cnt = 1;
7233
7234       iverdef->vd_bfd = abfd;
7235
7236       iverdef->vd_nodename = bfd_elf_get_dt_soname (abfd);
7237       if (iverdef->vd_nodename == NULL)
7238         goto error_return_verdef;
7239       iverdef->vd_nextdef = NULL;
7240       iverdef->vd_auxptr = (struct elf_internal_verdaux *)
7241           bfd_alloc (abfd, sizeof (Elf_Internal_Verdaux));
7242       if (iverdef->vd_auxptr == NULL)
7243         goto error_return_verdef;
7244
7245       iverdaux = iverdef->vd_auxptr;
7246       iverdaux->vda_nodename = iverdef->vd_nodename;
7247       iverdaux->vda_nextptr = NULL;
7248     }
7249
7250   return TRUE;
7251
7252  error_return:
7253   if (contents != NULL)
7254     free (contents);
7255   return FALSE;
7256 }
7257 \f
7258 asymbol *
7259 _bfd_elf_make_empty_symbol (bfd *abfd)
7260 {
7261   elf_symbol_type *newsym;
7262   bfd_size_type amt = sizeof (elf_symbol_type);
7263
7264   newsym = (elf_symbol_type *) bfd_zalloc (abfd, amt);
7265   if (!newsym)
7266     return NULL;
7267   else
7268     {
7269       newsym->symbol.the_bfd = abfd;
7270       return &newsym->symbol;
7271     }
7272 }
7273
7274 void
7275 _bfd_elf_get_symbol_info (bfd *abfd ATTRIBUTE_UNUSED,
7276                           asymbol *symbol,
7277                           symbol_info *ret)
7278 {
7279   bfd_symbol_info (symbol, ret);
7280 }
7281
7282 /* Return whether a symbol name implies a local symbol.  Most targets
7283    use this function for the is_local_label_name entry point, but some
7284    override it.  */
7285
7286 bfd_boolean
7287 _bfd_elf_is_local_label_name (bfd *abfd ATTRIBUTE_UNUSED,
7288                               const char *name)
7289 {
7290   /* Normal local symbols start with ``.L''.  */
7291   if (name[0] == '.' && name[1] == 'L')
7292     return TRUE;
7293
7294   /* At least some SVR4 compilers (e.g., UnixWare 2.1 cc) generate
7295      DWARF debugging symbols starting with ``..''.  */
7296   if (name[0] == '.' && name[1] == '.')
7297     return TRUE;
7298
7299   /* gcc will sometimes generate symbols beginning with ``_.L_'' when
7300      emitting DWARF debugging output.  I suspect this is actually a
7301      small bug in gcc (it calls ASM_OUTPUT_LABEL when it should call
7302      ASM_GENERATE_INTERNAL_LABEL, and this causes the leading
7303      underscore to be emitted on some ELF targets).  For ease of use,
7304      we treat such symbols as local.  */
7305   if (name[0] == '_' && name[1] == '.' && name[2] == 'L' && name[3] == '_')
7306     return TRUE;
7307
7308   return FALSE;
7309 }
7310
7311 alent *
7312 _bfd_elf_get_lineno (bfd *abfd ATTRIBUTE_UNUSED,
7313                      asymbol *symbol ATTRIBUTE_UNUSED)
7314 {
7315   abort ();
7316   return NULL;
7317 }
7318
7319 bfd_boolean
7320 _bfd_elf_set_arch_mach (bfd *abfd,
7321                         enum bfd_architecture arch,
7322                         unsigned long machine)
7323 {
7324   /* If this isn't the right architecture for this backend, and this
7325      isn't the generic backend, fail.  */
7326   if (arch != get_elf_backend_data (abfd)->arch
7327       && arch != bfd_arch_unknown
7328       && get_elf_backend_data (abfd)->arch != bfd_arch_unknown)
7329     return FALSE;
7330
7331   return bfd_default_set_arch_mach (abfd, arch, machine);
7332 }
7333
7334 /* Find the function to a particular section and offset,
7335    for error reporting.  */
7336
7337 static bfd_boolean
7338 elf_find_function (bfd *abfd,
7339                    asection *section,
7340                    asymbol **symbols,
7341                    bfd_vma offset,
7342                    const char **filename_ptr,
7343                    const char **functionname_ptr)
7344 {
7345   const char *filename;
7346   asymbol *func, *file;
7347   bfd_vma low_func;
7348   asymbol **p;
7349   /* ??? Given multiple file symbols, it is impossible to reliably
7350      choose the right file name for global symbols.  File symbols are
7351      local symbols, and thus all file symbols must sort before any
7352      global symbols.  The ELF spec may be interpreted to say that a
7353      file symbol must sort before other local symbols, but currently
7354      ld -r doesn't do this.  So, for ld -r output, it is possible to
7355      make a better choice of file name for local symbols by ignoring
7356      file symbols appearing after a given local symbol.  */
7357   enum { nothing_seen, symbol_seen, file_after_symbol_seen } state;
7358   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
7359
7360   filename = NULL;
7361   func = NULL;
7362   file = NULL;
7363   low_func = 0;
7364   state = nothing_seen;
7365
7366   for (p = symbols; *p != NULL; p++)
7367     {
7368       elf_symbol_type *q;
7369       unsigned int type;
7370
7371       q = (elf_symbol_type *) *p;
7372
7373       type = ELF_ST_TYPE (q->internal_elf_sym.st_info);
7374       switch (type)
7375         {
7376         case STT_FILE:
7377           file = &q->symbol;
7378           if (state == symbol_seen)
7379             state = file_after_symbol_seen;
7380           continue;
7381         default:
7382           if (!bed->is_function_type (type))
7383             break;
7384         case STT_NOTYPE:
7385           if (bfd_get_section (&q->symbol) == section
7386               && q->symbol.value >= low_func
7387               && q->symbol.value <= offset)
7388             {
7389               func = (asymbol *) q;
7390               low_func = q->symbol.value;
7391               filename = NULL;
7392               if (file != NULL
7393                   && (ELF_ST_BIND (q->internal_elf_sym.st_info) == STB_LOCAL
7394                       || state != file_after_symbol_seen))
7395                 filename = bfd_asymbol_name (file);
7396             }
7397           break;
7398         }
7399       if (state == nothing_seen)
7400         state = symbol_seen;
7401     }
7402
7403   if (func == NULL)
7404     return FALSE;
7405
7406   if (filename_ptr)
7407     *filename_ptr = filename;
7408   if (functionname_ptr)
7409     *functionname_ptr = bfd_asymbol_name (func);
7410
7411   return TRUE;
7412 }
7413
7414 /* Find the nearest line to a particular section and offset,
7415    for error reporting.  */
7416
7417 bfd_boolean
7418 _bfd_elf_find_nearest_line (bfd *abfd,
7419                             asection *section,
7420                             asymbol **symbols,
7421                             bfd_vma offset,
7422                             const char **filename_ptr,
7423                             const char **functionname_ptr,
7424                             unsigned int *line_ptr)
7425 {
7426   bfd_boolean found;
7427
7428   if (_bfd_dwarf1_find_nearest_line (abfd, section, symbols, offset,
7429                                      filename_ptr, functionname_ptr,
7430                                      line_ptr))
7431     {
7432       if (!*functionname_ptr)
7433         elf_find_function (abfd, section, symbols, offset,
7434                            *filename_ptr ? NULL : filename_ptr,
7435                            functionname_ptr);
7436
7437       return TRUE;
7438     }
7439
7440   if (_bfd_dwarf2_find_nearest_line (abfd, section, symbols, offset,
7441                                      filename_ptr, functionname_ptr,
7442                                      line_ptr, 0,
7443                                      &elf_tdata (abfd)->dwarf2_find_line_info))
7444     {
7445       if (!*functionname_ptr)
7446         elf_find_function (abfd, section, symbols, offset,
7447                            *filename_ptr ? NULL : filename_ptr,
7448                            functionname_ptr);
7449
7450       return TRUE;
7451     }
7452
7453   if (! _bfd_stab_section_find_nearest_line (abfd, symbols, section, offset,
7454                                              &found, filename_ptr,
7455                                              functionname_ptr, line_ptr,
7456                                              &elf_tdata (abfd)->line_info))
7457     return FALSE;
7458   if (found && (*functionname_ptr || *line_ptr))
7459     return TRUE;
7460
7461   if (symbols == NULL)
7462     return FALSE;
7463
7464   if (! elf_find_function (abfd, section, symbols, offset,
7465                            filename_ptr, functionname_ptr))
7466     return FALSE;
7467
7468   *line_ptr = 0;
7469   return TRUE;
7470 }
7471
7472 /* Find the line for a symbol.  */
7473
7474 bfd_boolean
7475 _bfd_elf_find_line (bfd *abfd, asymbol **symbols, asymbol *symbol,
7476                     const char **filename_ptr, unsigned int *line_ptr)
7477 {
7478   return _bfd_dwarf2_find_line (abfd, symbols, symbol,
7479                                 filename_ptr, line_ptr, 0,
7480                                 &elf_tdata (abfd)->dwarf2_find_line_info);
7481 }
7482
7483 /* After a call to bfd_find_nearest_line, successive calls to
7484    bfd_find_inliner_info can be used to get source information about
7485    each level of function inlining that terminated at the address
7486    passed to bfd_find_nearest_line.  Currently this is only supported
7487    for DWARF2 with appropriate DWARF3 extensions. */
7488
7489 bfd_boolean
7490 _bfd_elf_find_inliner_info (bfd *abfd,
7491                             const char **filename_ptr,
7492                             const char **functionname_ptr,
7493                             unsigned int *line_ptr)
7494 {
7495   bfd_boolean found;
7496   found = _bfd_dwarf2_find_inliner_info (abfd, filename_ptr,
7497                                          functionname_ptr, line_ptr,
7498                                          & elf_tdata (abfd)->dwarf2_find_line_info);
7499   return found;
7500 }
7501
7502 int
7503 _bfd_elf_sizeof_headers (bfd *abfd, struct bfd_link_info *info)
7504 {
7505   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
7506   int ret = bed->s->sizeof_ehdr;
7507
7508   if (!info->relocatable)
7509     {
7510       bfd_size_type phdr_size = elf_tdata (abfd)->program_header_size;
7511
7512       if (phdr_size == (bfd_size_type) -1)
7513         {
7514           struct elf_segment_map *m;
7515
7516           phdr_size = 0;
7517           for (m = elf_tdata (abfd)->segment_map; m != NULL; m = m->next)
7518             phdr_size += bed->s->sizeof_phdr;
7519
7520           if (phdr_size == 0)
7521             phdr_size = get_program_header_size (abfd, info);
7522         }
7523
7524       elf_tdata (abfd)->program_header_size = phdr_size;
7525       ret += phdr_size;
7526     }
7527
7528   return ret;
7529 }
7530
7531 bfd_boolean
7532 _bfd_elf_set_section_contents (bfd *abfd,
7533                                sec_ptr section,
7534                                const void *location,
7535                                file_ptr offset,
7536                                bfd_size_type count)
7537 {
7538   Elf_Internal_Shdr *hdr;
7539   bfd_signed_vma pos;
7540
7541   if (! abfd->output_has_begun
7542       && ! _bfd_elf_compute_section_file_positions (abfd, NULL))
7543     return FALSE;
7544
7545   hdr = &elf_section_data (section)->this_hdr;
7546   pos = hdr->sh_offset + offset;
7547   if (bfd_seek (abfd, pos, SEEK_SET) != 0
7548       || bfd_bwrite (location, count, abfd) != count)
7549     return FALSE;
7550
7551   return TRUE;
7552 }
7553
7554 void
7555 _bfd_elf_no_info_to_howto (bfd *abfd ATTRIBUTE_UNUSED,
7556                            arelent *cache_ptr ATTRIBUTE_UNUSED,
7557                            Elf_Internal_Rela *dst ATTRIBUTE_UNUSED)
7558 {
7559   abort ();
7560 }
7561
7562 /* Try to convert a non-ELF reloc into an ELF one.  */
7563
7564 bfd_boolean
7565 _bfd_elf_validate_reloc (bfd *abfd, arelent *areloc)
7566 {
7567   /* Check whether we really have an ELF howto.  */
7568
7569   if ((*areloc->sym_ptr_ptr)->the_bfd->xvec != abfd->xvec)
7570     {
7571       bfd_reloc_code_real_type code;
7572       reloc_howto_type *howto;
7573
7574       /* Alien reloc: Try to determine its type to replace it with an
7575          equivalent ELF reloc.  */
7576
7577       if (areloc->howto->pc_relative)
7578         {
7579           switch (areloc->howto->bitsize)
7580             {
7581             case 8:
7582               code = BFD_RELOC_8_PCREL;
7583               break;
7584             case 12:
7585               code = BFD_RELOC_12_PCREL;
7586               break;
7587             case 16:
7588               code = BFD_RELOC_16_PCREL;
7589               break;
7590             case 24:
7591               code = BFD_RELOC_24_PCREL;
7592               break;
7593             case 32:
7594               code = BFD_RELOC_32_PCREL;
7595               break;
7596             case 64:
7597               code = BFD_RELOC_64_PCREL;
7598               break;
7599             default:
7600               goto fail;
7601             }
7602
7603           howto = bfd_reloc_type_lookup (abfd, code);
7604
7605           if (areloc->howto->pcrel_offset != howto->pcrel_offset)
7606             {
7607               if (howto->pcrel_offset)
7608                 areloc->addend += areloc->address;
7609               else
7610                 areloc->addend -= areloc->address; /* addend is unsigned!! */
7611             }
7612         }
7613       else
7614         {
7615           switch (areloc->howto->bitsize)
7616             {
7617             case 8:
7618               code = BFD_RELOC_8;
7619               break;
7620             case 14:
7621               code = BFD_RELOC_14;
7622               break;
7623             case 16:
7624               code = BFD_RELOC_16;
7625               break;
7626             case 26:
7627               code = BFD_RELOC_26;
7628               break;
7629             case 32:
7630               code = BFD_RELOC_32;
7631               break;
7632             case 64:
7633               code = BFD_RELOC_64;
7634               break;
7635             default:
7636               goto fail;
7637             }
7638
7639           howto = bfd_reloc_type_lookup (abfd, code);
7640         }
7641
7642       if (howto)
7643         areloc->howto = howto;
7644       else
7645         goto fail;
7646     }
7647
7648   return TRUE;
7649
7650  fail:
7651   (*_bfd_error_handler)
7652     (_("%B: unsupported relocation type %s"),
7653      abfd, areloc->howto->name);
7654   bfd_set_error (bfd_error_bad_value);
7655   return FALSE;
7656 }
7657
7658 bfd_boolean
7659 _bfd_elf_close_and_cleanup (bfd *abfd)
7660 {
7661   if (bfd_get_format (abfd) == bfd_object)
7662     {
7663       if (elf_tdata (abfd) != NULL && elf_shstrtab (abfd) != NULL)
7664         _bfd_elf_strtab_free (elf_shstrtab (abfd));
7665       _bfd_dwarf2_cleanup_debug_info (abfd);
7666     }
7667
7668   return _bfd_generic_close_and_cleanup (abfd);
7669 }
7670
7671 /* For Rel targets, we encode meaningful data for BFD_RELOC_VTABLE_ENTRY
7672    in the relocation's offset.  Thus we cannot allow any sort of sanity
7673    range-checking to interfere.  There is nothing else to do in processing
7674    this reloc.  */
7675
7676 bfd_reloc_status_type
7677 _bfd_elf_rel_vtable_reloc_fn
7678   (bfd *abfd ATTRIBUTE_UNUSED, arelent *re ATTRIBUTE_UNUSED,
7679    struct bfd_symbol *symbol ATTRIBUTE_UNUSED,
7680    void *data ATTRIBUTE_UNUSED, asection *is ATTRIBUTE_UNUSED,
7681    bfd *obfd ATTRIBUTE_UNUSED, char **errmsg ATTRIBUTE_UNUSED)
7682 {
7683   return bfd_reloc_ok;
7684 }
7685 \f
7686 /* Elf core file support.  Much of this only works on native
7687    toolchains, since we rely on knowing the
7688    machine-dependent procfs structure in order to pick
7689    out details about the corefile.  */
7690
7691 #ifdef HAVE_SYS_PROCFS_H
7692 /* Needed for new procfs interface on sparc-solaris.  */
7693 # define _STRUCTURED_PROC 1
7694 # include <sys/procfs.h>
7695 #endif
7696
7697 /* Return a PID that identifies a "thread" for threaded cores, or the
7698    PID of the main process for non-threaded cores.  */
7699
7700 static int
7701 elfcore_make_pid (bfd *abfd)
7702 {
7703   int pid;
7704
7705   pid = elf_tdata (abfd)->core_lwpid;
7706   if (pid == 0)
7707     pid = elf_tdata (abfd)->core_pid;
7708
7709   return pid;
7710 }
7711
7712 /* If there isn't a section called NAME, make one, using
7713    data from SECT.  Note, this function will generate a
7714    reference to NAME, so you shouldn't deallocate or
7715    overwrite it.  */
7716
7717 static bfd_boolean
7718 elfcore_maybe_make_sect (bfd *abfd, char *name, asection *sect)
7719 {
7720   asection *sect2;
7721
7722   if (bfd_get_section_by_name (abfd, name) != NULL)
7723     return TRUE;
7724
7725   sect2 = bfd_make_section_with_flags (abfd, name, sect->flags);
7726   if (sect2 == NULL)
7727     return FALSE;
7728
7729   sect2->size = sect->size;
7730   sect2->filepos = sect->filepos;
7731   sect2->alignment_power = sect->alignment_power;
7732   return TRUE;
7733 }
7734
7735 /* Create a pseudosection containing SIZE bytes at FILEPOS.  This
7736    actually creates up to two pseudosections:
7737    - For the single-threaded case, a section named NAME, unless
7738      such a section already exists.
7739    - For the multi-threaded case, a section named "NAME/PID", where
7740      PID is elfcore_make_pid (abfd).
7741    Both pseudosections have identical contents. */
7742 bfd_boolean
7743 _bfd_elfcore_make_pseudosection (bfd *abfd,
7744                                  char *name,
7745                                  size_t size,
7746                                  ufile_ptr filepos)
7747 {
7748   char buf[100];
7749   char *threaded_name;
7750   size_t len;
7751   asection *sect;
7752
7753   /* Build the section name.  */
7754
7755   sprintf (buf, "%s/%d", name, elfcore_make_pid (abfd));
7756   len = strlen (buf) + 1;
7757   threaded_name = (char *) bfd_alloc (abfd, len);
7758   if (threaded_name == NULL)
7759     return FALSE;
7760   memcpy (threaded_name, buf, len);
7761
7762   sect = bfd_make_section_anyway_with_flags (abfd, threaded_name,
7763                                              SEC_HAS_CONTENTS);
7764   if (sect == NULL)
7765     return FALSE;
7766   sect->size = size;
7767   sect->filepos = filepos;
7768   sect->alignment_power = 2;
7769
7770   return elfcore_maybe_make_sect (abfd, name, sect);
7771 }
7772
7773 /* prstatus_t exists on:
7774      solaris 2.5+
7775      linux 2.[01] + glibc
7776      unixware 4.2
7777 */
7778
7779 #if defined (HAVE_PRSTATUS_T)
7780
7781 static bfd_boolean
7782 elfcore_grok_prstatus (bfd *abfd, Elf_Internal_Note *note)
7783 {
7784   size_t size;
7785   int offset;
7786
7787   if (note->descsz == sizeof (prstatus_t))
7788     {
7789       prstatus_t prstat;
7790
7791       size = sizeof (prstat.pr_reg);
7792       offset   = offsetof (prstatus_t, pr_reg);
7793       memcpy (&prstat, note->descdata, sizeof (prstat));
7794
7795       /* Do not overwrite the core signal if it
7796          has already been set by another thread.  */
7797       if (elf_tdata (abfd)->core_signal == 0)
7798         elf_tdata (abfd)->core_signal = prstat.pr_cursig;
7799       if (elf_tdata (abfd)->core_pid == 0)
7800         elf_tdata (abfd)->core_pid = prstat.pr_pid;
7801
7802       /* pr_who exists on:
7803          solaris 2.5+
7804          unixware 4.2
7805          pr_who doesn't exist on:
7806          linux 2.[01]
7807          */
7808 #if defined (HAVE_PRSTATUS_T_PR_WHO)
7809       elf_tdata (abfd)->core_lwpid = prstat.pr_who;
7810 #else
7811       elf_tdata (abfd)->core_lwpid = prstat.pr_pid;
7812 #endif
7813     }
7814 #if defined (HAVE_PRSTATUS32_T)
7815   else if (note->descsz == sizeof (prstatus32_t))
7816     {
7817       /* 64-bit host, 32-bit corefile */
7818       prstatus32_t prstat;
7819
7820       size = sizeof (prstat.pr_reg);
7821       offset   = offsetof (prstatus32_t, pr_reg);
7822       memcpy (&prstat, note->descdata, sizeof (prstat));
7823
7824       /* Do not overwrite the core signal if it
7825          has already been set by another thread.  */
7826       if (elf_tdata (abfd)->core_signal == 0)
7827         elf_tdata (abfd)->core_signal = prstat.pr_cursig;
7828       if (elf_tdata (abfd)->core_pid == 0)
7829         elf_tdata (abfd)->core_pid = prstat.pr_pid;
7830
7831       /* pr_who exists on:
7832          solaris 2.5+
7833          unixware 4.2
7834          pr_who doesn't exist on:
7835          linux 2.[01]
7836          */
7837 #if defined (HAVE_PRSTATUS32_T_PR_WHO)
7838       elf_tdata (abfd)->core_lwpid = prstat.pr_who;
7839 #else
7840       elf_tdata (abfd)->core_lwpid = prstat.pr_pid;
7841 #endif
7842     }
7843 #endif /* HAVE_PRSTATUS32_T */
7844   else
7845     {
7846       /* Fail - we don't know how to handle any other
7847          note size (ie. data object type).  */
7848       return TRUE;
7849     }
7850
7851   /* Make a ".reg/999" section and a ".reg" section.  */
7852   return _bfd_elfcore_make_pseudosection (abfd, ".reg",
7853                                           size, note->descpos + offset);
7854 }
7855 #endif /* defined (HAVE_PRSTATUS_T) */
7856
7857 /* Create a pseudosection containing the exact contents of NOTE.  */
7858 static bfd_boolean
7859 elfcore_make_note_pseudosection (bfd *abfd,
7860                                  char *name,
7861                                  Elf_Internal_Note *note)
7862 {
7863   return _bfd_elfcore_make_pseudosection (abfd, name,
7864                                           note->descsz, note->descpos);
7865 }
7866
7867 /* There isn't a consistent prfpregset_t across platforms,
7868    but it doesn't matter, because we don't have to pick this
7869    data structure apart.  */
7870
7871 static bfd_boolean
7872 elfcore_grok_prfpreg (bfd *abfd, Elf_Internal_Note *note)
7873 {
7874   return elfcore_make_note_pseudosection (abfd, ".reg2", note);
7875 }
7876
7877 /* Linux dumps the Intel SSE regs in a note named "LINUX" with a note
7878    type of NT_PRXFPREG.  Just include the whole note's contents
7879    literally.  */
7880
7881 static bfd_boolean
7882 elfcore_grok_prxfpreg (bfd *abfd, Elf_Internal_Note *note)
7883 {
7884   return elfcore_make_note_pseudosection (abfd, ".reg-xfp", note);
7885 }
7886
7887 /* Linux dumps the Intel XSAVE extended state in a note named "LINUX"
7888    with a note type of NT_X86_XSTATE.  Just include the whole note's
7889    contents literally.  */
7890
7891 static bfd_boolean
7892 elfcore_grok_xstatereg (bfd *abfd, Elf_Internal_Note *note)
7893 {
7894   return elfcore_make_note_pseudosection (abfd, ".reg-xstate", note);
7895 }
7896
7897 static bfd_boolean
7898 elfcore_grok_ppc_vmx (bfd *abfd, Elf_Internal_Note *note)
7899 {
7900   return elfcore_make_note_pseudosection (abfd, ".reg-ppc-vmx", note);
7901 }
7902
7903 static bfd_boolean
7904 elfcore_grok_ppc_vsx (bfd *abfd, Elf_Internal_Note *note)
7905 {
7906   return elfcore_make_note_pseudosection (abfd, ".reg-ppc-vsx", note);
7907 }
7908
7909 static bfd_boolean
7910 elfcore_grok_s390_high_gprs (bfd *abfd, Elf_Internal_Note *note)
7911 {
7912   return elfcore_make_note_pseudosection (abfd, ".reg-s390-high-gprs", note);
7913 }
7914
7915 static bfd_boolean
7916 elfcore_grok_s390_timer (bfd *abfd, Elf_Internal_Note *note)
7917 {
7918   return elfcore_make_note_pseudosection (abfd, ".reg-s390-timer", note);
7919 }
7920
7921 static bfd_boolean
7922 elfcore_grok_s390_todcmp (bfd *abfd, Elf_Internal_Note *note)
7923 {
7924   return elfcore_make_note_pseudosection (abfd, ".reg-s390-todcmp", note);
7925 }
7926
7927 static bfd_boolean
7928 elfcore_grok_s390_todpreg (bfd *abfd, Elf_Internal_Note *note)
7929 {
7930   return elfcore_make_note_pseudosection (abfd, ".reg-s390-todpreg", note);
7931 }
7932
7933 static bfd_boolean
7934 elfcore_grok_s390_ctrs (bfd *abfd, Elf_Internal_Note *note)
7935 {
7936   return elfcore_make_note_pseudosection (abfd, ".reg-s390-ctrs", note);
7937 }
7938
7939 static bfd_boolean
7940 elfcore_grok_s390_prefix (bfd *abfd, Elf_Internal_Note *note)
7941 {
7942   return elfcore_make_note_pseudosection (abfd, ".reg-s390-prefix", note);
7943 }
7944
7945 #if defined (HAVE_PRPSINFO_T)
7946 typedef prpsinfo_t   elfcore_psinfo_t;
7947 #if defined (HAVE_PRPSINFO32_T)         /* Sparc64 cross Sparc32 */
7948 typedef prpsinfo32_t elfcore_psinfo32_t;
7949 #endif
7950 #endif
7951
7952 #if defined (HAVE_PSINFO_T)
7953 typedef psinfo_t   elfcore_psinfo_t;
7954 #if defined (HAVE_PSINFO32_T)           /* Sparc64 cross Sparc32 */
7955 typedef psinfo32_t elfcore_psinfo32_t;
7956 #endif
7957 #endif
7958
7959 /* return a malloc'ed copy of a string at START which is at
7960    most MAX bytes long, possibly without a terminating '\0'.
7961    the copy will always have a terminating '\0'.  */
7962
7963 char *
7964 _bfd_elfcore_strndup (bfd *abfd, char *start, size_t max)
7965 {
7966   char *dups;
7967   char *end = (char *) memchr (start, '\0', max);
7968   size_t len;
7969
7970   if (end == NULL)
7971     len = max;
7972   else
7973     len = end - start;
7974
7975   dups = (char *) bfd_alloc (abfd, len + 1);
7976   if (dups == NULL)
7977     return NULL;
7978
7979   memcpy (dups, start, len);
7980   dups[len] = '\0';
7981
7982   return dups;
7983 }
7984
7985 #if defined (HAVE_PRPSINFO_T) || defined (HAVE_PSINFO_T)
7986 static bfd_boolean
7987 elfcore_grok_psinfo (bfd *abfd, Elf_Internal_Note *note)
7988 {
7989   if (note->descsz == sizeof (elfcore_psinfo_t))
7990     {
7991       elfcore_psinfo_t psinfo;
7992
7993       memcpy (&psinfo, note->descdata, sizeof (psinfo));
7994
7995       elf_tdata (abfd)->core_program
7996         = _bfd_elfcore_strndup (abfd, psinfo.pr_fname,
7997                                 sizeof (psinfo.pr_fname));
7998
7999       elf_tdata (abfd)->core_command
8000         = _bfd_elfcore_strndup (abfd, psinfo.pr_psargs,
8001                                 sizeof (psinfo.pr_psargs));
8002     }
8003 #if defined (HAVE_PRPSINFO32_T) || defined (HAVE_PSINFO32_T)
8004   else if (note->descsz == sizeof (elfcore_psinfo32_t))
8005     {
8006       /* 64-bit host, 32-bit corefile */
8007       elfcore_psinfo32_t psinfo;
8008
8009       memcpy (&psinfo, note->descdata, sizeof (psinfo));
8010
8011       elf_tdata (abfd)->core_program
8012         = _bfd_elfcore_strndup (abfd, psinfo.pr_fname,
8013                                 sizeof (psinfo.pr_fname));
8014
8015       elf_tdata (abfd)->core_command
8016         = _bfd_elfcore_strndup (abfd, psinfo.pr_psargs,
8017                                 sizeof (psinfo.pr_psargs));
8018     }
8019 #endif
8020
8021   else
8022     {
8023       /* Fail - we don't know how to handle any other
8024          note size (ie. data object type).  */
8025       return TRUE;
8026     }
8027
8028   /* Note that for some reason, a spurious space is tacked
8029      onto the end of the args in some (at least one anyway)
8030      implementations, so strip it off if it exists.  */
8031
8032   {
8033     char *command = elf_tdata (abfd)->core_command;
8034     int n = strlen (command);
8035
8036     if (0 < n && command[n - 1] == ' ')
8037       command[n - 1] = '\0';
8038   }
8039
8040   return TRUE;
8041 }
8042 #endif /* defined (HAVE_PRPSINFO_T) || defined (HAVE_PSINFO_T) */
8043
8044 #if defined (HAVE_PSTATUS_T)
8045 static bfd_boolean
8046 elfcore_grok_pstatus (bfd *abfd, Elf_Internal_Note *note)
8047 {
8048   if (note->descsz == sizeof (pstatus_t)
8049 #if defined (HAVE_PXSTATUS_T)
8050       || note->descsz == sizeof (pxstatus_t)
8051 #endif
8052       )
8053     {
8054       pstatus_t pstat;
8055
8056       memcpy (&pstat, note->descdata, sizeof (pstat));
8057
8058       elf_tdata (abfd)->core_pid = pstat.pr_pid;
8059     }
8060 #if defined (HAVE_PSTATUS32_T)
8061   else if (note->descsz == sizeof (pstatus32_t))
8062     {
8063       /* 64-bit host, 32-bit corefile */
8064       pstatus32_t pstat;
8065
8066       memcpy (&pstat, note->descdata, sizeof (pstat));
8067
8068       elf_tdata (abfd)->core_pid = pstat.pr_pid;
8069     }
8070 #endif
8071   /* Could grab some more details from the "representative"
8072      lwpstatus_t in pstat.pr_lwp, but we'll catch it all in an
8073      NT_LWPSTATUS note, presumably.  */
8074
8075   return TRUE;
8076 }
8077 #endif /* defined (HAVE_PSTATUS_T) */
8078
8079 #if defined (HAVE_LWPSTATUS_T)
8080 static bfd_boolean
8081 elfcore_grok_lwpstatus (bfd *abfd, Elf_Internal_Note *note)
8082 {
8083   lwpstatus_t lwpstat;
8084   char buf[100];
8085   char *name;
8086   size_t len;
8087   asection *sect;
8088
8089   if (note->descsz != sizeof (lwpstat)
8090 #if defined (HAVE_LWPXSTATUS_T)
8091       && note->descsz != sizeof (lwpxstatus_t)
8092 #endif
8093       )
8094     return TRUE;
8095
8096   memcpy (&lwpstat, note->descdata, sizeof (lwpstat));
8097
8098   elf_tdata (abfd)->core_lwpid = lwpstat.pr_lwpid;
8099   /* Do not overwrite the core signal if it has already been set by
8100      another thread.  */
8101   if (elf_tdata (abfd)->core_signal == 0)
8102     elf_tdata (abfd)->core_signal = lwpstat.pr_cursig;
8103
8104   /* Make a ".reg/999" section.  */
8105
8106   sprintf (buf, ".reg/%d", elfcore_make_pid (abfd));
8107   len = strlen (buf) + 1;
8108   name = bfd_alloc (abfd, len);
8109   if (name == NULL)
8110     return FALSE;
8111   memcpy (name, buf, len);
8112
8113   sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS);
8114   if (sect == NULL)
8115     return FALSE;
8116
8117 #if defined (HAVE_LWPSTATUS_T_PR_CONTEXT)
8118   sect->size = sizeof (lwpstat.pr_context.uc_mcontext.gregs);
8119   sect->filepos = note->descpos
8120     + offsetof (lwpstatus_t, pr_context.uc_mcontext.gregs);
8121 #endif
8122
8123 #if defined (HAVE_LWPSTATUS_T_PR_REG)
8124   sect->size = sizeof (lwpstat.pr_reg);
8125   sect->filepos = note->descpos + offsetof (lwpstatus_t, pr_reg);
8126 #endif
8127
8128   sect->alignment_power = 2;
8129
8130   if (!elfcore_maybe_make_sect (abfd, ".reg", sect))
8131     return FALSE;
8132
8133   /* Make a ".reg2/999" section */
8134
8135   sprintf (buf, ".reg2/%d", elfcore_make_pid (abfd));
8136   len = strlen (buf) + 1;
8137   name = bfd_alloc (abfd, len);
8138   if (name == NULL)
8139     return FALSE;
8140   memcpy (name, buf, len);
8141
8142   sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS);
8143   if (sect == NULL)
8144     return FALSE;
8145
8146 #if defined (HAVE_LWPSTATUS_T_PR_CONTEXT)
8147   sect->size = sizeof (lwpstat.pr_context.uc_mcontext.fpregs);
8148   sect->filepos = note->descpos
8149     + offsetof (lwpstatus_t, pr_context.uc_mcontext.fpregs);
8150 #endif
8151
8152 #if defined (HAVE_LWPSTATUS_T_PR_FPREG)
8153   sect->size = sizeof (lwpstat.pr_fpreg);
8154   sect->filepos = note->descpos + offsetof (lwpstatus_t, pr_fpreg);
8155 #endif
8156
8157   sect->alignment_power = 2;
8158
8159   return elfcore_maybe_make_sect (abfd, ".reg2", sect);
8160 }
8161 #endif /* defined (HAVE_LWPSTATUS_T) */
8162
8163 static bfd_boolean
8164 elfcore_grok_win32pstatus (bfd *abfd, Elf_Internal_Note *note)
8165 {
8166   char buf[30];
8167   char *name;
8168   size_t len;
8169   asection *sect;
8170   int type;
8171   int is_active_thread;
8172   bfd_vma base_addr;
8173
8174   if (note->descsz < 728)
8175     return TRUE;
8176
8177   if (! CONST_STRNEQ (note->namedata, "win32"))
8178     return TRUE;
8179
8180   type = bfd_get_32 (abfd, note->descdata);
8181
8182   switch (type)
8183     {
8184     case 1 /* NOTE_INFO_PROCESS */:
8185       /* FIXME: need to add ->core_command.  */
8186       /* process_info.pid */
8187       elf_tdata (abfd)->core_pid = bfd_get_32 (abfd, note->descdata + 8);
8188       /* process_info.signal */
8189       elf_tdata (abfd)->core_signal = bfd_get_32 (abfd, note->descdata + 12);
8190       break;
8191
8192     case 2 /* NOTE_INFO_THREAD */:
8193       /* Make a ".reg/999" section.  */
8194       /* thread_info.tid */
8195       sprintf (buf, ".reg/%ld", (long) bfd_get_32 (abfd, note->descdata + 8));
8196
8197       len = strlen (buf) + 1;
8198       name = (char *) bfd_alloc (abfd, len);
8199       if (name == NULL)
8200         return FALSE;
8201
8202       memcpy (name, buf, len);
8203
8204       sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS);
8205       if (sect == NULL)
8206         return FALSE;
8207
8208       /* sizeof (thread_info.thread_context) */
8209       sect->size = 716;
8210       /* offsetof (thread_info.thread_context) */
8211       sect->filepos = note->descpos + 12;
8212       sect->alignment_power = 2;
8213
8214       /* thread_info.is_active_thread */
8215       is_active_thread = bfd_get_32 (abfd, note->descdata + 8);
8216
8217       if (is_active_thread)
8218         if (! elfcore_maybe_make_sect (abfd, ".reg", sect))
8219           return FALSE;
8220       break;
8221
8222     case 3 /* NOTE_INFO_MODULE */:
8223       /* Make a ".module/xxxxxxxx" section.  */
8224       /* module_info.base_address */
8225       base_addr = bfd_get_32 (abfd, note->descdata + 4);
8226       sprintf (buf, ".module/%08lx", (unsigned long) base_addr);
8227
8228       len = strlen (buf) + 1;
8229       name = (char *) bfd_alloc (abfd, len);
8230       if (name == NULL)
8231         return FALSE;
8232
8233       memcpy (name, buf, len);
8234
8235       sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS);
8236
8237       if (sect == NULL)
8238         return FALSE;
8239
8240       sect->size = note->descsz;
8241       sect->filepos = note->descpos;
8242       sect->alignment_power = 2;
8243       break;
8244
8245     default:
8246       return TRUE;
8247     }
8248
8249   return TRUE;
8250 }
8251
8252 static bfd_boolean
8253 elfcore_grok_note (bfd *abfd, Elf_Internal_Note *note)
8254 {
8255   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
8256
8257   switch (note->type)
8258     {
8259     default:
8260       return TRUE;
8261
8262     case NT_PRSTATUS:
8263       if (bed->elf_backend_grok_prstatus)
8264         if ((*bed->elf_backend_grok_prstatus) (abfd, note))
8265           return TRUE;
8266 #if defined (HAVE_PRSTATUS_T)
8267       return elfcore_grok_prstatus (abfd, note);
8268 #else
8269       return TRUE;
8270 #endif
8271
8272 #if defined (HAVE_PSTATUS_T)
8273     case NT_PSTATUS:
8274       return elfcore_grok_pstatus (abfd, note);
8275 #endif
8276
8277 #if defined (HAVE_LWPSTATUS_T)
8278     case NT_LWPSTATUS:
8279       return elfcore_grok_lwpstatus (abfd, note);
8280 #endif
8281
8282     case NT_FPREGSET:           /* FIXME: rename to NT_PRFPREG */
8283       return elfcore_grok_prfpreg (abfd, note);
8284
8285     case NT_WIN32PSTATUS:
8286       return elfcore_grok_win32pstatus (abfd, note);
8287
8288     case NT_PRXFPREG:           /* Linux SSE extension */
8289       if (note->namesz == 6
8290           && strcmp (note->namedata, "LINUX") == 0)
8291         return elfcore_grok_prxfpreg (abfd, note);
8292       else
8293         return TRUE;
8294
8295     case NT_X86_XSTATE:         /* Linux XSAVE extension */
8296       if (note->namesz == 6
8297           && strcmp (note->namedata, "LINUX") == 0)
8298         return elfcore_grok_xstatereg (abfd, note);
8299       else
8300         return TRUE;
8301
8302     case NT_PPC_VMX:
8303       if (note->namesz == 6
8304           && strcmp (note->namedata, "LINUX") == 0)
8305         return elfcore_grok_ppc_vmx (abfd, note);
8306       else
8307         return TRUE;
8308
8309     case NT_PPC_VSX:
8310       if (note->namesz == 6
8311           && strcmp (note->namedata, "LINUX") == 0)
8312         return elfcore_grok_ppc_vsx (abfd, note);
8313       else
8314         return TRUE;
8315
8316     case NT_S390_HIGH_GPRS:
8317       if (note->namesz == 6
8318           && strcmp (note->namedata, "LINUX") == 0)
8319         return elfcore_grok_s390_high_gprs (abfd, note);
8320       else
8321         return TRUE;
8322
8323     case NT_S390_TIMER:
8324       if (note->namesz == 6
8325           && strcmp (note->namedata, "LINUX") == 0)
8326         return elfcore_grok_s390_timer (abfd, note);
8327       else
8328         return TRUE;
8329
8330     case NT_S390_TODCMP:
8331       if (note->namesz == 6
8332           && strcmp (note->namedata, "LINUX") == 0)
8333         return elfcore_grok_s390_todcmp (abfd, note);
8334       else
8335         return TRUE;
8336
8337     case NT_S390_TODPREG:
8338       if (note->namesz == 6
8339           && strcmp (note->namedata, "LINUX") == 0)
8340         return elfcore_grok_s390_todpreg (abfd, note);
8341       else
8342         return TRUE;
8343
8344     case NT_S390_CTRS:
8345       if (note->namesz == 6
8346           && strcmp (note->namedata, "LINUX") == 0)
8347         return elfcore_grok_s390_ctrs (abfd, note);
8348       else
8349         return TRUE;
8350
8351     case NT_S390_PREFIX:
8352       if (note->namesz == 6
8353           && strcmp (note->namedata, "LINUX") == 0)
8354         return elfcore_grok_s390_prefix (abfd, note);
8355       else
8356         return TRUE;
8357
8358     case NT_PRPSINFO:
8359     case NT_PSINFO:
8360       if (bed->elf_backend_grok_psinfo)
8361         if ((*bed->elf_backend_grok_psinfo) (abfd, note))
8362           return TRUE;
8363 #if defined (HAVE_PRPSINFO_T) || defined (HAVE_PSINFO_T)
8364       return elfcore_grok_psinfo (abfd, note);
8365 #else
8366       return TRUE;
8367 #endif
8368
8369     case NT_AUXV:
8370       {
8371         asection *sect = bfd_make_section_anyway_with_flags (abfd, ".auxv",
8372                                                              SEC_HAS_CONTENTS);
8373
8374         if (sect == NULL)
8375           return FALSE;
8376         sect->size = note->descsz;
8377         sect->filepos = note->descpos;
8378         sect->alignment_power = 1 + bfd_get_arch_size (abfd) / 32;
8379
8380         return TRUE;
8381       }
8382     }
8383 }
8384
8385 static bfd_boolean
8386 elfobj_grok_gnu_build_id (bfd *abfd, Elf_Internal_Note *note)
8387 {
8388   elf_tdata (abfd)->build_id_size = note->descsz;
8389   elf_tdata (abfd)->build_id = (bfd_byte *) bfd_alloc (abfd, note->descsz);
8390   if (elf_tdata (abfd)->build_id == NULL)
8391     return FALSE;
8392
8393   memcpy (elf_tdata (abfd)->build_id, note->descdata, note->descsz);
8394
8395   return TRUE;
8396 }
8397
8398 static bfd_boolean
8399 elfobj_grok_gnu_note (bfd *abfd, Elf_Internal_Note *note)
8400 {
8401   switch (note->type)
8402     {
8403     default:
8404       return TRUE;
8405
8406     case NT_GNU_BUILD_ID:
8407       return elfobj_grok_gnu_build_id (abfd, note);
8408     }
8409 }
8410
8411 static bfd_boolean
8412 elfcore_netbsd_get_lwpid (Elf_Internal_Note *note, int *lwpidp)
8413 {
8414   char *cp;
8415
8416   cp = strchr (note->namedata, '@');
8417   if (cp != NULL)
8418     {
8419       *lwpidp = atoi(cp + 1);
8420       return TRUE;
8421     }
8422   return FALSE;
8423 }
8424
8425 static bfd_boolean
8426 elfcore_grok_netbsd_procinfo (bfd *abfd, Elf_Internal_Note *note)
8427 {
8428   /* Signal number at offset 0x08. */
8429   elf_tdata (abfd)->core_signal
8430     = bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + 0x08);
8431
8432   /* Process ID at offset 0x50. */
8433   elf_tdata (abfd)->core_pid
8434     = bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + 0x50);
8435
8436   /* Command name at 0x7c (max 32 bytes, including nul). */
8437   elf_tdata (abfd)->core_command
8438     = _bfd_elfcore_strndup (abfd, note->descdata + 0x7c, 31);
8439
8440   return elfcore_make_note_pseudosection (abfd, ".note.netbsdcore.procinfo",
8441                                           note);
8442 }
8443
8444 static bfd_boolean
8445 elfcore_grok_netbsd_note (bfd *abfd, Elf_Internal_Note *note)
8446 {
8447   int lwp;
8448
8449   if (elfcore_netbsd_get_lwpid (note, &lwp))
8450     elf_tdata (abfd)->core_lwpid = lwp;
8451
8452   if (note->type == NT_NETBSDCORE_PROCINFO)
8453     {
8454       /* NetBSD-specific core "procinfo".  Note that we expect to
8455          find this note before any of the others, which is fine,
8456          since the kernel writes this note out first when it
8457          creates a core file.  */
8458
8459       return elfcore_grok_netbsd_procinfo (abfd, note);
8460     }
8461
8462   /* As of Jan 2002 there are no other machine-independent notes
8463      defined for NetBSD core files.  If the note type is less
8464      than the start of the machine-dependent note types, we don't
8465      understand it.  */
8466
8467   if (note->type < NT_NETBSDCORE_FIRSTMACH)
8468     return TRUE;
8469
8470
8471   switch (bfd_get_arch (abfd))
8472     {
8473       /* On the Alpha, SPARC (32-bit and 64-bit), PT_GETREGS == mach+0 and
8474          PT_GETFPREGS == mach+2.  */
8475
8476     case bfd_arch_alpha:
8477     case bfd_arch_sparc:
8478       switch (note->type)
8479         {
8480         case NT_NETBSDCORE_FIRSTMACH+0:
8481           return elfcore_make_note_pseudosection (abfd, ".reg", note);
8482
8483         case NT_NETBSDCORE_FIRSTMACH+2:
8484           return elfcore_make_note_pseudosection (abfd, ".reg2", note);
8485
8486         default:
8487           return TRUE;
8488         }
8489
8490       /* On all other arch's, PT_GETREGS == mach+1 and
8491          PT_GETFPREGS == mach+3.  */
8492
8493     default:
8494       switch (note->type)
8495         {
8496         case NT_NETBSDCORE_FIRSTMACH+1:
8497           return elfcore_make_note_pseudosection (abfd, ".reg", note);
8498
8499         case NT_NETBSDCORE_FIRSTMACH+3:
8500           return elfcore_make_note_pseudosection (abfd, ".reg2", note);
8501
8502         default:
8503           return TRUE;
8504         }
8505     }
8506     /* NOTREACHED */
8507 }
8508
8509 static bfd_boolean
8510 elfcore_grok_openbsd_procinfo (bfd *abfd, Elf_Internal_Note *note)
8511 {
8512   /* Signal number at offset 0x08. */
8513   elf_tdata (abfd)->core_signal
8514     = bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + 0x08);
8515
8516   /* Process ID at offset 0x20. */
8517   elf_tdata (abfd)->core_pid
8518     = bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + 0x20);
8519
8520   /* Command name at 0x48 (max 32 bytes, including nul). */
8521   elf_tdata (abfd)->core_command
8522     = _bfd_elfcore_strndup (abfd, note->descdata + 0x48, 31);
8523
8524   return TRUE;
8525 }
8526
8527 static bfd_boolean
8528 elfcore_grok_openbsd_note (bfd *abfd, Elf_Internal_Note *note)
8529 {
8530   if (note->type == NT_OPENBSD_PROCINFO)
8531     return elfcore_grok_openbsd_procinfo (abfd, note);
8532
8533   if (note->type == NT_OPENBSD_REGS)
8534     return elfcore_make_note_pseudosection (abfd, ".reg", note);
8535
8536   if (note->type == NT_OPENBSD_FPREGS)
8537     return elfcore_make_note_pseudosection (abfd, ".reg2", note);
8538
8539   if (note->type == NT_OPENBSD_XFPREGS)
8540     return elfcore_make_note_pseudosection (abfd, ".reg-xfp", note);
8541
8542   if (note->type == NT_OPENBSD_AUXV)
8543     {
8544       asection *sect = bfd_make_section_anyway_with_flags (abfd, ".auxv",
8545                                                            SEC_HAS_CONTENTS);
8546
8547       if (sect == NULL)
8548         return FALSE;
8549       sect->size = note->descsz;
8550       sect->filepos = note->descpos;
8551       sect->alignment_power = 1 + bfd_get_arch_size (abfd) / 32;
8552
8553       return TRUE;
8554     }
8555
8556   if (note->type == NT_OPENBSD_WCOOKIE)
8557     {
8558       asection *sect = bfd_make_section_anyway_with_flags (abfd, ".wcookie",
8559                                                            SEC_HAS_CONTENTS);
8560
8561       if (sect == NULL)
8562         return FALSE;
8563       sect->size = note->descsz;
8564       sect->filepos = note->descpos;
8565       sect->alignment_power = 1 + bfd_get_arch_size (abfd) / 32;
8566
8567       return TRUE;
8568     }
8569
8570   return TRUE;
8571 }
8572
8573 static bfd_boolean
8574 elfcore_grok_nto_status (bfd *abfd, Elf_Internal_Note *note, long *tid)
8575 {
8576   void *ddata = note->descdata;
8577   char buf[100];
8578   char *name;
8579   asection *sect;
8580   short sig;
8581   unsigned flags;
8582
8583   /* nto_procfs_status 'pid' field is at offset 0.  */
8584   elf_tdata (abfd)->core_pid = bfd_get_32 (abfd, (bfd_byte *) ddata);
8585
8586   /* nto_procfs_status 'tid' field is at offset 4.  Pass it back.  */
8587   *tid = bfd_get_32 (abfd, (bfd_byte *) ddata + 4);
8588
8589   /* nto_procfs_status 'flags' field is at offset 8.  */
8590   flags = bfd_get_32 (abfd, (bfd_byte *) ddata + 8);
8591
8592   /* nto_procfs_status 'what' field is at offset 14.  */
8593   if ((sig = bfd_get_16 (abfd, (bfd_byte *) ddata + 14)) > 0)
8594     {
8595       elf_tdata (abfd)->core_signal = sig;
8596       elf_tdata (abfd)->core_lwpid = *tid;
8597     }
8598
8599   /* _DEBUG_FLAG_CURTID (current thread) is 0x80.  Some cores
8600      do not come from signals so we make sure we set the current
8601      thread just in case.  */
8602   if (flags & 0x00000080)
8603     elf_tdata (abfd)->core_lwpid = *tid;
8604
8605   /* Make a ".qnx_core_status/%d" section.  */
8606   sprintf (buf, ".qnx_core_status/%ld", *tid);
8607
8608   name = (char *) bfd_alloc (abfd, strlen (buf) + 1);
8609   if (name == NULL)
8610     return FALSE;
8611   strcpy (name, buf);
8612
8613   sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS);
8614   if (sect == NULL)
8615     return FALSE;
8616
8617   sect->size            = note->descsz;
8618   sect->filepos         = note->descpos;
8619   sect->alignment_power = 2;
8620
8621   return (elfcore_maybe_make_sect (abfd, ".qnx_core_status", sect));
8622 }
8623
8624 static bfd_boolean
8625 elfcore_grok_nto_regs (bfd *abfd,
8626                        Elf_Internal_Note *note,
8627                        long tid,
8628                        char *base)
8629 {
8630   char buf[100];
8631   char *name;
8632   asection *sect;
8633
8634   /* Make a "(base)/%d" section.  */
8635   sprintf (buf, "%s/%ld", base, tid);
8636
8637   name = (char *) bfd_alloc (abfd, strlen (buf) + 1);
8638   if (name == NULL)
8639     return FALSE;
8640   strcpy (name, buf);
8641
8642   sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS);
8643   if (sect == NULL)
8644     return FALSE;
8645
8646   sect->size            = note->descsz;
8647   sect->filepos         = note->descpos;
8648   sect->alignment_power = 2;
8649
8650   /* This is the current thread.  */
8651   if (elf_tdata (abfd)->core_lwpid == tid)
8652     return elfcore_maybe_make_sect (abfd, base, sect);
8653
8654   return TRUE;
8655 }
8656
8657 #define BFD_QNT_CORE_INFO       7
8658 #define BFD_QNT_CORE_STATUS     8
8659 #define BFD_QNT_CORE_GREG       9
8660 #define BFD_QNT_CORE_FPREG      10
8661
8662 static bfd_boolean
8663 elfcore_grok_nto_note (bfd *abfd, Elf_Internal_Note *note)
8664 {
8665   /* Every GREG section has a STATUS section before it.  Store the
8666      tid from the previous call to pass down to the next gregs
8667      function.  */
8668   static long tid = 1;
8669
8670   switch (note->type)
8671     {
8672     case BFD_QNT_CORE_INFO:
8673       return elfcore_make_note_pseudosection (abfd, ".qnx_core_info", note);
8674     case BFD_QNT_CORE_STATUS:
8675       return elfcore_grok_nto_status (abfd, note, &tid);
8676     case BFD_QNT_CORE_GREG:
8677       return elfcore_grok_nto_regs (abfd, note, tid, ".reg");
8678     case BFD_QNT_CORE_FPREG:
8679       return elfcore_grok_nto_regs (abfd, note, tid, ".reg2");
8680     default:
8681       return TRUE;
8682     }
8683 }
8684
8685 static bfd_boolean
8686 elfcore_grok_spu_note (bfd *abfd, Elf_Internal_Note *note)
8687 {
8688   char *name;
8689   asection *sect;
8690   size_t len;
8691
8692   /* Use note name as section name.  */
8693   len = note->namesz;
8694   name = (char *) bfd_alloc (abfd, len);
8695   if (name == NULL)
8696     return FALSE;
8697   memcpy (name, note->namedata, len);
8698   name[len - 1] = '\0';
8699
8700   sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS);
8701   if (sect == NULL)
8702     return FALSE;
8703
8704   sect->size            = note->descsz;
8705   sect->filepos         = note->descpos;
8706   sect->alignment_power = 1;
8707
8708   return TRUE;
8709 }
8710
8711 /* Function: elfcore_write_note
8712
8713    Inputs:
8714      buffer to hold note, and current size of buffer
8715      name of note
8716      type of note
8717      data for note
8718      size of data for note
8719
8720    Writes note to end of buffer.  ELF64 notes are written exactly as
8721    for ELF32, despite the current (as of 2006) ELF gabi specifying
8722    that they ought to have 8-byte namesz and descsz field, and have
8723    8-byte alignment.  Other writers, eg. Linux kernel, do the same.
8724
8725    Return:
8726    Pointer to realloc'd buffer, *BUFSIZ updated.  */
8727
8728 char *
8729 elfcore_write_note (bfd *abfd,
8730                     char *buf,
8731                     int *bufsiz,
8732                     const char *name,
8733                     int type,
8734                     const void *input,
8735                     int size)
8736 {
8737   Elf_External_Note *xnp;
8738   size_t namesz;
8739   size_t newspace;
8740   char *dest;
8741
8742   namesz = 0;
8743   if (name != NULL)
8744     namesz = strlen (name) + 1;
8745
8746   newspace = 12 + ((namesz + 3) & -4) + ((size + 3) & -4);
8747
8748   buf = (char *) realloc (buf, *bufsiz + newspace);
8749   if (buf == NULL)
8750     return buf;
8751   dest = buf + *bufsiz;
8752   *bufsiz += newspace;
8753   xnp = (Elf_External_Note *) dest;
8754   H_PUT_32 (abfd, namesz, xnp->namesz);
8755   H_PUT_32 (abfd, size, xnp->descsz);
8756   H_PUT_32 (abfd, type, xnp->type);
8757   dest = xnp->name;
8758   if (name != NULL)
8759     {
8760       memcpy (dest, name, namesz);
8761       dest += namesz;
8762       while (namesz & 3)
8763         {
8764           *dest++ = '\0';
8765           ++namesz;
8766         }
8767     }
8768   memcpy (dest, input, size);
8769   dest += size;
8770   while (size & 3)
8771     {
8772       *dest++ = '\0';
8773       ++size;
8774     }
8775   return buf;
8776 }
8777
8778 #if defined (HAVE_PRPSINFO_T) || defined (HAVE_PSINFO_T)
8779 char *
8780 elfcore_write_prpsinfo (bfd  *abfd,
8781                         char *buf,
8782                         int  *bufsiz,
8783                         const char *fname,
8784                         const char *psargs)
8785 {
8786   const char *note_name = "CORE";
8787   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
8788
8789   if (bed->elf_backend_write_core_note != NULL)
8790     {
8791       char *ret;
8792       ret = (*bed->elf_backend_write_core_note) (abfd, buf, bufsiz,
8793                                                  NT_PRPSINFO, fname, psargs);
8794       if (ret != NULL)
8795         return ret;
8796     }
8797
8798 #if defined (HAVE_PRPSINFO32_T) || defined (HAVE_PSINFO32_T)
8799   if (bed->s->elfclass == ELFCLASS32)
8800     {
8801 #if defined (HAVE_PSINFO32_T)
8802       psinfo32_t data;
8803       int note_type = NT_PSINFO;
8804 #else
8805       prpsinfo32_t data;
8806       int note_type = NT_PRPSINFO;
8807 #endif
8808
8809       memset (&data, 0, sizeof (data));
8810       strncpy (data.pr_fname, fname, sizeof (data.pr_fname));
8811       strncpy (data.pr_psargs, psargs, sizeof (data.pr_psargs));
8812       return elfcore_write_note (abfd, buf, bufsiz,
8813                                  note_name, note_type, &data, sizeof (data));
8814     }
8815   else
8816 #endif
8817     {
8818 #if defined (HAVE_PSINFO_T)
8819       psinfo_t data;
8820       int note_type = NT_PSINFO;
8821 #else
8822       prpsinfo_t data;
8823       int note_type = NT_PRPSINFO;
8824 #endif
8825
8826       memset (&data, 0, sizeof (data));
8827       strncpy (data.pr_fname, fname, sizeof (data.pr_fname));
8828       strncpy (data.pr_psargs, psargs, sizeof (data.pr_psargs));
8829       return elfcore_write_note (abfd, buf, bufsiz,
8830                                  note_name, note_type, &data, sizeof (data));
8831     }
8832 }
8833 #endif  /* PSINFO_T or PRPSINFO_T */
8834
8835 #if defined (HAVE_PRSTATUS_T)
8836 char *
8837 elfcore_write_prstatus (bfd *abfd,
8838                         char *buf,
8839                         int *bufsiz,
8840                         long pid,
8841                         int cursig,
8842                         const void *gregs)
8843 {
8844   const char *note_name = "CORE";
8845   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
8846
8847   if (bed->elf_backend_write_core_note != NULL)
8848     {
8849       char *ret;
8850       ret = (*bed->elf_backend_write_core_note) (abfd, buf, bufsiz,
8851                                                  NT_PRSTATUS,
8852                                                  pid, cursig, gregs);
8853       if (ret != NULL)
8854         return ret;
8855     }
8856
8857 #if defined (HAVE_PRSTATUS32_T)
8858   if (bed->s->elfclass == ELFCLASS32)
8859     {
8860       prstatus32_t prstat;
8861
8862       memset (&prstat, 0, sizeof (prstat));
8863       prstat.pr_pid = pid;
8864       prstat.pr_cursig = cursig;
8865       memcpy (&prstat.pr_reg, gregs, sizeof (prstat.pr_reg));
8866       return elfcore_write_note (abfd, buf, bufsiz, note_name,
8867                                  NT_PRSTATUS, &prstat, sizeof (prstat));
8868     }
8869   else
8870 #endif
8871     {
8872       prstatus_t prstat;
8873
8874       memset (&prstat, 0, sizeof (prstat));
8875       prstat.pr_pid = pid;
8876       prstat.pr_cursig = cursig;
8877       memcpy (&prstat.pr_reg, gregs, sizeof (prstat.pr_reg));
8878       return elfcore_write_note (abfd, buf, bufsiz, note_name,
8879                                  NT_PRSTATUS, &prstat, sizeof (prstat));
8880     }
8881 }
8882 #endif /* HAVE_PRSTATUS_T */
8883
8884 #if defined (HAVE_LWPSTATUS_T)
8885 char *
8886 elfcore_write_lwpstatus (bfd *abfd,
8887                          char *buf,
8888                          int *bufsiz,
8889                          long pid,
8890                          int cursig,
8891                          const void *gregs)
8892 {
8893   lwpstatus_t lwpstat;
8894   const char *note_name = "CORE";
8895
8896   memset (&lwpstat, 0, sizeof (lwpstat));
8897   lwpstat.pr_lwpid  = pid >> 16;
8898   lwpstat.pr_cursig = cursig;
8899 #if defined (HAVE_LWPSTATUS_T_PR_REG)
8900   memcpy (lwpstat.pr_reg, gregs, sizeof (lwpstat.pr_reg));
8901 #elif defined (HAVE_LWPSTATUS_T_PR_CONTEXT)
8902 #if !defined(gregs)
8903   memcpy (lwpstat.pr_context.uc_mcontext.gregs,
8904           gregs, sizeof (lwpstat.pr_context.uc_mcontext.gregs));
8905 #else
8906   memcpy (lwpstat.pr_context.uc_mcontext.__gregs,
8907           gregs, sizeof (lwpstat.pr_context.uc_mcontext.__gregs));
8908 #endif
8909 #endif
8910   return elfcore_write_note (abfd, buf, bufsiz, note_name,
8911                              NT_LWPSTATUS, &lwpstat, sizeof (lwpstat));
8912 }
8913 #endif /* HAVE_LWPSTATUS_T */
8914
8915 #if defined (HAVE_PSTATUS_T)
8916 char *
8917 elfcore_write_pstatus (bfd *abfd,
8918                        char *buf,
8919                        int *bufsiz,
8920                        long pid,
8921                        int cursig ATTRIBUTE_UNUSED,
8922                        const void *gregs ATTRIBUTE_UNUSED)
8923 {
8924   const char *note_name = "CORE";
8925 #if defined (HAVE_PSTATUS32_T)
8926   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
8927
8928   if (bed->s->elfclass == ELFCLASS32)
8929     {
8930       pstatus32_t pstat;
8931
8932       memset (&pstat, 0, sizeof (pstat));
8933       pstat.pr_pid = pid & 0xffff;
8934       buf = elfcore_write_note (abfd, buf, bufsiz, note_name,
8935                                 NT_PSTATUS, &pstat, sizeof (pstat));
8936       return buf;
8937     }
8938   else
8939 #endif
8940     {
8941       pstatus_t pstat;
8942
8943       memset (&pstat, 0, sizeof (pstat));
8944       pstat.pr_pid = pid & 0xffff;
8945       buf = elfcore_write_note (abfd, buf, bufsiz, note_name,
8946                                 NT_PSTATUS, &pstat, sizeof (pstat));
8947       return buf;
8948     }
8949 }
8950 #endif /* HAVE_PSTATUS_T */
8951
8952 char *
8953 elfcore_write_prfpreg (bfd *abfd,
8954                        char *buf,
8955                        int *bufsiz,
8956                        const void *fpregs,
8957                        int size)
8958 {
8959   const char *note_name = "CORE";
8960   return elfcore_write_note (abfd, buf, bufsiz,
8961                              note_name, NT_FPREGSET, fpregs, size);
8962 }
8963
8964 char *
8965 elfcore_write_prxfpreg (bfd *abfd,
8966                         char *buf,
8967                         int *bufsiz,
8968                         const void *xfpregs,
8969                         int size)
8970 {
8971   char *note_name = "LINUX";
8972   return elfcore_write_note (abfd, buf, bufsiz,
8973                              note_name, NT_PRXFPREG, xfpregs, size);
8974 }
8975
8976 char *
8977 elfcore_write_xstatereg (bfd *abfd, char *buf, int *bufsiz,
8978                          const void *xfpregs, int size)
8979 {
8980   char *note_name = "LINUX";
8981   return elfcore_write_note (abfd, buf, bufsiz,
8982                              note_name, NT_X86_XSTATE, xfpregs, size);
8983 }
8984
8985 char *
8986 elfcore_write_ppc_vmx (bfd *abfd,
8987                        char *buf,
8988                        int *bufsiz,
8989                        const void *ppc_vmx,
8990                        int size)
8991 {
8992   char *note_name = "LINUX";
8993   return elfcore_write_note (abfd, buf, bufsiz,
8994                              note_name, NT_PPC_VMX, ppc_vmx, size);
8995 }
8996
8997 char *
8998 elfcore_write_ppc_vsx (bfd *abfd,
8999                        char *buf,
9000                        int *bufsiz,
9001                        const void *ppc_vsx,
9002                        int size)
9003 {
9004   char *note_name = "LINUX";
9005   return elfcore_write_note (abfd, buf, bufsiz,
9006                              note_name, NT_PPC_VSX, ppc_vsx, size);
9007 }
9008
9009 static char *
9010 elfcore_write_s390_high_gprs (bfd *abfd,
9011                               char *buf,
9012                               int *bufsiz,
9013                               const void *s390_high_gprs,
9014                               int size)
9015 {
9016   char *note_name = "LINUX";
9017   return elfcore_write_note (abfd, buf, bufsiz,
9018                              note_name, NT_S390_HIGH_GPRS,
9019                              s390_high_gprs, size);
9020 }
9021
9022 char *
9023 elfcore_write_s390_timer (bfd *abfd,
9024                           char *buf,
9025                           int *bufsiz,
9026                           const void *s390_timer,
9027                           int size)
9028 {
9029   char *note_name = "LINUX";
9030   return elfcore_write_note (abfd, buf, bufsiz,
9031                              note_name, NT_S390_TIMER, s390_timer, size);
9032 }
9033
9034 char *
9035 elfcore_write_s390_todcmp (bfd *abfd,
9036                            char *buf,
9037                            int *bufsiz,
9038                            const void *s390_todcmp,
9039                            int size)
9040 {
9041   char *note_name = "LINUX";
9042   return elfcore_write_note (abfd, buf, bufsiz,
9043                              note_name, NT_S390_TODCMP, s390_todcmp, size);
9044 }
9045
9046 char *
9047 elfcore_write_s390_todpreg (bfd *abfd,
9048                             char *buf,
9049                             int *bufsiz,
9050                             const void *s390_todpreg,
9051                             int size)
9052 {
9053   char *note_name = "LINUX";
9054   return elfcore_write_note (abfd, buf, bufsiz,
9055                              note_name, NT_S390_TODPREG, s390_todpreg, size);
9056 }
9057
9058 char *
9059 elfcore_write_s390_ctrs (bfd *abfd,
9060                          char *buf,
9061                          int *bufsiz,
9062                          const void *s390_ctrs,
9063                          int size)
9064 {
9065   char *note_name = "LINUX";
9066   return elfcore_write_note (abfd, buf, bufsiz,
9067                              note_name, NT_S390_CTRS, s390_ctrs, size);
9068 }
9069
9070 char *
9071 elfcore_write_s390_prefix (bfd *abfd,
9072                            char *buf,
9073                            int *bufsiz,
9074                            const void *s390_prefix,
9075                            int size)
9076 {
9077   char *note_name = "LINUX";
9078   return elfcore_write_note (abfd, buf, bufsiz,
9079                              note_name, NT_S390_PREFIX, s390_prefix, size);
9080 }
9081
9082 char *
9083 elfcore_write_register_note (bfd *abfd,
9084                              char *buf,
9085                              int *bufsiz,
9086                              const char *section,
9087                              const void *data,
9088                              int size)
9089 {
9090   if (strcmp (section, ".reg2") == 0)
9091     return elfcore_write_prfpreg (abfd, buf, bufsiz, data, size);
9092   if (strcmp (section, ".reg-xfp") == 0)
9093     return elfcore_write_prxfpreg (abfd, buf, bufsiz, data, size);
9094   if (strcmp (section, ".reg-xstate") == 0)
9095     return elfcore_write_xstatereg (abfd, buf, bufsiz, data, size);
9096   if (strcmp (section, ".reg-ppc-vmx") == 0)
9097     return elfcore_write_ppc_vmx (abfd, buf, bufsiz, data, size);
9098   if (strcmp (section, ".reg-ppc-vsx") == 0)
9099     return elfcore_write_ppc_vsx (abfd, buf, bufsiz, data, size);
9100   if (strcmp (section, ".reg-s390-high-gprs") == 0)
9101     return elfcore_write_s390_high_gprs (abfd, buf, bufsiz, data, size);
9102   if (strcmp (section, ".reg-s390-timer") == 0)
9103     return elfcore_write_s390_timer (abfd, buf, bufsiz, data, size);
9104   if (strcmp (section, ".reg-s390-todcmp") == 0)
9105     return elfcore_write_s390_todcmp (abfd, buf, bufsiz, data, size);
9106   if (strcmp (section, ".reg-s390-todpreg") == 0)
9107     return elfcore_write_s390_todpreg (abfd, buf, bufsiz, data, size);
9108   if (strcmp (section, ".reg-s390-ctrs") == 0)
9109     return elfcore_write_s390_ctrs (abfd, buf, bufsiz, data, size);
9110   if (strcmp (section, ".reg-s390-prefix") == 0)
9111     return elfcore_write_s390_prefix (abfd, buf, bufsiz, data, size);
9112   return NULL;
9113 }
9114
9115 static bfd_boolean
9116 elf_parse_notes (bfd *abfd, char *buf, size_t size, file_ptr offset)
9117 {
9118   char *p;
9119
9120   p = buf;
9121   while (p < buf + size)
9122     {
9123       /* FIXME: bad alignment assumption.  */
9124       Elf_External_Note *xnp = (Elf_External_Note *) p;
9125       Elf_Internal_Note in;
9126
9127       if (offsetof (Elf_External_Note, name) > buf - p + size)
9128         return FALSE;
9129
9130       in.type = H_GET_32 (abfd, xnp->type);
9131
9132       in.namesz = H_GET_32 (abfd, xnp->namesz);
9133       in.namedata = xnp->name;
9134       if (in.namesz > buf - in.namedata + size)
9135         return FALSE;
9136
9137       in.descsz = H_GET_32 (abfd, xnp->descsz);
9138       in.descdata = in.namedata + BFD_ALIGN (in.namesz, 4);
9139       in.descpos = offset + (in.descdata - buf);
9140       if (in.descsz != 0
9141           && (in.descdata >= buf + size
9142               || in.descsz > buf - in.descdata + size))
9143         return FALSE;
9144
9145       switch (bfd_get_format (abfd))
9146         {
9147         default:
9148           return TRUE;
9149
9150         case bfd_core:
9151           if (CONST_STRNEQ (in.namedata, "NetBSD-CORE"))
9152             {
9153               if (! elfcore_grok_netbsd_note (abfd, &in))
9154                 return FALSE;
9155             }
9156           else if (CONST_STRNEQ (in.namedata, "OpenBSD"))
9157             {
9158               if (! elfcore_grok_openbsd_note (abfd, &in))
9159                 return FALSE;
9160             }
9161           else if (CONST_STRNEQ (in.namedata, "QNX"))
9162             {
9163               if (! elfcore_grok_nto_note (abfd, &in))
9164                 return FALSE;
9165             }
9166           else if (CONST_STRNEQ (in.namedata, "SPU/"))
9167             {
9168               if (! elfcore_grok_spu_note (abfd, &in))
9169                 return FALSE;
9170             }
9171           else
9172             {
9173               if (! elfcore_grok_note (abfd, &in))
9174                 return FALSE;
9175             }
9176           break;
9177
9178         case bfd_object:
9179           if (in.namesz == sizeof "GNU" && strcmp (in.namedata, "GNU") == 0)
9180             {
9181               if (! elfobj_grok_gnu_note (abfd, &in))
9182                 return FALSE;
9183             }
9184           break;
9185         }
9186
9187       p = in.descdata + BFD_ALIGN (in.descsz, 4);
9188     }
9189
9190   return TRUE;
9191 }
9192
9193 static bfd_boolean
9194 elf_read_notes (bfd *abfd, file_ptr offset, bfd_size_type size)
9195 {
9196   char *buf;
9197
9198   if (size <= 0)
9199     return TRUE;
9200
9201   if (bfd_seek (abfd, offset, SEEK_SET) != 0)
9202     return FALSE;
9203
9204   buf = (char *) bfd_malloc (size);
9205   if (buf == NULL)
9206     return FALSE;
9207
9208   if (bfd_bread (buf, size, abfd) != size
9209       || !elf_parse_notes (abfd, buf, size, offset))
9210     {
9211       free (buf);
9212       return FALSE;
9213     }
9214
9215   free (buf);
9216   return TRUE;
9217 }
9218 \f
9219 /* Providing external access to the ELF program header table.  */
9220
9221 /* Return an upper bound on the number of bytes required to store a
9222    copy of ABFD's program header table entries.  Return -1 if an error
9223    occurs; bfd_get_error will return an appropriate code.  */
9224
9225 long
9226 bfd_get_elf_phdr_upper_bound (bfd *abfd)
9227 {
9228   if (abfd->xvec->flavour != bfd_target_elf_flavour)
9229     {
9230       bfd_set_error (bfd_error_wrong_format);
9231       return -1;
9232     }
9233
9234   return elf_elfheader (abfd)->e_phnum * sizeof (Elf_Internal_Phdr);
9235 }
9236
9237 /* Copy ABFD's program header table entries to *PHDRS.  The entries
9238    will be stored as an array of Elf_Internal_Phdr structures, as
9239    defined in include/elf/internal.h.  To find out how large the
9240    buffer needs to be, call bfd_get_elf_phdr_upper_bound.
9241
9242    Return the number of program header table entries read, or -1 if an
9243    error occurs; bfd_get_error will return an appropriate code.  */
9244
9245 int
9246 bfd_get_elf_phdrs (bfd *abfd, void *phdrs)
9247 {
9248   int num_phdrs;
9249
9250   if (abfd->xvec->flavour != bfd_target_elf_flavour)
9251     {
9252       bfd_set_error (bfd_error_wrong_format);
9253       return -1;
9254     }
9255
9256   num_phdrs = elf_elfheader (abfd)->e_phnum;
9257   memcpy (phdrs, elf_tdata (abfd)->phdr,
9258           num_phdrs * sizeof (Elf_Internal_Phdr));
9259
9260   return num_phdrs;
9261 }
9262
9263 enum elf_reloc_type_class
9264 _bfd_elf_reloc_type_class (const Elf_Internal_Rela *rela ATTRIBUTE_UNUSED)
9265 {
9266   return reloc_class_normal;
9267 }
9268
9269 /* For RELA architectures, return the relocation value for a
9270    relocation against a local symbol.  */
9271
9272 bfd_vma
9273 _bfd_elf_rela_local_sym (bfd *abfd,
9274                          Elf_Internal_Sym *sym,
9275                          asection **psec,
9276                          Elf_Internal_Rela *rel)
9277 {
9278   asection *sec = *psec;
9279   bfd_vma relocation;
9280
9281   relocation = (sec->output_section->vma
9282                 + sec->output_offset
9283                 + sym->st_value);
9284   if ((sec->flags & SEC_MERGE)
9285       && ELF_ST_TYPE (sym->st_info) == STT_SECTION
9286       && sec->sec_info_type == ELF_INFO_TYPE_MERGE)
9287     {
9288       rel->r_addend =
9289         _bfd_merged_section_offset (abfd, psec,
9290                                     elf_section_data (sec)->sec_info,
9291                                     sym->st_value + rel->r_addend);
9292       if (sec != *psec)
9293         {
9294           /* If we have changed the section, and our original section is
9295              marked with SEC_EXCLUDE, it means that the original
9296              SEC_MERGE section has been completely subsumed in some
9297              other SEC_MERGE section.  In this case, we need to leave
9298              some info around for --emit-relocs.  */
9299           if ((sec->flags & SEC_EXCLUDE) != 0)
9300             sec->kept_section = *psec;
9301           sec = *psec;
9302         }
9303       rel->r_addend -= relocation;
9304       rel->r_addend += sec->output_section->vma + sec->output_offset;
9305     }
9306   return relocation;
9307 }
9308
9309 bfd_vma
9310 _bfd_elf_rel_local_sym (bfd *abfd,
9311                         Elf_Internal_Sym *sym,
9312                         asection **psec,
9313                         bfd_vma addend)
9314 {
9315   asection *sec = *psec;
9316
9317   if (sec->sec_info_type != ELF_INFO_TYPE_MERGE)
9318     return sym->st_value + addend;
9319
9320   return _bfd_merged_section_offset (abfd, psec,
9321                                      elf_section_data (sec)->sec_info,
9322                                      sym->st_value + addend);
9323 }
9324
9325 bfd_vma
9326 _bfd_elf_section_offset (bfd *abfd,
9327                          struct bfd_link_info *info,
9328                          asection *sec,
9329                          bfd_vma offset)
9330 {
9331   switch (sec->sec_info_type)
9332     {
9333     case ELF_INFO_TYPE_STABS:
9334       return _bfd_stab_section_offset (sec, elf_section_data (sec)->sec_info,
9335                                        offset);
9336     case ELF_INFO_TYPE_EH_FRAME:
9337       return _bfd_elf_eh_frame_section_offset (abfd, info, sec, offset);
9338     default:
9339       return offset;
9340     }
9341 }
9342 \f
9343 /* Create a new BFD as if by bfd_openr.  Rather than opening a file,
9344    reconstruct an ELF file by reading the segments out of remote memory
9345    based on the ELF file header at EHDR_VMA and the ELF program headers it
9346    points to.  If not null, *LOADBASEP is filled in with the difference
9347    between the VMAs from which the segments were read, and the VMAs the
9348    file headers (and hence BFD's idea of each section's VMA) put them at.
9349
9350    The function TARGET_READ_MEMORY is called to copy LEN bytes from the
9351    remote memory at target address VMA into the local buffer at MYADDR; it
9352    should return zero on success or an `errno' code on failure.  TEMPL must
9353    be a BFD for an ELF target with the word size and byte order found in
9354    the remote memory.  */
9355
9356 bfd *
9357 bfd_elf_bfd_from_remote_memory
9358   (bfd *templ,
9359    bfd_vma ehdr_vma,
9360    bfd_vma *loadbasep,
9361    int (*target_read_memory) (bfd_vma, bfd_byte *, int))
9362 {
9363   return (*get_elf_backend_data (templ)->elf_backend_bfd_from_remote_memory)
9364     (templ, ehdr_vma, loadbasep, target_read_memory);
9365 }
9366 \f
9367 long
9368 _bfd_elf_get_synthetic_symtab (bfd *abfd,
9369                                long symcount ATTRIBUTE_UNUSED,
9370                                asymbol **syms ATTRIBUTE_UNUSED,
9371                                long dynsymcount,
9372                                asymbol **dynsyms,
9373                                asymbol **ret)
9374 {
9375   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
9376   asection *relplt;
9377   asymbol *s;
9378   const char *relplt_name;
9379   bfd_boolean (*slurp_relocs) (bfd *, asection *, asymbol **, bfd_boolean);
9380   arelent *p;
9381   long count, i, n;
9382   size_t size;
9383   Elf_Internal_Shdr *hdr;
9384   char *names;
9385   asection *plt;
9386
9387   *ret = NULL;
9388
9389   if ((abfd->flags & (DYNAMIC | EXEC_P)) == 0)
9390     return 0;
9391
9392   if (dynsymcount <= 0)
9393     return 0;
9394
9395   if (!bed->plt_sym_val)
9396     return 0;
9397
9398   relplt_name = bed->relplt_name;
9399   if (relplt_name == NULL)
9400     relplt_name = bed->rela_plts_and_copies_p ? ".rela.plt" : ".rel.plt";
9401   relplt = bfd_get_section_by_name (abfd, relplt_name);
9402   if (relplt == NULL)
9403     return 0;
9404
9405   hdr = &elf_section_data (relplt)->this_hdr;
9406   if (hdr->sh_link != elf_dynsymtab (abfd)
9407       || (hdr->sh_type != SHT_REL && hdr->sh_type != SHT_RELA))
9408     return 0;
9409
9410   plt = bfd_get_section_by_name (abfd, ".plt");
9411   if (plt == NULL)
9412     return 0;
9413
9414   slurp_relocs = get_elf_backend_data (abfd)->s->slurp_reloc_table;
9415   if (! (*slurp_relocs) (abfd, relplt, dynsyms, TRUE))
9416     return -1;
9417
9418   count = relplt->size / hdr->sh_entsize;
9419   size = count * sizeof (asymbol);
9420   p = relplt->relocation;
9421   for (i = 0; i < count; i++, p += bed->s->int_rels_per_ext_rel)
9422     {
9423       size += strlen ((*p->sym_ptr_ptr)->name) + sizeof ("@plt");
9424       if (p->addend != 0)
9425         {
9426 #ifdef BFD64
9427           size += sizeof ("+0x") - 1 + 8 + 8 * (bed->s->elfclass == ELFCLASS64);
9428 #else
9429           size += sizeof ("+0x") - 1 + 8;
9430 #endif
9431         }
9432     }
9433
9434   s = *ret = (asymbol *) bfd_malloc (size);
9435   if (s == NULL)
9436     return -1;
9437
9438   names = (char *) (s + count);
9439   p = relplt->relocation;
9440   n = 0;
9441   for (i = 0; i < count; i++, p += bed->s->int_rels_per_ext_rel)
9442     {
9443       size_t len;
9444       bfd_vma addr;
9445
9446       addr = bed->plt_sym_val (i, plt, p);
9447       if (addr == (bfd_vma) -1)
9448         continue;
9449
9450       *s = **p->sym_ptr_ptr;
9451       /* Undefined syms won't have BSF_LOCAL or BSF_GLOBAL set.  Since
9452          we are defining a symbol, ensure one of them is set.  */
9453       if ((s->flags & BSF_LOCAL) == 0)
9454         s->flags |= BSF_GLOBAL;
9455       s->flags |= BSF_SYNTHETIC;
9456       s->section = plt;
9457       s->value = addr - plt->vma;
9458       s->name = names;
9459       s->udata.p = NULL;
9460       len = strlen ((*p->sym_ptr_ptr)->name);
9461       memcpy (names, (*p->sym_ptr_ptr)->name, len);
9462       names += len;
9463       if (p->addend != 0)
9464         {
9465           char buf[30], *a;
9466           
9467           memcpy (names, "+0x", sizeof ("+0x") - 1);
9468           names += sizeof ("+0x") - 1;
9469           bfd_sprintf_vma (abfd, buf, p->addend);
9470           for (a = buf; *a == '0'; ++a)
9471             ;
9472           len = strlen (a);
9473           memcpy (names, a, len);
9474           names += len;
9475         }
9476       memcpy (names, "@plt", sizeof ("@plt"));
9477       names += sizeof ("@plt");
9478       ++s, ++n;
9479     }
9480
9481   return n;
9482 }
9483
9484 /* It is only used by x86-64 so far.  */
9485 asection _bfd_elf_large_com_section
9486   = BFD_FAKE_SECTION (_bfd_elf_large_com_section,
9487                       SEC_IS_COMMON, NULL, "LARGE_COMMON", 0);
9488
9489 void
9490 _bfd_elf_set_osabi (bfd * abfd,
9491                     struct bfd_link_info * link_info ATTRIBUTE_UNUSED)
9492 {
9493   Elf_Internal_Ehdr * i_ehdrp;  /* ELF file header, internal form.  */
9494
9495   i_ehdrp = elf_elfheader (abfd);
9496
9497   i_ehdrp->e_ident[EI_OSABI] = get_elf_backend_data (abfd)->elf_osabi;
9498
9499   /* To make things simpler for the loader on Linux systems we set the
9500      osabi field to ELFOSABI_LINUX if the binary contains symbols of
9501      the STT_GNU_IFUNC type.  */
9502   if (i_ehdrp->e_ident[EI_OSABI] == ELFOSABI_NONE
9503       && elf_tdata (abfd)->has_ifunc_symbols)
9504     i_ehdrp->e_ident[EI_OSABI] = ELFOSABI_LINUX;
9505 }
9506
9507
9508 /* Return TRUE for ELF symbol types that represent functions.
9509    This is the default version of this function, which is sufficient for
9510    most targets.  It returns true if TYPE is STT_FUNC or STT_GNU_IFUNC.  */
9511
9512 bfd_boolean
9513 _bfd_elf_is_function_type (unsigned int type)
9514 {
9515   return (type == STT_FUNC
9516           || type == STT_GNU_IFUNC);
9517 }