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