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