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