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