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