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