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