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