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