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