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