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