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