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