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