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