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