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