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