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