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