xref: /netbsd-src/external/gpl3/gdb.old/dist/bfd/elf.c (revision f8cf1a9151c7af1cb0bd8b09c13c66bca599c027)
1 /* ELF executable support for BFD.
2 
3    Copyright (C) 1993-2022 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 <limits.h>
39 #include "bfd.h"
40 #include "bfdlink.h"
41 #include "libbfd.h"
42 #define ARCH_SIZE 0
43 #include "elf-bfd.h"
44 #include "libiberty.h"
45 #include "safe-ctype.h"
46 #include "elf-linux-core.h"
47 
48 #ifdef CORE_HEADER
49 #include CORE_HEADER
50 #endif
51 
52 static int elf_sort_sections (const void *, const void *);
53 static bool assign_file_positions_except_relocs (bfd *, struct bfd_link_info *);
54 static bool swap_out_syms (bfd *, struct elf_strtab_hash **, int,
55 			   struct bfd_link_info *);
56 static bool elf_parse_notes (bfd *abfd, char *buf, size_t size,
57 			     file_ptr offset, size_t align);
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 bool
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 bool
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 bool
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 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_alloc_and_read (abfd, shstrtabsize + 1,
302 					      shstrtabsize)) == NULL)
303 	{
304 	  /* Once we've failed to read it, make sure we don't keep
305 	     trying.  Otherwise, we'll keep allocating space for
306 	     the string table over and over.  */
307 	  i_shdrp[shindex]->sh_size = 0;
308 	}
309       else
310 	shstrtab[shstrtabsize] = '\0';
311       i_shdrp[shindex]->contents = shstrtab;
312     }
313   return (char *) shstrtab;
314 }
315 
316 char *
317 bfd_elf_string_from_elf_section (bfd *abfd,
318 				 unsigned int shindex,
319 				 unsigned int strindex)
320 {
321   Elf_Internal_Shdr *hdr;
322 
323   if (strindex == 0)
324     return "";
325 
326   if (elf_elfsections (abfd) == NULL || shindex >= elf_numsections (abfd))
327     return NULL;
328 
329   hdr = elf_elfsections (abfd)[shindex];
330 
331   if (hdr->contents == NULL)
332     {
333       if (hdr->sh_type != SHT_STRTAB && hdr->sh_type < SHT_LOOS)
334 	{
335 	  /* PR 17512: file: f057ec89.  */
336 	  /* xgettext:c-format */
337 	  _bfd_error_handler (_("%pB: attempt to load strings from"
338 				" a non-string section (number %d)"),
339 			      abfd, shindex);
340 	  return NULL;
341 	}
342 
343       if (bfd_elf_get_str_section (abfd, shindex) == NULL)
344 	return NULL;
345     }
346   else
347     {
348       /* PR 24273: The string section's contents may have already
349 	 been loaded elsewhere, eg because a corrupt file has the
350 	 string section index in the ELF header pointing at a group
351 	 section.  So be paranoid, and test that the last byte of
352 	 the section is zero.  */
353       if (hdr->sh_size == 0 || hdr->contents[hdr->sh_size - 1] != 0)
354 	return NULL;
355     }
356 
357   if (strindex >= hdr->sh_size)
358     {
359       unsigned int shstrndx = elf_elfheader(abfd)->e_shstrndx;
360       _bfd_error_handler
361 	/* xgettext:c-format */
362 	(_("%pB: invalid string offset %u >= %" PRIu64 " for section `%s'"),
363 	 abfd, strindex, (uint64_t) hdr->sh_size,
364 	 (shindex == shstrndx && strindex == hdr->sh_name
365 	  ? ".shstrtab"
366 	  : bfd_elf_string_from_elf_section (abfd, shstrndx, hdr->sh_name)));
367       return NULL;
368     }
369 
370   return ((char *) hdr->contents) + strindex;
371 }
372 
373 /* Read and convert symbols to internal format.
374    SYMCOUNT specifies the number of symbols to read, starting from
375    symbol SYMOFFSET.  If any of INTSYM_BUF, EXTSYM_BUF or EXTSHNDX_BUF
376    are non-NULL, they are used to store the internal symbols, external
377    symbols, and symbol section index extensions, respectively.
378    Returns a pointer to the internal symbol buffer (malloced if necessary)
379    or NULL if there were no symbols or some kind of problem.  */
380 
381 Elf_Internal_Sym *
382 bfd_elf_get_elf_syms (bfd *ibfd,
383 		      Elf_Internal_Shdr *symtab_hdr,
384 		      size_t symcount,
385 		      size_t symoffset,
386 		      Elf_Internal_Sym *intsym_buf,
387 		      void *extsym_buf,
388 		      Elf_External_Sym_Shndx *extshndx_buf)
389 {
390   Elf_Internal_Shdr *shndx_hdr;
391   void *alloc_ext;
392   const bfd_byte *esym;
393   Elf_External_Sym_Shndx *alloc_extshndx;
394   Elf_External_Sym_Shndx *shndx;
395   Elf_Internal_Sym *alloc_intsym;
396   Elf_Internal_Sym *isym;
397   Elf_Internal_Sym *isymend;
398   const struct elf_backend_data *bed;
399   size_t extsym_size;
400   size_t amt;
401   file_ptr pos;
402 
403   if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour)
404     abort ();
405 
406   if (symcount == 0)
407     return intsym_buf;
408 
409   /* Normal syms might have section extension entries.  */
410   shndx_hdr = NULL;
411   if (elf_symtab_shndx_list (ibfd) != NULL)
412     {
413       elf_section_list * entry;
414       Elf_Internal_Shdr **sections = elf_elfsections (ibfd);
415 
416       /* Find an index section that is linked to this symtab section.  */
417       for (entry = elf_symtab_shndx_list (ibfd); entry != NULL; entry = entry->next)
418 	{
419 	  /* PR 20063.  */
420 	  if (entry->hdr.sh_link >= elf_numsections (ibfd))
421 	    continue;
422 
423 	  if (sections[entry->hdr.sh_link] == symtab_hdr)
424 	    {
425 	      shndx_hdr = & entry->hdr;
426 	      break;
427 	    };
428 	}
429 
430       if (shndx_hdr == NULL)
431 	{
432 	  if (symtab_hdr == &elf_symtab_hdr (ibfd))
433 	    /* Not really accurate, but this was how the old code used
434 	       to work.  */
435 	    shndx_hdr = &elf_symtab_shndx_list (ibfd)->hdr;
436 	  /* Otherwise we do nothing.  The assumption is that
437 	     the index table will not be needed.  */
438 	}
439     }
440 
441   /* Read the symbols.  */
442   alloc_ext = NULL;
443   alloc_extshndx = NULL;
444   alloc_intsym = NULL;
445   bed = get_elf_backend_data (ibfd);
446   extsym_size = bed->s->sizeof_sym;
447   if (_bfd_mul_overflow (symcount, extsym_size, &amt))
448     {
449       bfd_set_error (bfd_error_file_too_big);
450       intsym_buf = NULL;
451       goto out;
452     }
453   pos = symtab_hdr->sh_offset + symoffset * extsym_size;
454   if (extsym_buf == NULL)
455     {
456       alloc_ext = bfd_malloc (amt);
457       extsym_buf = alloc_ext;
458     }
459   if (extsym_buf == NULL
460       || bfd_seek (ibfd, pos, SEEK_SET) != 0
461       || bfd_bread (extsym_buf, amt, ibfd) != amt)
462     {
463       intsym_buf = NULL;
464       goto out;
465     }
466 
467   if (shndx_hdr == NULL || shndx_hdr->sh_size == 0)
468     extshndx_buf = NULL;
469   else
470     {
471       if (_bfd_mul_overflow (symcount, sizeof (Elf_External_Sym_Shndx), &amt))
472 	{
473 	  bfd_set_error (bfd_error_file_too_big);
474 	  intsym_buf = NULL;
475 	  goto out;
476 	}
477       pos = shndx_hdr->sh_offset + symoffset * sizeof (Elf_External_Sym_Shndx);
478       if (extshndx_buf == NULL)
479 	{
480 	  alloc_extshndx = (Elf_External_Sym_Shndx *) bfd_malloc (amt);
481 	  extshndx_buf = alloc_extshndx;
482 	}
483       if (extshndx_buf == NULL
484 	  || bfd_seek (ibfd, pos, SEEK_SET) != 0
485 	  || bfd_bread (extshndx_buf, amt, ibfd) != amt)
486 	{
487 	  intsym_buf = NULL;
488 	  goto out;
489 	}
490     }
491 
492   if (intsym_buf == NULL)
493     {
494       if (_bfd_mul_overflow (symcount, sizeof (Elf_Internal_Sym), &amt))
495 	{
496 	  bfd_set_error (bfd_error_file_too_big);
497 	  goto out;
498 	}
499       alloc_intsym = (Elf_Internal_Sym *) bfd_malloc (amt);
500       intsym_buf = alloc_intsym;
501       if (intsym_buf == NULL)
502 	goto out;
503     }
504 
505   /* Convert the symbols to internal form.  */
506   isymend = intsym_buf + symcount;
507   for (esym = (const bfd_byte *) extsym_buf, isym = intsym_buf,
508 	   shndx = extshndx_buf;
509        isym < isymend;
510        esym += extsym_size, isym++, shndx = shndx != NULL ? shndx + 1 : NULL)
511     if (!(*bed->s->swap_symbol_in) (ibfd, esym, shndx, isym))
512       {
513 	symoffset += (esym - (bfd_byte *) extsym_buf) / extsym_size;
514 	/* xgettext:c-format */
515 	_bfd_error_handler (_("%pB symbol number %lu references"
516 			      " nonexistent SHT_SYMTAB_SHNDX section"),
517 			    ibfd, (unsigned long) symoffset);
518 	free (alloc_intsym);
519 	intsym_buf = NULL;
520 	goto out;
521       }
522 
523  out:
524   free (alloc_ext);
525   free (alloc_extshndx);
526 
527   return intsym_buf;
528 }
529 
530 /* Look up a symbol name.  */
531 const char *
532 bfd_elf_sym_name (bfd *abfd,
533 		  Elf_Internal_Shdr *symtab_hdr,
534 		  Elf_Internal_Sym *isym,
535 		  asection *sym_sec)
536 {
537   const char *name;
538   unsigned int iname = isym->st_name;
539   unsigned int shindex = symtab_hdr->sh_link;
540 
541   if (iname == 0 && ELF_ST_TYPE (isym->st_info) == STT_SECTION
542       /* Check for a bogus st_shndx to avoid crashing.  */
543       && isym->st_shndx < elf_numsections (abfd))
544     {
545       iname = elf_elfsections (abfd)[isym->st_shndx]->sh_name;
546       shindex = elf_elfheader (abfd)->e_shstrndx;
547     }
548 
549   name = bfd_elf_string_from_elf_section (abfd, shindex, iname);
550   if (name == NULL)
551     name = "(null)";
552   else if (sym_sec && *name == '\0')
553     name = bfd_section_name (sym_sec);
554 
555   return name;
556 }
557 
558 /* Elf_Internal_Shdr->contents is an array of these for SHT_GROUP
559    sections.  The first element is the flags, the rest are section
560    pointers.  */
561 
562 typedef union elf_internal_group {
563   Elf_Internal_Shdr *shdr;
564   unsigned int flags;
565 } Elf_Internal_Group;
566 
567 /* Return the name of the group signature symbol.  Why isn't the
568    signature just a string?  */
569 
570 static const char *
571 group_signature (bfd *abfd, Elf_Internal_Shdr *ghdr)
572 {
573   Elf_Internal_Shdr *hdr;
574   unsigned char esym[sizeof (Elf64_External_Sym)];
575   Elf_External_Sym_Shndx eshndx;
576   Elf_Internal_Sym isym;
577 
578   /* First we need to ensure the symbol table is available.  Make sure
579      that it is a symbol table section.  */
580   if (ghdr->sh_link >= elf_numsections (abfd))
581     return NULL;
582   hdr = elf_elfsections (abfd) [ghdr->sh_link];
583   if (hdr->sh_type != SHT_SYMTAB
584       || ! bfd_section_from_shdr (abfd, ghdr->sh_link))
585     return NULL;
586 
587   /* Go read the symbol.  */
588   hdr = &elf_tdata (abfd)->symtab_hdr;
589   if (bfd_elf_get_elf_syms (abfd, hdr, 1, ghdr->sh_info,
590 			    &isym, esym, &eshndx) == NULL)
591     return NULL;
592 
593   return bfd_elf_sym_name (abfd, hdr, &isym, NULL);
594 }
595 
596 /* Set next_in_group list pointer, and group name for NEWSECT.  */
597 
598 static bool
599 setup_group (bfd *abfd, Elf_Internal_Shdr *hdr, asection *newsect)
600 {
601   unsigned int num_group = elf_tdata (abfd)->num_group;
602 
603   /* If num_group is zero, read in all SHT_GROUP sections.  The count
604      is set to -1 if there are no SHT_GROUP sections.  */
605   if (num_group == 0)
606     {
607       unsigned int i, shnum;
608 
609       /* First count the number of groups.  If we have a SHT_GROUP
610 	 section with just a flag word (ie. sh_size is 4), ignore it.  */
611       shnum = elf_numsections (abfd);
612       num_group = 0;
613 
614 #define IS_VALID_GROUP_SECTION_HEADER(shdr, minsize)	\
615 	(   (shdr)->sh_type == SHT_GROUP		\
616 	 && (shdr)->sh_size >= minsize			\
617 	 && (shdr)->sh_entsize == GRP_ENTRY_SIZE	\
618 	 && ((shdr)->sh_size % GRP_ENTRY_SIZE) == 0)
619 
620       for (i = 0; i < shnum; i++)
621 	{
622 	  Elf_Internal_Shdr *shdr = elf_elfsections (abfd)[i];
623 
624 	  if (IS_VALID_GROUP_SECTION_HEADER (shdr, 2 * GRP_ENTRY_SIZE))
625 	    num_group += 1;
626 	}
627 
628       if (num_group == 0)
629 	{
630 	  num_group = (unsigned) -1;
631 	  elf_tdata (abfd)->num_group = num_group;
632 	  elf_tdata (abfd)->group_sect_ptr = NULL;
633 	}
634       else
635 	{
636 	  /* We keep a list of elf section headers for group sections,
637 	     so we can find them quickly.  */
638 	  size_t amt;
639 
640 	  elf_tdata (abfd)->num_group = num_group;
641 	  amt = num_group * sizeof (Elf_Internal_Shdr *);
642 	  elf_tdata (abfd)->group_sect_ptr
643 	    = (Elf_Internal_Shdr **) bfd_zalloc (abfd, amt);
644 	  if (elf_tdata (abfd)->group_sect_ptr == NULL)
645 	    return false;
646 	  num_group = 0;
647 
648 	  for (i = 0; i < shnum; i++)
649 	    {
650 	      Elf_Internal_Shdr *shdr = elf_elfsections (abfd)[i];
651 
652 	      if (IS_VALID_GROUP_SECTION_HEADER (shdr, 2 * GRP_ENTRY_SIZE))
653 		{
654 		  unsigned char *src;
655 		  Elf_Internal_Group *dest;
656 
657 		  /* Make sure the group section has a BFD section
658 		     attached to it.  */
659 		  if (!bfd_section_from_shdr (abfd, i))
660 		    return false;
661 
662 		  /* Add to list of sections.  */
663 		  elf_tdata (abfd)->group_sect_ptr[num_group] = shdr;
664 		  num_group += 1;
665 
666 		  /* Read the raw contents.  */
667 		  BFD_ASSERT (sizeof (*dest) >= 4 && sizeof (*dest) % 4 == 0);
668 		  shdr->contents = NULL;
669 		  if (_bfd_mul_overflow (shdr->sh_size,
670 					 sizeof (*dest) / 4, &amt)
671 		      || bfd_seek (abfd, shdr->sh_offset, SEEK_SET) != 0
672 		      || !(shdr->contents
673 			   = _bfd_alloc_and_read (abfd, amt, shdr->sh_size)))
674 		    {
675 		      _bfd_error_handler
676 			/* xgettext:c-format */
677 			(_("%pB: invalid size field in group section"
678 			   " header: %#" PRIx64 ""),
679 			 abfd, (uint64_t) shdr->sh_size);
680 		      bfd_set_error (bfd_error_bad_value);
681 		      -- num_group;
682 		      continue;
683 		    }
684 
685 		  /* Translate raw contents, a flag word followed by an
686 		     array of elf section indices all in target byte order,
687 		     to the flag word followed by an array of elf section
688 		     pointers.  */
689 		  src = shdr->contents + shdr->sh_size;
690 		  dest = (Elf_Internal_Group *) (shdr->contents + amt);
691 
692 		  while (1)
693 		    {
694 		      unsigned int idx;
695 
696 		      src -= 4;
697 		      --dest;
698 		      idx = H_GET_32 (abfd, src);
699 		      if (src == shdr->contents)
700 			{
701 			  dest->shdr = NULL;
702 			  dest->flags = idx;
703 			  if (shdr->bfd_section != NULL && (idx & GRP_COMDAT))
704 			    shdr->bfd_section->flags
705 			      |= SEC_LINK_ONCE | SEC_LINK_DUPLICATES_DISCARD;
706 			  break;
707 			}
708 		      if (idx < shnum)
709 			{
710 			  dest->shdr = elf_elfsections (abfd)[idx];
711 			  /* PR binutils/23199: All sections in a
712 			     section group should be marked with
713 			     SHF_GROUP.  But some tools generate
714 			     broken objects without SHF_GROUP.  Fix
715 			     them up here.  */
716 			  dest->shdr->sh_flags |= SHF_GROUP;
717 			}
718 		      if (idx >= shnum
719 			  || dest->shdr->sh_type == SHT_GROUP)
720 			{
721 			  _bfd_error_handler
722 			    (_("%pB: invalid entry in SHT_GROUP section [%u]"),
723 			       abfd, i);
724 			  dest->shdr = NULL;
725 			}
726 		    }
727 		}
728 	    }
729 
730 	  /* PR 17510: Corrupt binaries might contain invalid groups.  */
731 	  if (num_group != (unsigned) elf_tdata (abfd)->num_group)
732 	    {
733 	      elf_tdata (abfd)->num_group = num_group;
734 
735 	      /* If all groups are invalid then fail.  */
736 	      if (num_group == 0)
737 		{
738 		  elf_tdata (abfd)->group_sect_ptr = NULL;
739 		  elf_tdata (abfd)->num_group = num_group = -1;
740 		  _bfd_error_handler
741 		    (_("%pB: no valid group sections found"), abfd);
742 		  bfd_set_error (bfd_error_bad_value);
743 		}
744 	    }
745 	}
746     }
747 
748   if (num_group != (unsigned) -1)
749     {
750       unsigned int search_offset = elf_tdata (abfd)->group_search_offset;
751       unsigned int j;
752 
753       for (j = 0; j < num_group; j++)
754 	{
755 	  /* Begin search from previous found group.  */
756 	  unsigned i = (j + search_offset) % num_group;
757 
758 	  Elf_Internal_Shdr *shdr = elf_tdata (abfd)->group_sect_ptr[i];
759 	  Elf_Internal_Group *idx;
760 	  bfd_size_type n_elt;
761 
762 	  if (shdr == NULL)
763 	    continue;
764 
765 	  idx = (Elf_Internal_Group *) shdr->contents;
766 	  if (idx == NULL || shdr->sh_size < 4)
767 	    {
768 	      /* See PR 21957 for a reproducer.  */
769 	      /* xgettext:c-format */
770 	      _bfd_error_handler (_("%pB: group section '%pA' has no contents"),
771 				  abfd, shdr->bfd_section);
772 	      elf_tdata (abfd)->group_sect_ptr[i] = NULL;
773 	      bfd_set_error (bfd_error_bad_value);
774 	      return false;
775 	    }
776 	  n_elt = shdr->sh_size / 4;
777 
778 	  /* Look through this group's sections to see if current
779 	     section is a member.  */
780 	  while (--n_elt != 0)
781 	    if ((++idx)->shdr == hdr)
782 	      {
783 		asection *s = NULL;
784 
785 		/* We are a member of this group.  Go looking through
786 		   other members to see if any others are linked via
787 		   next_in_group.  */
788 		idx = (Elf_Internal_Group *) shdr->contents;
789 		n_elt = shdr->sh_size / 4;
790 		while (--n_elt != 0)
791 		  if ((++idx)->shdr != NULL
792 		      && (s = idx->shdr->bfd_section) != NULL
793 		      && elf_next_in_group (s) != NULL)
794 		    break;
795 		if (n_elt != 0)
796 		  {
797 		    /* Snarf the group name from other member, and
798 		       insert current section in circular list.  */
799 		    elf_group_name (newsect) = elf_group_name (s);
800 		    elf_next_in_group (newsect) = elf_next_in_group (s);
801 		    elf_next_in_group (s) = newsect;
802 		  }
803 		else
804 		  {
805 		    const char *gname;
806 
807 		    gname = group_signature (abfd, shdr);
808 		    if (gname == NULL)
809 		      return false;
810 		    elf_group_name (newsect) = gname;
811 
812 		    /* Start a circular list with one element.  */
813 		    elf_next_in_group (newsect) = newsect;
814 		  }
815 
816 		/* If the group section has been created, point to the
817 		   new member.  */
818 		if (shdr->bfd_section != NULL)
819 		  elf_next_in_group (shdr->bfd_section) = newsect;
820 
821 		elf_tdata (abfd)->group_search_offset = i;
822 		j = num_group - 1;
823 		break;
824 	      }
825 	}
826     }
827 
828   if (elf_group_name (newsect) == NULL)
829     {
830       /* xgettext:c-format */
831       _bfd_error_handler (_("%pB: no group info for section '%pA'"),
832 			  abfd, newsect);
833       /* PR 29532: Return true here, even though the group info has not been
834 	 read.  Separate debug info files can have empty group sections, but
835 	 we do not want this to prevent them from being loaded as otherwise
836 	 GDB will not be able to use them.  */
837       return true;
838     }
839   return true;
840 }
841 
842 bool
843 _bfd_elf_setup_sections (bfd *abfd)
844 {
845   unsigned int i;
846   unsigned int num_group = elf_tdata (abfd)->num_group;
847   bool result = true;
848   asection *s;
849 
850   /* Process SHF_LINK_ORDER.  */
851   for (s = abfd->sections; s != NULL; s = s->next)
852     {
853       Elf_Internal_Shdr *this_hdr = &elf_section_data (s)->this_hdr;
854       if ((this_hdr->sh_flags & SHF_LINK_ORDER) != 0)
855 	{
856 	  unsigned int elfsec = this_hdr->sh_link;
857 	  /* An sh_link value of 0 is now allowed.  It indicates that linked
858 	     to section has already been discarded, but that the current
859 	     section has been retained for some other reason.  This linking
860 	     section is still a candidate for later garbage collection
861 	     however.  */
862 	  if (elfsec == 0)
863 	    {
864 	      elf_linked_to_section (s) = NULL;
865 	    }
866 	  else
867 	    {
868 	      asection *linksec = NULL;
869 
870 	      if (elfsec < elf_numsections (abfd))
871 		{
872 		  this_hdr = elf_elfsections (abfd)[elfsec];
873 		  linksec = this_hdr->bfd_section;
874 		}
875 
876 	      /* PR 1991, 2008:
877 		 Some strip/objcopy may leave an incorrect value in
878 		 sh_link.  We don't want to proceed.  */
879 	      if (linksec == NULL)
880 		{
881 		  _bfd_error_handler
882 		    /* xgettext:c-format */
883 		    (_("%pB: sh_link [%d] in section `%pA' is incorrect"),
884 		     s->owner, elfsec, s);
885 		  result = false;
886 		}
887 
888 	      elf_linked_to_section (s) = linksec;
889 	    }
890 	}
891       else if (this_hdr->sh_type == SHT_GROUP
892 	       && elf_next_in_group (s) == NULL)
893 	{
894 	  _bfd_error_handler
895 	    /* xgettext:c-format */
896 	    (_("%pB: SHT_GROUP section [index %d] has no SHF_GROUP sections"),
897 	     abfd, elf_section_data (s)->this_idx);
898 	  result = false;
899 	}
900     }
901 
902   /* Process section groups.  */
903   if (num_group == (unsigned) -1)
904     return result;
905 
906   for (i = 0; i < num_group; i++)
907     {
908       Elf_Internal_Shdr *shdr = elf_tdata (abfd)->group_sect_ptr[i];
909       Elf_Internal_Group *idx;
910       unsigned int n_elt;
911 
912       /* PR binutils/18758: Beware of corrupt binaries with invalid
913 	 group data.  */
914       if (shdr == NULL || shdr->bfd_section == NULL || shdr->contents == NULL)
915 	{
916 	  _bfd_error_handler
917 	    /* xgettext:c-format */
918 	    (_("%pB: section group entry number %u is corrupt"),
919 	     abfd, i);
920 	  result = false;
921 	  continue;
922 	}
923 
924       idx = (Elf_Internal_Group *) shdr->contents;
925       n_elt = shdr->sh_size / 4;
926 
927       while (--n_elt != 0)
928 	{
929 	  ++ idx;
930 
931 	  if (idx->shdr == NULL)
932 	    continue;
933 	  else if (idx->shdr->bfd_section)
934 	    elf_sec_group (idx->shdr->bfd_section) = shdr->bfd_section;
935 	  else if (idx->shdr->sh_type != SHT_RELA
936 		   && idx->shdr->sh_type != SHT_REL)
937 	    {
938 	      /* There are some unknown sections in the group.  */
939 	      _bfd_error_handler
940 		/* xgettext:c-format */
941 		(_("%pB: unknown type [%#x] section `%s' in group [%pA]"),
942 		 abfd,
943 		 idx->shdr->sh_type,
944 		 bfd_elf_string_from_elf_section (abfd,
945 						  (elf_elfheader (abfd)
946 						   ->e_shstrndx),
947 						  idx->shdr->sh_name),
948 		 shdr->bfd_section);
949 	      result = false;
950 	    }
951 	}
952     }
953 
954   return result;
955 }
956 
957 bool
958 bfd_elf_is_group_section (bfd *abfd ATTRIBUTE_UNUSED, const asection *sec)
959 {
960   return elf_next_in_group (sec) != NULL;
961 }
962 
963 const char *
964 bfd_elf_group_name (bfd *abfd ATTRIBUTE_UNUSED, const asection *sec)
965 {
966   if (elf_sec_group (sec) != NULL)
967     return elf_group_name (sec);
968   return NULL;
969 }
970 
971 /* This a copy of lto_section defined in GCC (lto-streamer.h).  */
972 
973 struct lto_section
974 {
975   int16_t major_version;
976   int16_t minor_version;
977   unsigned char slim_object;
978 
979   /* Flags is a private field that is not defined publicly.  */
980   uint16_t flags;
981 };
982 
983 /* Make a BFD section from an ELF section.  We store a pointer to the
984    BFD section in the bfd_section field of the header.  */
985 
986 bool
987 _bfd_elf_make_section_from_shdr (bfd *abfd,
988 				 Elf_Internal_Shdr *hdr,
989 				 const char *name,
990 				 int shindex)
991 {
992   asection *newsect;
993   flagword flags;
994   const struct elf_backend_data *bed;
995   unsigned int opb = bfd_octets_per_byte (abfd, NULL);
996 
997   if (hdr->bfd_section != NULL)
998     return true;
999 
1000   newsect = bfd_make_section_anyway (abfd, name);
1001   if (newsect == NULL)
1002     return false;
1003 
1004   hdr->bfd_section = newsect;
1005   elf_section_data (newsect)->this_hdr = *hdr;
1006   elf_section_data (newsect)->this_idx = shindex;
1007 
1008   /* Always use the real type/flags.  */
1009   elf_section_type (newsect) = hdr->sh_type;
1010   elf_section_flags (newsect) = hdr->sh_flags;
1011 
1012   newsect->filepos = hdr->sh_offset;
1013 
1014   flags = SEC_NO_FLAGS;
1015   if (hdr->sh_type != SHT_NOBITS)
1016     flags |= SEC_HAS_CONTENTS;
1017   if (hdr->sh_type == SHT_GROUP)
1018     flags |= SEC_GROUP;
1019   if ((hdr->sh_flags & SHF_ALLOC) != 0)
1020     {
1021       flags |= SEC_ALLOC;
1022       if (hdr->sh_type != SHT_NOBITS)
1023 	flags |= SEC_LOAD;
1024     }
1025   if ((hdr->sh_flags & SHF_WRITE) == 0)
1026     flags |= SEC_READONLY;
1027   if ((hdr->sh_flags & SHF_EXECINSTR) != 0)
1028     flags |= SEC_CODE;
1029   else if ((flags & SEC_LOAD) != 0)
1030     flags |= SEC_DATA;
1031   if ((hdr->sh_flags & SHF_MERGE) != 0)
1032     {
1033       flags |= SEC_MERGE;
1034       newsect->entsize = hdr->sh_entsize;
1035     }
1036   if ((hdr->sh_flags & SHF_STRINGS) != 0)
1037     flags |= SEC_STRINGS;
1038   if (hdr->sh_flags & SHF_GROUP)
1039     if (!setup_group (abfd, hdr, newsect))
1040       return false;
1041   if ((hdr->sh_flags & SHF_TLS) != 0)
1042     flags |= SEC_THREAD_LOCAL;
1043   if ((hdr->sh_flags & SHF_EXCLUDE) != 0)
1044     flags |= SEC_EXCLUDE;
1045 
1046   switch (elf_elfheader (abfd)->e_ident[EI_OSABI])
1047     {
1048       /* FIXME: We should not recognize SHF_GNU_MBIND for ELFOSABI_NONE,
1049 	 but binutils as of 2019-07-23 did not set the EI_OSABI header
1050 	 byte.  */
1051     case ELFOSABI_GNU:
1052     case ELFOSABI_FREEBSD:
1053       if ((hdr->sh_flags & SHF_GNU_RETAIN) != 0)
1054 	elf_tdata (abfd)->has_gnu_osabi |= elf_gnu_osabi_retain;
1055       /* Fall through */
1056     case ELFOSABI_NONE:
1057       if ((hdr->sh_flags & SHF_GNU_MBIND) != 0)
1058 	elf_tdata (abfd)->has_gnu_osabi |= elf_gnu_osabi_mbind;
1059       break;
1060     }
1061 
1062   if ((flags & SEC_ALLOC) == 0)
1063     {
1064       /* The debugging sections appear to be recognized only by name,
1065 	 not any sort of flag.  Their SEC_ALLOC bits are cleared.  */
1066       if (name [0] == '.')
1067 	{
1068 	  if (startswith (name, ".debug")
1069 	      || startswith (name, ".gnu.debuglto_.debug_")
1070 	      || startswith (name, ".gnu.linkonce.wi.")
1071 	      || startswith (name, ".zdebug"))
1072 	    flags |= SEC_DEBUGGING | SEC_ELF_OCTETS;
1073 	  else if (startswith (name, GNU_BUILD_ATTRS_SECTION_NAME)
1074 		   || startswith (name, ".note.gnu"))
1075 	    {
1076 	      flags |= SEC_ELF_OCTETS;
1077 	      opb = 1;
1078 	    }
1079 	  else if (startswith (name, ".line")
1080 		   || startswith (name, ".stab")
1081 		   || strcmp (name, ".gdb_index") == 0)
1082 	    flags |= SEC_DEBUGGING;
1083 	}
1084     }
1085 
1086   if (!bfd_set_section_vma (newsect, hdr->sh_addr / opb)
1087       || !bfd_set_section_size (newsect, hdr->sh_size)
1088       || !bfd_set_section_alignment (newsect, bfd_log2 (hdr->sh_addralign
1089 							& -hdr->sh_addralign)))
1090     return false;
1091 
1092   /* As a GNU extension, if the name begins with .gnu.linkonce, we
1093      only link a single copy of the section.  This is used to support
1094      g++.  g++ will emit each template expansion in its own section.
1095      The symbols will be defined as weak, so that multiple definitions
1096      are permitted.  The GNU linker extension is to actually discard
1097      all but one of the sections.  */
1098   if (startswith (name, ".gnu.linkonce")
1099       && elf_next_in_group (newsect) == NULL)
1100     flags |= SEC_LINK_ONCE | SEC_LINK_DUPLICATES_DISCARD;
1101 
1102   if (!bfd_set_section_flags (newsect, flags))
1103     return false;
1104 
1105   bed = get_elf_backend_data (abfd);
1106   if (bed->elf_backend_section_flags)
1107     if (!bed->elf_backend_section_flags (hdr))
1108       return false;
1109 
1110   /* We do not parse the PT_NOTE segments as we are interested even in the
1111      separate debug info files which may have the segments offsets corrupted.
1112      PT_NOTEs from the core files are currently not parsed using BFD.  */
1113   if (hdr->sh_type == SHT_NOTE && hdr->sh_size != 0)
1114     {
1115       bfd_byte *contents;
1116 
1117       if (!bfd_malloc_and_get_section (abfd, newsect, &contents))
1118 	return false;
1119 
1120       elf_parse_notes (abfd, (char *) contents, hdr->sh_size,
1121 		       hdr->sh_offset, hdr->sh_addralign);
1122       free (contents);
1123     }
1124 
1125   if ((newsect->flags & SEC_ALLOC) != 0)
1126     {
1127       Elf_Internal_Phdr *phdr;
1128       unsigned int i, nload;
1129 
1130       /* Some ELF linkers produce binaries with all the program header
1131 	 p_paddr fields zero.  If we have such a binary with more than
1132 	 one PT_LOAD header, then leave the section lma equal to vma
1133 	 so that we don't create sections with overlapping lma.  */
1134       phdr = elf_tdata (abfd)->phdr;
1135       for (nload = 0, i = 0; i < elf_elfheader (abfd)->e_phnum; i++, phdr++)
1136 	if (phdr->p_paddr != 0)
1137 	  break;
1138 	else if (phdr->p_type == PT_LOAD && phdr->p_memsz != 0)
1139 	  ++nload;
1140       if (i >= elf_elfheader (abfd)->e_phnum && nload > 1)
1141 	return true;
1142 
1143       phdr = elf_tdata (abfd)->phdr;
1144       for (i = 0; i < elf_elfheader (abfd)->e_phnum; i++, phdr++)
1145 	{
1146 	  if (((phdr->p_type == PT_LOAD
1147 		&& (hdr->sh_flags & SHF_TLS) == 0)
1148 	       || phdr->p_type == PT_TLS)
1149 	      && ELF_SECTION_IN_SEGMENT (hdr, phdr))
1150 	    {
1151 	      if ((newsect->flags & SEC_LOAD) == 0)
1152 		newsect->lma = (phdr->p_paddr
1153 				+ hdr->sh_addr - phdr->p_vaddr) / opb;
1154 	      else
1155 		/* We used to use the same adjustment for SEC_LOAD
1156 		   sections, but that doesn't work if the segment
1157 		   is packed with code from multiple VMAs.
1158 		   Instead we calculate the section LMA based on
1159 		   the segment LMA.  It is assumed that the
1160 		   segment will contain sections with contiguous
1161 		   LMAs, even if the VMAs are not.  */
1162 		newsect->lma = (phdr->p_paddr
1163 				+ hdr->sh_offset - phdr->p_offset) / opb;
1164 
1165 	      /* With contiguous segments, we can't tell from file
1166 		 offsets whether a section with zero size should
1167 		 be placed at the end of one segment or the
1168 		 beginning of the next.  Decide based on vaddr.  */
1169 	      if (hdr->sh_addr >= phdr->p_vaddr
1170 		  && (hdr->sh_addr + hdr->sh_size
1171 		      <= phdr->p_vaddr + phdr->p_memsz))
1172 		break;
1173 	    }
1174 	}
1175     }
1176 
1177   /* Compress/decompress DWARF debug sections with names: .debug_*,
1178      .zdebug_*, .gnu.debuglto_.debug_, after the section flags is set.  */
1179   if ((newsect->flags & SEC_DEBUGGING) != 0
1180       && (newsect->flags & SEC_HAS_CONTENTS) != 0
1181       && (newsect->flags & SEC_ELF_OCTETS) != 0)
1182     {
1183       enum { nothing, compress, decompress } action = nothing;
1184       int compression_header_size;
1185       bfd_size_type uncompressed_size;
1186       unsigned int uncompressed_align_power;
1187       enum compression_type ch_type = ch_none;
1188       bool compressed
1189 	= bfd_is_section_compressed_info (abfd, newsect,
1190 					  &compression_header_size,
1191 					  &uncompressed_size,
1192 					  &uncompressed_align_power,
1193 					  &ch_type);
1194 
1195       /* Should we decompress?  */
1196       if ((abfd->flags & BFD_DECOMPRESS) != 0 && compressed)
1197 	action = decompress;
1198 
1199       /* Should we compress?  Or convert to a different compression?  */
1200       else if ((abfd->flags & BFD_COMPRESS) != 0
1201 	       && newsect->size != 0
1202 	       && compression_header_size >= 0
1203 	       && uncompressed_size > 0)
1204 	{
1205 	  if (!compressed)
1206 	    action = compress;
1207 	  else
1208 	    {
1209 	      enum compression_type new_ch_type = ch_none;
1210 	      if ((abfd->flags & BFD_COMPRESS_GABI) != 0)
1211 		new_ch_type = ((abfd->flags & BFD_COMPRESS_ZSTD) != 0
1212 			       ? ch_compress_zstd : ch_compress_zlib);
1213 	      if (new_ch_type != ch_type)
1214 		action = compress;
1215 	    }
1216 	}
1217 
1218       if (action == compress)
1219 	{
1220 	  if (!bfd_init_section_compress_status (abfd, newsect))
1221 	    {
1222 	      _bfd_error_handler
1223 		/* xgettext:c-format */
1224 		(_("%pB: unable to compress section %s"), abfd, name);
1225 	      return false;
1226 	    }
1227 	}
1228       else if (action == decompress)
1229 	{
1230 	  if (!bfd_init_section_decompress_status (abfd, newsect))
1231 	    {
1232 	      _bfd_error_handler
1233 		/* xgettext:c-format */
1234 		(_("%pB: unable to decompress section %s"), abfd, name);
1235 	      return false;
1236 	    }
1237 #ifndef HAVE_ZSTD
1238 	  if (newsect->compress_status == DECOMPRESS_SECTION_ZSTD)
1239 	    {
1240 	      _bfd_error_handler
1241 		  /* xgettext:c-format */
1242 		  (_ ("%pB: section %s is compressed with zstd, but BFD "
1243 		      "is not built with zstd support"),
1244 		   abfd, name);
1245 	      newsect->compress_status = COMPRESS_SECTION_NONE;
1246 	      return false;
1247 	    }
1248 #endif
1249 	  if (abfd->is_linker_input
1250 	      && name[1] == 'z')
1251 	    {
1252 	      /* Rename section from .zdebug_* to .debug_* so that ld
1253 		 scripts will see this section as a debug section.  */
1254 	      char *new_name = bfd_zdebug_name_to_debug (abfd, name);
1255 	      if (new_name == NULL)
1256 		return false;
1257 	      bfd_rename_section (newsect, new_name);
1258 	    }
1259 	}
1260     }
1261 
1262   /* GCC uses .gnu.lto_.lto.<some_hash> as a LTO bytecode information
1263      section.  */
1264   if (startswith (name, ".gnu.lto_.lto."))
1265     {
1266       struct lto_section lsection;
1267       if (bfd_get_section_contents (abfd, newsect, &lsection, 0,
1268 				    sizeof (struct lto_section)))
1269 	abfd->lto_slim_object = lsection.slim_object;
1270     }
1271 
1272   return true;
1273 }
1274 
1275 const char *const bfd_elf_section_type_names[] =
1276 {
1277   "SHT_NULL", "SHT_PROGBITS", "SHT_SYMTAB", "SHT_STRTAB",
1278   "SHT_RELA", "SHT_HASH", "SHT_DYNAMIC", "SHT_NOTE",
1279   "SHT_NOBITS", "SHT_REL", "SHT_SHLIB", "SHT_DYNSYM",
1280 };
1281 
1282 /* ELF relocs are against symbols.  If we are producing relocatable
1283    output, and the reloc is against an external symbol, and nothing
1284    has given us any additional addend, the resulting reloc will also
1285    be against the same symbol.  In such a case, we don't want to
1286    change anything about the way the reloc is handled, since it will
1287    all be done at final link time.  Rather than put special case code
1288    into bfd_perform_relocation, all the reloc types use this howto
1289    function, or should call this function for relocatable output.  */
1290 
1291 bfd_reloc_status_type
1292 bfd_elf_generic_reloc (bfd *abfd ATTRIBUTE_UNUSED,
1293 		       arelent *reloc_entry,
1294 		       asymbol *symbol,
1295 		       void *data ATTRIBUTE_UNUSED,
1296 		       asection *input_section,
1297 		       bfd *output_bfd,
1298 		       char **error_message ATTRIBUTE_UNUSED)
1299 {
1300   if (output_bfd != NULL
1301       && (symbol->flags & BSF_SECTION_SYM) == 0
1302       && (! reloc_entry->howto->partial_inplace
1303 	  || reloc_entry->addend == 0))
1304     {
1305       reloc_entry->address += input_section->output_offset;
1306       return bfd_reloc_ok;
1307     }
1308 
1309   /* In some cases the relocation should be treated as output section
1310      relative, as when linking ELF DWARF into PE COFF.  Many ELF
1311      targets lack section relative relocations and instead use
1312      ordinary absolute relocations for references between DWARF
1313      sections.  That is arguably a bug in those targets but it happens
1314      to work for the usual case of linking to non-loaded ELF debug
1315      sections with VMAs forced to zero.  PE COFF on the other hand
1316      doesn't allow a section VMA of zero.  */
1317   if (output_bfd == NULL
1318       && !reloc_entry->howto->pc_relative
1319       && (symbol->section->flags & SEC_DEBUGGING) != 0
1320       && (input_section->flags & SEC_DEBUGGING) != 0)
1321     reloc_entry->addend -= symbol->section->output_section->vma;
1322 
1323   return bfd_reloc_continue;
1324 }
1325 
1326 /* Returns TRUE if section A matches section B.
1327    Names, addresses and links may be different, but everything else
1328    should be the same.  */
1329 
1330 static bool
1331 section_match (const Elf_Internal_Shdr * a,
1332 	       const Elf_Internal_Shdr * b)
1333 {
1334   if (a->sh_type != b->sh_type
1335       || ((a->sh_flags ^ b->sh_flags) & ~SHF_INFO_LINK) != 0
1336       || a->sh_addralign != b->sh_addralign
1337       || a->sh_entsize != b->sh_entsize)
1338     return false;
1339   if (a->sh_type == SHT_SYMTAB
1340       || a->sh_type == SHT_STRTAB)
1341     return true;
1342   return a->sh_size == b->sh_size;
1343 }
1344 
1345 /* Find a section in OBFD that has the same characteristics
1346    as IHEADER.  Return the index of this section or SHN_UNDEF if
1347    none can be found.  Check's section HINT first, as this is likely
1348    to be the correct section.  */
1349 
1350 static unsigned int
1351 find_link (const bfd *obfd, const Elf_Internal_Shdr *iheader,
1352 	   const unsigned int hint)
1353 {
1354   Elf_Internal_Shdr ** oheaders = elf_elfsections (obfd);
1355   unsigned int i;
1356 
1357   BFD_ASSERT (iheader != NULL);
1358 
1359   /* See PR 20922 for a reproducer of the NULL test.  */
1360   if (hint < elf_numsections (obfd)
1361       && oheaders[hint] != NULL
1362       && section_match (oheaders[hint], iheader))
1363     return hint;
1364 
1365   for (i = 1; i < elf_numsections (obfd); i++)
1366     {
1367       Elf_Internal_Shdr * oheader = oheaders[i];
1368 
1369       if (oheader == NULL)
1370 	continue;
1371       if (section_match (oheader, iheader))
1372 	/* FIXME: Do we care if there is a potential for
1373 	   multiple matches ?  */
1374 	return i;
1375     }
1376 
1377   return SHN_UNDEF;
1378 }
1379 
1380 /* PR 19938: Attempt to set the ELF section header fields of an OS or
1381    Processor specific section, based upon a matching input section.
1382    Returns TRUE upon success, FALSE otherwise.  */
1383 
1384 static bool
1385 copy_special_section_fields (const bfd *ibfd,
1386 			     bfd *obfd,
1387 			     const Elf_Internal_Shdr *iheader,
1388 			     Elf_Internal_Shdr *oheader,
1389 			     const unsigned int secnum)
1390 {
1391   const struct elf_backend_data *bed = get_elf_backend_data (obfd);
1392   const Elf_Internal_Shdr **iheaders
1393     = (const Elf_Internal_Shdr **) elf_elfsections (ibfd);
1394   bool changed = false;
1395   unsigned int sh_link;
1396 
1397   if (oheader->sh_type == SHT_NOBITS)
1398     {
1399       /* This is a feature for objcopy --only-keep-debug:
1400 	 When a section's type is changed to NOBITS, we preserve
1401 	 the sh_link and sh_info fields so that they can be
1402 	 matched up with the original.
1403 
1404 	 Note: Strictly speaking these assignments are wrong.
1405 	 The sh_link and sh_info fields should point to the
1406 	 relevent sections in the output BFD, which may not be in
1407 	 the same location as they were in the input BFD.  But
1408 	 the whole point of this action is to preserve the
1409 	 original values of the sh_link and sh_info fields, so
1410 	 that they can be matched up with the section headers in
1411 	 the original file.  So strictly speaking we may be
1412 	 creating an invalid ELF file, but it is only for a file
1413 	 that just contains debug info and only for sections
1414 	 without any contents.  */
1415       if (oheader->sh_link == 0)
1416 	oheader->sh_link = iheader->sh_link;
1417       if (oheader->sh_info == 0)
1418 	oheader->sh_info = iheader->sh_info;
1419       return true;
1420     }
1421 
1422   /* Allow the target a chance to decide how these fields should be set.  */
1423   if (bed->elf_backend_copy_special_section_fields (ibfd, obfd,
1424 						    iheader, oheader))
1425     return true;
1426 
1427   /* We have an iheader which might match oheader, and which has non-zero
1428      sh_info and/or sh_link fields.  Attempt to follow those links and find
1429      the section in the output bfd which corresponds to the linked section
1430      in the input bfd.  */
1431   if (iheader->sh_link != SHN_UNDEF)
1432     {
1433       /* See PR 20931 for a reproducer.  */
1434       if (iheader->sh_link >= elf_numsections (ibfd))
1435 	{
1436 	  _bfd_error_handler
1437 	    /* xgettext:c-format */
1438 	    (_("%pB: invalid sh_link field (%d) in section number %d"),
1439 	     ibfd, iheader->sh_link, secnum);
1440 	  return false;
1441 	}
1442 
1443       sh_link = find_link (obfd, iheaders[iheader->sh_link], iheader->sh_link);
1444       if (sh_link != SHN_UNDEF)
1445 	{
1446 	  oheader->sh_link = sh_link;
1447 	  changed = true;
1448 	}
1449       else
1450 	/* FIXME: Should we install iheader->sh_link
1451 	   if we could not find a match ?  */
1452 	_bfd_error_handler
1453 	  /* xgettext:c-format */
1454 	  (_("%pB: failed to find link section for section %d"), obfd, secnum);
1455     }
1456 
1457   if (iheader->sh_info)
1458     {
1459       /* The sh_info field can hold arbitrary information, but if the
1460 	 SHF_LINK_INFO flag is set then it should be interpreted as a
1461 	 section index.  */
1462       if (iheader->sh_flags & SHF_INFO_LINK)
1463 	{
1464 	  sh_link = find_link (obfd, iheaders[iheader->sh_info],
1465 			       iheader->sh_info);
1466 	  if (sh_link != SHN_UNDEF)
1467 	    oheader->sh_flags |= SHF_INFO_LINK;
1468 	}
1469       else
1470 	/* No idea what it means - just copy it.  */
1471 	sh_link = iheader->sh_info;
1472 
1473       if (sh_link != SHN_UNDEF)
1474 	{
1475 	  oheader->sh_info = sh_link;
1476 	  changed = true;
1477 	}
1478       else
1479 	_bfd_error_handler
1480 	  /* xgettext:c-format */
1481 	  (_("%pB: failed to find info section for section %d"), obfd, secnum);
1482     }
1483 
1484   return changed;
1485 }
1486 
1487 /* Copy the program header and other data from one object module to
1488    another.  */
1489 
1490 bool
1491 _bfd_elf_copy_private_bfd_data (bfd *ibfd, bfd *obfd)
1492 {
1493   const Elf_Internal_Shdr **iheaders
1494     = (const Elf_Internal_Shdr **) elf_elfsections (ibfd);
1495   Elf_Internal_Shdr **oheaders = elf_elfsections (obfd);
1496   const struct elf_backend_data *bed;
1497   unsigned int i;
1498 
1499   if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
1500     || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
1501     return true;
1502 
1503   if (!elf_flags_init (obfd))
1504     {
1505       elf_elfheader (obfd)->e_flags = elf_elfheader (ibfd)->e_flags;
1506       elf_flags_init (obfd) = true;
1507     }
1508 
1509   elf_gp (obfd) = elf_gp (ibfd);
1510 
1511   /* Also copy the EI_OSABI field.  */
1512   elf_elfheader (obfd)->e_ident[EI_OSABI] =
1513     elf_elfheader (ibfd)->e_ident[EI_OSABI];
1514 
1515   /* If set, copy the EI_ABIVERSION field.  */
1516   if (elf_elfheader (ibfd)->e_ident[EI_ABIVERSION])
1517     elf_elfheader (obfd)->e_ident[EI_ABIVERSION]
1518       = elf_elfheader (ibfd)->e_ident[EI_ABIVERSION];
1519 
1520   /* Copy object attributes.  */
1521   _bfd_elf_copy_obj_attributes (ibfd, obfd);
1522 
1523   if (iheaders == NULL || oheaders == NULL)
1524     return true;
1525 
1526   bed = get_elf_backend_data (obfd);
1527 
1528   /* Possibly copy other fields in the section header.  */
1529   for (i = 1; i < elf_numsections (obfd); i++)
1530     {
1531       unsigned int j;
1532       Elf_Internal_Shdr * oheader = oheaders[i];
1533 
1534       /* Ignore ordinary sections.  SHT_NOBITS sections are considered however
1535 	 because of a special case need for generating separate debug info
1536 	 files.  See below for more details.  */
1537       if (oheader == NULL
1538 	  || (oheader->sh_type != SHT_NOBITS
1539 	      && oheader->sh_type < SHT_LOOS))
1540 	continue;
1541 
1542       /* Ignore empty sections, and sections whose
1543 	 fields have already been initialised.  */
1544       if (oheader->sh_size == 0
1545 	  || (oheader->sh_info != 0 && oheader->sh_link != 0))
1546 	continue;
1547 
1548       /* Scan for the matching section in the input bfd.
1549 	 First we try for a direct mapping between the input and
1550 	 output sections.  */
1551       for (j = 1; j < elf_numsections (ibfd); j++)
1552 	{
1553 	  const Elf_Internal_Shdr * iheader = iheaders[j];
1554 
1555 	  if (iheader == NULL)
1556 	    continue;
1557 
1558 	  if (oheader->bfd_section != NULL
1559 	      && iheader->bfd_section != NULL
1560 	      && iheader->bfd_section->output_section != NULL
1561 	      && iheader->bfd_section->output_section == oheader->bfd_section)
1562 	    {
1563 	      /* We have found a connection from the input section to
1564 		 the output section.  Attempt to copy the header fields.
1565 		 If this fails then do not try any further sections -
1566 		 there should only be a one-to-one mapping between
1567 		 input and output.  */
1568 	      if (!copy_special_section_fields (ibfd, obfd,
1569 						iheader, oheader, i))
1570 		j = elf_numsections (ibfd);
1571 	      break;
1572 	    }
1573 	}
1574 
1575       if (j < elf_numsections (ibfd))
1576 	continue;
1577 
1578       /* That failed.  So try to deduce the corresponding input section.
1579 	 Unfortunately we cannot compare names as the output string table
1580 	 is empty, so instead we check size, address and type.  */
1581       for (j = 1; j < elf_numsections (ibfd); j++)
1582 	{
1583 	  const Elf_Internal_Shdr * iheader = iheaders[j];
1584 
1585 	  if (iheader == NULL)
1586 	    continue;
1587 
1588 	  /* Try matching fields in the input section's header.
1589 	     Since --only-keep-debug turns all non-debug sections into
1590 	     SHT_NOBITS sections, the output SHT_NOBITS type matches any
1591 	     input type.  */
1592 	  if ((oheader->sh_type == SHT_NOBITS
1593 	       || iheader->sh_type == oheader->sh_type)
1594 	      && (iheader->sh_flags & ~ SHF_INFO_LINK)
1595 	      == (oheader->sh_flags & ~ SHF_INFO_LINK)
1596 	      && iheader->sh_addralign == oheader->sh_addralign
1597 	      && iheader->sh_entsize == oheader->sh_entsize
1598 	      && iheader->sh_size == oheader->sh_size
1599 	      && iheader->sh_addr == oheader->sh_addr
1600 	      && (iheader->sh_info != oheader->sh_info
1601 		  || iheader->sh_link != oheader->sh_link))
1602 	    {
1603 	      if (copy_special_section_fields (ibfd, obfd, iheader, oheader, i))
1604 		break;
1605 	    }
1606 	}
1607 
1608       if (j == elf_numsections (ibfd) && oheader->sh_type >= SHT_LOOS)
1609 	{
1610 	  /* Final attempt.  Call the backend copy function
1611 	     with a NULL input section.  */
1612 	  (void) bed->elf_backend_copy_special_section_fields (ibfd, obfd,
1613 							       NULL, oheader);
1614 	}
1615     }
1616 
1617   return true;
1618 }
1619 
1620 static const char *
1621 get_segment_type (unsigned int p_type)
1622 {
1623   const char *pt;
1624   switch (p_type)
1625     {
1626     case PT_NULL: pt = "NULL"; break;
1627     case PT_LOAD: pt = "LOAD"; break;
1628     case PT_DYNAMIC: pt = "DYNAMIC"; break;
1629     case PT_INTERP: pt = "INTERP"; break;
1630     case PT_NOTE: pt = "NOTE"; break;
1631     case PT_SHLIB: pt = "SHLIB"; break;
1632     case PT_PHDR: pt = "PHDR"; break;
1633     case PT_TLS: pt = "TLS"; break;
1634     case PT_GNU_EH_FRAME: pt = "EH_FRAME"; break;
1635     case PT_GNU_STACK: pt = "STACK"; break;
1636     case PT_GNU_RELRO: pt = "RELRO"; break;
1637     case PT_GNU_SFRAME: pt = "SFRAME"; break;
1638     default: pt = NULL; break;
1639     }
1640   return pt;
1641 }
1642 
1643 /* Print out the program headers.  */
1644 
1645 bool
1646 _bfd_elf_print_private_bfd_data (bfd *abfd, void *farg)
1647 {
1648   FILE *f = (FILE *) farg;
1649   Elf_Internal_Phdr *p;
1650   asection *s;
1651   bfd_byte *dynbuf = NULL;
1652 
1653   p = elf_tdata (abfd)->phdr;
1654   if (p != NULL)
1655     {
1656       unsigned int i, c;
1657 
1658       fprintf (f, _("\nProgram Header:\n"));
1659       c = elf_elfheader (abfd)->e_phnum;
1660       for (i = 0; i < c; i++, p++)
1661 	{
1662 	  const char *pt = get_segment_type (p->p_type);
1663 	  char buf[20];
1664 
1665 	  if (pt == NULL)
1666 	    {
1667 	      sprintf (buf, "0x%lx", p->p_type);
1668 	      pt = buf;
1669 	    }
1670 	  fprintf (f, "%8s off    0x", pt);
1671 	  bfd_fprintf_vma (abfd, f, p->p_offset);
1672 	  fprintf (f, " vaddr 0x");
1673 	  bfd_fprintf_vma (abfd, f, p->p_vaddr);
1674 	  fprintf (f, " paddr 0x");
1675 	  bfd_fprintf_vma (abfd, f, p->p_paddr);
1676 	  fprintf (f, " align 2**%u\n", bfd_log2 (p->p_align));
1677 	  fprintf (f, "         filesz 0x");
1678 	  bfd_fprintf_vma (abfd, f, p->p_filesz);
1679 	  fprintf (f, " memsz 0x");
1680 	  bfd_fprintf_vma (abfd, f, p->p_memsz);
1681 	  fprintf (f, " flags %c%c%c",
1682 		   (p->p_flags & PF_R) != 0 ? 'r' : '-',
1683 		   (p->p_flags & PF_W) != 0 ? 'w' : '-',
1684 		   (p->p_flags & PF_X) != 0 ? 'x' : '-');
1685 	  if ((p->p_flags &~ (unsigned) (PF_R | PF_W | PF_X)) != 0)
1686 	    fprintf (f, " %lx", p->p_flags &~ (unsigned) (PF_R | PF_W | PF_X));
1687 	  fprintf (f, "\n");
1688 	}
1689     }
1690 
1691   s = bfd_get_section_by_name (abfd, ".dynamic");
1692   if (s != NULL)
1693     {
1694       unsigned int elfsec;
1695       unsigned long shlink;
1696       bfd_byte *extdyn, *extdynend;
1697       size_t extdynsize;
1698       void (*swap_dyn_in) (bfd *, const void *, Elf_Internal_Dyn *);
1699 
1700       fprintf (f, _("\nDynamic Section:\n"));
1701 
1702       if (!bfd_malloc_and_get_section (abfd, s, &dynbuf))
1703 	goto error_return;
1704 
1705       elfsec = _bfd_elf_section_from_bfd_section (abfd, s);
1706       if (elfsec == SHN_BAD)
1707 	goto error_return;
1708       shlink = elf_elfsections (abfd)[elfsec]->sh_link;
1709 
1710       extdynsize = get_elf_backend_data (abfd)->s->sizeof_dyn;
1711       swap_dyn_in = get_elf_backend_data (abfd)->s->swap_dyn_in;
1712 
1713       for (extdyn = dynbuf, extdynend = dynbuf + s->size;
1714 	   (size_t) (extdynend - extdyn) >= extdynsize;
1715 	   extdyn += extdynsize)
1716 	{
1717 	  Elf_Internal_Dyn dyn;
1718 	  const char *name = "";
1719 	  char ab[20];
1720 	  bool stringp;
1721 	  const struct elf_backend_data *bed = get_elf_backend_data (abfd);
1722 
1723 	  (*swap_dyn_in) (abfd, extdyn, &dyn);
1724 
1725 	  if (dyn.d_tag == DT_NULL)
1726 	    break;
1727 
1728 	  stringp = false;
1729 	  switch (dyn.d_tag)
1730 	    {
1731 	    default:
1732 	      if (bed->elf_backend_get_target_dtag)
1733 		name = (*bed->elf_backend_get_target_dtag) (dyn.d_tag);
1734 
1735 	      if (!strcmp (name, ""))
1736 		{
1737 		  sprintf (ab, "%#" PRIx64, (uint64_t) dyn.d_tag);
1738 		  name = ab;
1739 		}
1740 	      break;
1741 
1742 	    case DT_NEEDED: name = "NEEDED"; stringp = true; break;
1743 	    case DT_PLTRELSZ: name = "PLTRELSZ"; break;
1744 	    case DT_PLTGOT: name = "PLTGOT"; break;
1745 	    case DT_HASH: name = "HASH"; break;
1746 	    case DT_STRTAB: name = "STRTAB"; break;
1747 	    case DT_SYMTAB: name = "SYMTAB"; break;
1748 	    case DT_RELA: name = "RELA"; break;
1749 	    case DT_RELASZ: name = "RELASZ"; break;
1750 	    case DT_RELAENT: name = "RELAENT"; break;
1751 	    case DT_STRSZ: name = "STRSZ"; break;
1752 	    case DT_SYMENT: name = "SYMENT"; break;
1753 	    case DT_INIT: name = "INIT"; break;
1754 	    case DT_FINI: name = "FINI"; break;
1755 	    case DT_SONAME: name = "SONAME"; stringp = true; break;
1756 	    case DT_RPATH: name = "RPATH"; stringp = true; break;
1757 	    case DT_SYMBOLIC: name = "SYMBOLIC"; break;
1758 	    case DT_REL: name = "REL"; break;
1759 	    case DT_RELSZ: name = "RELSZ"; break;
1760 	    case DT_RELENT: name = "RELENT"; break;
1761 	    case DT_RELR: name = "RELR"; break;
1762 	    case DT_RELRSZ: name = "RELRSZ"; break;
1763 	    case DT_RELRENT: name = "RELRENT"; break;
1764 	    case DT_PLTREL: name = "PLTREL"; break;
1765 	    case DT_DEBUG: name = "DEBUG"; break;
1766 	    case DT_TEXTREL: name = "TEXTREL"; break;
1767 	    case DT_JMPREL: name = "JMPREL"; break;
1768 	    case DT_BIND_NOW: name = "BIND_NOW"; break;
1769 	    case DT_INIT_ARRAY: name = "INIT_ARRAY"; break;
1770 	    case DT_FINI_ARRAY: name = "FINI_ARRAY"; break;
1771 	    case DT_INIT_ARRAYSZ: name = "INIT_ARRAYSZ"; break;
1772 	    case DT_FINI_ARRAYSZ: name = "FINI_ARRAYSZ"; break;
1773 	    case DT_RUNPATH: name = "RUNPATH"; stringp = true; break;
1774 	    case DT_FLAGS: name = "FLAGS"; break;
1775 	    case DT_PREINIT_ARRAY: name = "PREINIT_ARRAY"; break;
1776 	    case DT_PREINIT_ARRAYSZ: name = "PREINIT_ARRAYSZ"; break;
1777 	    case DT_CHECKSUM: name = "CHECKSUM"; break;
1778 	    case DT_PLTPADSZ: name = "PLTPADSZ"; break;
1779 	    case DT_MOVEENT: name = "MOVEENT"; break;
1780 	    case DT_MOVESZ: name = "MOVESZ"; break;
1781 	    case DT_FEATURE: name = "FEATURE"; break;
1782 	    case DT_POSFLAG_1: name = "POSFLAG_1"; break;
1783 	    case DT_SYMINSZ: name = "SYMINSZ"; break;
1784 	    case DT_SYMINENT: name = "SYMINENT"; break;
1785 	    case DT_CONFIG: name = "CONFIG"; stringp = true; break;
1786 	    case DT_DEPAUDIT: name = "DEPAUDIT"; stringp = true; break;
1787 	    case DT_AUDIT: name = "AUDIT"; stringp = true; break;
1788 	    case DT_PLTPAD: name = "PLTPAD"; break;
1789 	    case DT_MOVETAB: name = "MOVETAB"; break;
1790 	    case DT_SYMINFO: name = "SYMINFO"; break;
1791 	    case DT_RELACOUNT: name = "RELACOUNT"; break;
1792 	    case DT_RELCOUNT: name = "RELCOUNT"; break;
1793 	    case DT_FLAGS_1: name = "FLAGS_1"; break;
1794 	    case DT_VERSYM: name = "VERSYM"; break;
1795 	    case DT_VERDEF: name = "VERDEF"; break;
1796 	    case DT_VERDEFNUM: name = "VERDEFNUM"; break;
1797 	    case DT_VERNEED: name = "VERNEED"; break;
1798 	    case DT_VERNEEDNUM: name = "VERNEEDNUM"; break;
1799 	    case DT_AUXILIARY: name = "AUXILIARY"; stringp = true; break;
1800 	    case DT_USED: name = "USED"; break;
1801 	    case DT_FILTER: name = "FILTER"; stringp = true; break;
1802 	    case DT_GNU_HASH: name = "GNU_HASH"; break;
1803 	    }
1804 
1805 	  fprintf (f, "  %-20s ", name);
1806 	  if (! stringp)
1807 	    {
1808 	      fprintf (f, "0x");
1809 	      bfd_fprintf_vma (abfd, f, dyn.d_un.d_val);
1810 	    }
1811 	  else
1812 	    {
1813 	      const char *string;
1814 	      unsigned int tagv = dyn.d_un.d_val;
1815 
1816 	      string = bfd_elf_string_from_elf_section (abfd, shlink, tagv);
1817 	      if (string == NULL)
1818 		goto error_return;
1819 	      fprintf (f, "%s", string);
1820 	    }
1821 	  fprintf (f, "\n");
1822 	}
1823 
1824       free (dynbuf);
1825       dynbuf = NULL;
1826     }
1827 
1828   if ((elf_dynverdef (abfd) != 0 && elf_tdata (abfd)->verdef == NULL)
1829       || (elf_dynverref (abfd) != 0 && elf_tdata (abfd)->verref == NULL))
1830     {
1831       if (! _bfd_elf_slurp_version_tables (abfd, false))
1832 	return false;
1833     }
1834 
1835   if (elf_dynverdef (abfd) != 0)
1836     {
1837       Elf_Internal_Verdef *t;
1838 
1839       fprintf (f, _("\nVersion definitions:\n"));
1840       for (t = elf_tdata (abfd)->verdef; t != NULL; t = t->vd_nextdef)
1841 	{
1842 	  fprintf (f, "%d 0x%2.2x 0x%8.8lx %s\n", t->vd_ndx,
1843 		   t->vd_flags, t->vd_hash,
1844 		   t->vd_nodename ? t->vd_nodename : "<corrupt>");
1845 	  if (t->vd_auxptr != NULL && t->vd_auxptr->vda_nextptr != NULL)
1846 	    {
1847 	      Elf_Internal_Verdaux *a;
1848 
1849 	      fprintf (f, "\t");
1850 	      for (a = t->vd_auxptr->vda_nextptr;
1851 		   a != NULL;
1852 		   a = a->vda_nextptr)
1853 		fprintf (f, "%s ",
1854 			 a->vda_nodename ? a->vda_nodename : "<corrupt>");
1855 	      fprintf (f, "\n");
1856 	    }
1857 	}
1858     }
1859 
1860   if (elf_dynverref (abfd) != 0)
1861     {
1862       Elf_Internal_Verneed *t;
1863 
1864       fprintf (f, _("\nVersion References:\n"));
1865       for (t = elf_tdata (abfd)->verref; t != NULL; t = t->vn_nextref)
1866 	{
1867 	  Elf_Internal_Vernaux *a;
1868 
1869 	  fprintf (f, _("  required from %s:\n"),
1870 		   t->vn_filename ? t->vn_filename : "<corrupt>");
1871 	  for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr)
1872 	    fprintf (f, "    0x%8.8lx 0x%2.2x %2.2d %s\n", a->vna_hash,
1873 		     a->vna_flags, a->vna_other,
1874 		     a->vna_nodename ? a->vna_nodename : "<corrupt>");
1875 	}
1876     }
1877 
1878   return true;
1879 
1880  error_return:
1881   free (dynbuf);
1882   return false;
1883 }
1884 
1885 /* Get version name.  If BASE_P is TRUE, return "Base" for VER_FLG_BASE
1886    and return symbol version for symbol version itself.   */
1887 
1888 const char *
1889 _bfd_elf_get_symbol_version_string (bfd *abfd, asymbol *symbol,
1890 				    bool base_p,
1891 				    bool *hidden)
1892 {
1893   const char *version_string = NULL;
1894   if (elf_dynversym (abfd) != 0
1895       && (elf_dynverdef (abfd) != 0 || elf_dynverref (abfd) != 0))
1896     {
1897       unsigned int vernum = ((elf_symbol_type *) symbol)->version;
1898 
1899       *hidden = (vernum & VERSYM_HIDDEN) != 0;
1900       vernum &= VERSYM_VERSION;
1901 
1902       if (vernum == 0)
1903 	version_string = "";
1904       else if (vernum == 1
1905 	       && (vernum > elf_tdata (abfd)->cverdefs
1906 		   || (elf_tdata (abfd)->verdef[0].vd_flags
1907 		       == VER_FLG_BASE)))
1908 	version_string = base_p ? "Base" : "";
1909       else if (vernum <= elf_tdata (abfd)->cverdefs)
1910 	{
1911 	  const char *nodename
1912 	    = elf_tdata (abfd)->verdef[vernum - 1].vd_nodename;
1913 	  version_string = "";
1914 	  if (base_p
1915 	      || nodename == NULL
1916 	      || symbol->name == NULL
1917 	      || strcmp (symbol->name, nodename) != 0)
1918 	    version_string = nodename;
1919 	}
1920       else
1921 	{
1922 	  Elf_Internal_Verneed *t;
1923 
1924 	  version_string = _("<corrupt>");
1925 	  for (t = elf_tdata (abfd)->verref;
1926 	       t != NULL;
1927 	       t = t->vn_nextref)
1928 	    {
1929 	      Elf_Internal_Vernaux *a;
1930 
1931 	      for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr)
1932 		{
1933 		  if (a->vna_other == vernum)
1934 		    {
1935 		      *hidden = true;
1936 		      version_string = a->vna_nodename;
1937 		      break;
1938 		    }
1939 		}
1940 	    }
1941 	}
1942     }
1943   return version_string;
1944 }
1945 
1946 /* Display ELF-specific fields of a symbol.  */
1947 
1948 void
1949 bfd_elf_print_symbol (bfd *abfd,
1950 		      void *filep,
1951 		      asymbol *symbol,
1952 		      bfd_print_symbol_type how)
1953 {
1954   FILE *file = (FILE *) filep;
1955   switch (how)
1956     {
1957     case bfd_print_symbol_name:
1958       fprintf (file, "%s", symbol->name);
1959       break;
1960     case bfd_print_symbol_more:
1961       fprintf (file, "elf ");
1962       bfd_fprintf_vma (abfd, file, symbol->value);
1963       fprintf (file, " %x", symbol->flags);
1964       break;
1965     case bfd_print_symbol_all:
1966       {
1967 	const char *section_name;
1968 	const char *name = NULL;
1969 	const struct elf_backend_data *bed;
1970 	unsigned char st_other;
1971 	bfd_vma val;
1972 	const char *version_string;
1973 	bool hidden;
1974 
1975 	section_name = symbol->section ? symbol->section->name : "(*none*)";
1976 
1977 	bed = get_elf_backend_data (abfd);
1978 	if (bed->elf_backend_print_symbol_all)
1979 	  name = (*bed->elf_backend_print_symbol_all) (abfd, filep, symbol);
1980 
1981 	if (name == NULL)
1982 	  {
1983 	    name = symbol->name;
1984 	    bfd_print_symbol_vandf (abfd, file, symbol);
1985 	  }
1986 
1987 	fprintf (file, " %s\t", section_name);
1988 	/* Print the "other" value for a symbol.  For common symbols,
1989 	   we've already printed the size; now print the alignment.
1990 	   For other symbols, we have no specified alignment, and
1991 	   we've printed the address; now print the size.  */
1992 	if (symbol->section && bfd_is_com_section (symbol->section))
1993 	  val = ((elf_symbol_type *) symbol)->internal_elf_sym.st_value;
1994 	else
1995 	  val = ((elf_symbol_type *) symbol)->internal_elf_sym.st_size;
1996 	bfd_fprintf_vma (abfd, file, val);
1997 
1998 	/* If we have version information, print it.  */
1999 	version_string = _bfd_elf_get_symbol_version_string (abfd,
2000 							     symbol,
2001 							     true,
2002 							     &hidden);
2003 	if (version_string)
2004 	  {
2005 	    if (!hidden)
2006 	      fprintf (file, "  %-11s", version_string);
2007 	    else
2008 	      {
2009 		int i;
2010 
2011 		fprintf (file, " (%s)", version_string);
2012 		for (i = 10 - strlen (version_string); i > 0; --i)
2013 		  putc (' ', file);
2014 	      }
2015 	  }
2016 
2017 	/* If the st_other field is not zero, print it.  */
2018 	st_other = ((elf_symbol_type *) symbol)->internal_elf_sym.st_other;
2019 
2020 	switch (st_other)
2021 	  {
2022 	  case 0: break;
2023 	  case STV_INTERNAL:  fprintf (file, " .internal");  break;
2024 	  case STV_HIDDEN:    fprintf (file, " .hidden");    break;
2025 	  case STV_PROTECTED: fprintf (file, " .protected"); break;
2026 	  default:
2027 	    /* Some other non-defined flags are also present, so print
2028 	       everything hex.  */
2029 	    fprintf (file, " 0x%02x", (unsigned int) st_other);
2030 	  }
2031 
2032 	fprintf (file, " %s", name);
2033       }
2034       break;
2035     }
2036 }
2037 
2038 /* ELF .o/exec file reading */
2039 
2040 /* Create a new bfd section from an ELF section header.  */
2041 
2042 bool
2043 bfd_section_from_shdr (bfd *abfd, unsigned int shindex)
2044 {
2045   Elf_Internal_Shdr *hdr;
2046   Elf_Internal_Ehdr *ehdr;
2047   const struct elf_backend_data *bed;
2048   const char *name;
2049   bool ret = true;
2050 
2051   if (shindex >= elf_numsections (abfd))
2052     return false;
2053 
2054   /* PR17512: A corrupt ELF binary might contain a loop of sections via
2055      sh_link or sh_info.  Detect this here, by refusing to load a
2056      section that we are already in the process of loading.  */
2057   if (elf_tdata (abfd)->being_created[shindex])
2058     {
2059       _bfd_error_handler
2060 	(_("%pB: warning: loop in section dependencies detected"), abfd);
2061       return false;
2062     }
2063   elf_tdata (abfd)->being_created[shindex] = true;
2064 
2065   hdr = elf_elfsections (abfd)[shindex];
2066   ehdr = elf_elfheader (abfd);
2067   name = bfd_elf_string_from_elf_section (abfd, ehdr->e_shstrndx,
2068 					  hdr->sh_name);
2069   if (name == NULL)
2070     goto fail;
2071 
2072   bed = get_elf_backend_data (abfd);
2073   switch (hdr->sh_type)
2074     {
2075     case SHT_NULL:
2076       /* Inactive section. Throw it away.  */
2077       goto success;
2078 
2079     case SHT_PROGBITS:		/* Normal section with contents.  */
2080     case SHT_NOBITS:		/* .bss section.  */
2081     case SHT_HASH:		/* .hash section.  */
2082     case SHT_NOTE:		/* .note section.  */
2083     case SHT_INIT_ARRAY:	/* .init_array section.  */
2084     case SHT_FINI_ARRAY:	/* .fini_array section.  */
2085     case SHT_PREINIT_ARRAY:	/* .preinit_array section.  */
2086     case SHT_GNU_LIBLIST:	/* .gnu.liblist section.  */
2087     case SHT_GNU_HASH:		/* .gnu.hash section.  */
2088       ret = _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
2089       goto success;
2090 
2091     case SHT_DYNAMIC:	/* Dynamic linking information.  */
2092       if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex))
2093 	goto fail;
2094 
2095       if (hdr->sh_link > elf_numsections (abfd))
2096 	{
2097 	  /* PR 10478: Accept Solaris binaries with a sh_link field
2098 	     set to SHN_BEFORE (LORESERVE) or SHN_AFTER (LORESERVE+1).  */
2099 	  switch (bfd_get_arch (abfd))
2100 	    {
2101 	    case bfd_arch_i386:
2102 	    case bfd_arch_sparc:
2103 	      if (hdr->sh_link == (SHN_LORESERVE & 0xffff)
2104 		  || hdr->sh_link == ((SHN_LORESERVE + 1) & 0xffff))
2105 		break;
2106 	      /* Otherwise fall through.  */
2107 	    default:
2108 	      goto fail;
2109 	    }
2110 	}
2111       else if (elf_elfsections (abfd)[hdr->sh_link] == NULL)
2112 	goto fail;
2113       else if (elf_elfsections (abfd)[hdr->sh_link]->sh_type != SHT_STRTAB)
2114 	{
2115 	  Elf_Internal_Shdr *dynsymhdr;
2116 
2117 	  /* The shared libraries distributed with hpux11 have a bogus
2118 	     sh_link field for the ".dynamic" section.  Find the
2119 	     string table for the ".dynsym" section instead.  */
2120 	  if (elf_dynsymtab (abfd) != 0)
2121 	    {
2122 	      dynsymhdr = elf_elfsections (abfd)[elf_dynsymtab (abfd)];
2123 	      hdr->sh_link = dynsymhdr->sh_link;
2124 	    }
2125 	  else
2126 	    {
2127 	      unsigned int i, num_sec;
2128 
2129 	      num_sec = elf_numsections (abfd);
2130 	      for (i = 1; i < num_sec; i++)
2131 		{
2132 		  dynsymhdr = elf_elfsections (abfd)[i];
2133 		  if (dynsymhdr->sh_type == SHT_DYNSYM)
2134 		    {
2135 		      hdr->sh_link = dynsymhdr->sh_link;
2136 		      break;
2137 		    }
2138 		}
2139 	    }
2140 	}
2141       goto success;
2142 
2143     case SHT_SYMTAB:		/* A symbol table.  */
2144       if (elf_onesymtab (abfd) == shindex)
2145 	goto success;
2146 
2147       if (hdr->sh_entsize != bed->s->sizeof_sym)
2148 	goto fail;
2149 
2150       if (hdr->sh_info * hdr->sh_entsize > hdr->sh_size)
2151 	{
2152 	  if (hdr->sh_size != 0)
2153 	    goto fail;
2154 	  /* Some assemblers erroneously set sh_info to one with a
2155 	     zero sh_size.  ld sees this as a global symbol count
2156 	     of (unsigned) -1.  Fix it here.  */
2157 	  hdr->sh_info = 0;
2158 	  goto success;
2159 	}
2160 
2161       /* PR 18854: A binary might contain more than one symbol table.
2162 	 Unusual, but possible.  Warn, but continue.  */
2163       if (elf_onesymtab (abfd) != 0)
2164 	{
2165 	  _bfd_error_handler
2166 	    /* xgettext:c-format */
2167 	    (_("%pB: warning: multiple symbol tables detected"
2168 	       " - ignoring the table in section %u"),
2169 	     abfd, shindex);
2170 	  goto success;
2171 	}
2172       elf_onesymtab (abfd) = shindex;
2173       elf_symtab_hdr (abfd) = *hdr;
2174       elf_elfsections (abfd)[shindex] = hdr = & elf_symtab_hdr (abfd);
2175       abfd->flags |= HAS_SYMS;
2176 
2177       /* Sometimes a shared object will map in the symbol table.  If
2178 	 SHF_ALLOC is set, and this is a shared object, then we also
2179 	 treat this section as a BFD section.  We can not base the
2180 	 decision purely on SHF_ALLOC, because that flag is sometimes
2181 	 set in a relocatable object file, which would confuse the
2182 	 linker.  */
2183       if ((hdr->sh_flags & SHF_ALLOC) != 0
2184 	  && (abfd->flags & DYNAMIC) != 0
2185 	  && ! _bfd_elf_make_section_from_shdr (abfd, hdr, name,
2186 						shindex))
2187 	goto fail;
2188 
2189       /* Go looking for SHT_SYMTAB_SHNDX too, since if there is one we
2190 	 can't read symbols without that section loaded as well.  It
2191 	 is most likely specified by the next section header.  */
2192       {
2193 	elf_section_list * entry;
2194 	unsigned int i, num_sec;
2195 
2196 	for (entry = elf_symtab_shndx_list (abfd); entry; entry = entry->next)
2197 	  if (entry->hdr.sh_link == shindex)
2198 	    goto success;
2199 
2200 	num_sec = elf_numsections (abfd);
2201 	for (i = shindex + 1; i < num_sec; i++)
2202 	  {
2203 	    Elf_Internal_Shdr *hdr2 = elf_elfsections (abfd)[i];
2204 
2205 	    if (hdr2->sh_type == SHT_SYMTAB_SHNDX
2206 		&& hdr2->sh_link == shindex)
2207 	      break;
2208 	  }
2209 
2210 	if (i == num_sec)
2211 	  for (i = 1; i < shindex; i++)
2212 	    {
2213 	      Elf_Internal_Shdr *hdr2 = elf_elfsections (abfd)[i];
2214 
2215 	      if (hdr2->sh_type == SHT_SYMTAB_SHNDX
2216 		  && hdr2->sh_link == shindex)
2217 		break;
2218 	    }
2219 
2220 	if (i != shindex)
2221 	  ret = bfd_section_from_shdr (abfd, i);
2222 	/* else FIXME: we have failed to find the symbol table.
2223 	   Should we issue an error?  */
2224 	goto success;
2225       }
2226 
2227     case SHT_DYNSYM:		/* A dynamic symbol table.  */
2228       if (elf_dynsymtab (abfd) == shindex)
2229 	goto success;
2230 
2231       if (hdr->sh_entsize != bed->s->sizeof_sym)
2232 	goto fail;
2233 
2234       if (hdr->sh_info * hdr->sh_entsize > hdr->sh_size)
2235 	{
2236 	  if (hdr->sh_size != 0)
2237 	    goto fail;
2238 
2239 	  /* Some linkers erroneously set sh_info to one with a
2240 	     zero sh_size.  ld sees this as a global symbol count
2241 	     of (unsigned) -1.  Fix it here.  */
2242 	  hdr->sh_info = 0;
2243 	  goto success;
2244 	}
2245 
2246       /* PR 18854: A binary might contain more than one dynamic symbol table.
2247 	 Unusual, but possible.  Warn, but continue.  */
2248       if (elf_dynsymtab (abfd) != 0)
2249 	{
2250 	  _bfd_error_handler
2251 	    /* xgettext:c-format */
2252 	    (_("%pB: warning: multiple dynamic symbol tables detected"
2253 	       " - ignoring the table in section %u"),
2254 	     abfd, shindex);
2255 	  goto success;
2256 	}
2257       elf_dynsymtab (abfd) = shindex;
2258       elf_tdata (abfd)->dynsymtab_hdr = *hdr;
2259       elf_elfsections (abfd)[shindex] = hdr = &elf_tdata (abfd)->dynsymtab_hdr;
2260       abfd->flags |= HAS_SYMS;
2261 
2262       /* Besides being a symbol table, we also treat this as a regular
2263 	 section, so that objcopy can handle it.  */
2264       ret = _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
2265       goto success;
2266 
2267     case SHT_SYMTAB_SHNDX: /* Symbol section indices when >64k sections.  */
2268       {
2269 	elf_section_list * entry;
2270 
2271 	for (entry = elf_symtab_shndx_list (abfd); entry; entry = entry->next)
2272 	  if (entry->ndx == shindex)
2273 	    goto success;
2274 
2275 	entry = bfd_alloc (abfd, sizeof (*entry));
2276 	if (entry == NULL)
2277 	  goto fail;
2278 	entry->ndx = shindex;
2279 	entry->hdr = * hdr;
2280 	entry->next = elf_symtab_shndx_list (abfd);
2281 	elf_symtab_shndx_list (abfd) = entry;
2282 	elf_elfsections (abfd)[shindex] = & entry->hdr;
2283 	goto success;
2284       }
2285 
2286     case SHT_STRTAB:		/* A string table.  */
2287       if (hdr->bfd_section != NULL)
2288 	goto success;
2289 
2290       if (ehdr->e_shstrndx == shindex)
2291 	{
2292 	  elf_tdata (abfd)->shstrtab_hdr = *hdr;
2293 	  elf_elfsections (abfd)[shindex] = &elf_tdata (abfd)->shstrtab_hdr;
2294 	  goto success;
2295 	}
2296 
2297       if (elf_elfsections (abfd)[elf_onesymtab (abfd)]->sh_link == shindex)
2298 	{
2299 	symtab_strtab:
2300 	  elf_tdata (abfd)->strtab_hdr = *hdr;
2301 	  elf_elfsections (abfd)[shindex] = &elf_tdata (abfd)->strtab_hdr;
2302 	  goto success;
2303 	}
2304 
2305       if (elf_elfsections (abfd)[elf_dynsymtab (abfd)]->sh_link == shindex)
2306 	{
2307 	dynsymtab_strtab:
2308 	  elf_tdata (abfd)->dynstrtab_hdr = *hdr;
2309 	  hdr = &elf_tdata (abfd)->dynstrtab_hdr;
2310 	  elf_elfsections (abfd)[shindex] = hdr;
2311 	  /* We also treat this as a regular section, so that objcopy
2312 	     can handle it.  */
2313 	  ret = _bfd_elf_make_section_from_shdr (abfd, hdr, name,
2314 						 shindex);
2315 	  goto success;
2316 	}
2317 
2318       /* If the string table isn't one of the above, then treat it as a
2319 	 regular section.  We need to scan all the headers to be sure,
2320 	 just in case this strtab section appeared before the above.  */
2321       if (elf_onesymtab (abfd) == 0 || elf_dynsymtab (abfd) == 0)
2322 	{
2323 	  unsigned int i, num_sec;
2324 
2325 	  num_sec = elf_numsections (abfd);
2326 	  for (i = 1; i < num_sec; i++)
2327 	    {
2328 	      Elf_Internal_Shdr *hdr2 = elf_elfsections (abfd)[i];
2329 	      if (hdr2->sh_link == shindex)
2330 		{
2331 		  /* Prevent endless recursion on broken objects.  */
2332 		  if (i == shindex)
2333 		    goto fail;
2334 		  if (! bfd_section_from_shdr (abfd, i))
2335 		    goto fail;
2336 		  if (elf_onesymtab (abfd) == i)
2337 		    goto symtab_strtab;
2338 		  if (elf_dynsymtab (abfd) == i)
2339 		    goto dynsymtab_strtab;
2340 		}
2341 	    }
2342 	}
2343       ret = _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
2344       goto success;
2345 
2346     case SHT_REL:
2347     case SHT_RELA:
2348     case SHT_RELR:
2349       /* *These* do a lot of work -- but build no sections!  */
2350       {
2351 	asection *target_sect;
2352 	Elf_Internal_Shdr *hdr2, **p_hdr;
2353 	unsigned int num_sec = elf_numsections (abfd);
2354 	struct bfd_elf_section_data *esdt;
2355 	bfd_size_type size;
2356 
2357 	if (hdr->sh_type == SHT_REL)
2358 	  size = bed->s->sizeof_rel;
2359 	else if (hdr->sh_type == SHT_RELA)
2360 	  size = bed->s->sizeof_rela;
2361 	else
2362 	  size = bed->s->arch_size / 8;
2363 	if (hdr->sh_entsize != size)
2364 	  goto fail;
2365 
2366 	/* Check for a bogus link to avoid crashing.  */
2367 	if (hdr->sh_link >= num_sec)
2368 	  {
2369 	    _bfd_error_handler
2370 	      /* xgettext:c-format */
2371 	      (_("%pB: invalid link %u for reloc section %s (index %u)"),
2372 	       abfd, hdr->sh_link, name, shindex);
2373 	    ret = _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
2374 	    goto success;
2375 	  }
2376 
2377 	/* Get the symbol table.  */
2378 	if ((elf_elfsections (abfd)[hdr->sh_link]->sh_type == SHT_SYMTAB
2379 	     || elf_elfsections (abfd)[hdr->sh_link]->sh_type == SHT_DYNSYM)
2380 	    && ! bfd_section_from_shdr (abfd, hdr->sh_link))
2381 	  goto fail;
2382 
2383 	/* If this is an alloc section in an executable or shared
2384 	   library, or the reloc section does not use the main symbol
2385 	   table we don't treat it as a reloc section.  BFD can't
2386 	   adequately represent such a section, so at least for now,
2387 	   we don't try.  We just present it as a normal section.  We
2388 	   also can't use it as a reloc section if it points to the
2389 	   null section, an invalid section, another reloc section, or
2390 	   its sh_link points to the null section.  */
2391 	if (((abfd->flags & (DYNAMIC | EXEC_P)) != 0
2392 	     && (hdr->sh_flags & SHF_ALLOC) != 0)
2393 	    || hdr->sh_type == SHT_RELR
2394 	    || hdr->sh_link == SHN_UNDEF
2395 	    || hdr->sh_link != elf_onesymtab (abfd)
2396 	    || hdr->sh_info == SHN_UNDEF
2397 	    || hdr->sh_info >= num_sec
2398 	    || elf_elfsections (abfd)[hdr->sh_info]->sh_type == SHT_REL
2399 	    || elf_elfsections (abfd)[hdr->sh_info]->sh_type == SHT_RELA)
2400 	  {
2401 	    ret = _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
2402 	    goto success;
2403 	  }
2404 
2405 	if (! bfd_section_from_shdr (abfd, hdr->sh_info))
2406 	  goto fail;
2407 
2408 	target_sect = bfd_section_from_elf_index (abfd, hdr->sh_info);
2409 	if (target_sect == NULL)
2410 	  goto fail;
2411 
2412 	esdt = elf_section_data (target_sect);
2413 	if (hdr->sh_type == SHT_RELA)
2414 	  p_hdr = &esdt->rela.hdr;
2415 	else
2416 	  p_hdr = &esdt->rel.hdr;
2417 
2418 	/* PR 17512: file: 0b4f81b7.
2419 	   Also see PR 24456, for a file which deliberately has two reloc
2420 	   sections.  */
2421 	if (*p_hdr != NULL)
2422 	  {
2423 	    if (!bed->init_secondary_reloc_section (abfd, hdr, name, shindex))
2424 	      {
2425 		_bfd_error_handler
2426 		  /* xgettext:c-format */
2427 		  (_("%pB: warning: secondary relocation section '%s' "
2428 		     "for section %pA found - ignoring"),
2429 		   abfd, name, target_sect);
2430 	      }
2431 	    else
2432 	      esdt->has_secondary_relocs = true;
2433 	    goto success;
2434 	  }
2435 
2436 	hdr2 = (Elf_Internal_Shdr *) bfd_alloc (abfd, sizeof (*hdr2));
2437 	if (hdr2 == NULL)
2438 	  goto fail;
2439 	*hdr2 = *hdr;
2440 	*p_hdr = hdr2;
2441 	elf_elfsections (abfd)[shindex] = hdr2;
2442 	target_sect->reloc_count += (NUM_SHDR_ENTRIES (hdr)
2443 				     * bed->s->int_rels_per_ext_rel);
2444 	target_sect->flags |= SEC_RELOC;
2445 	target_sect->relocation = NULL;
2446 	target_sect->rel_filepos = hdr->sh_offset;
2447 	/* In the section to which the relocations apply, mark whether
2448 	   its relocations are of the REL or RELA variety.  */
2449 	if (hdr->sh_size != 0)
2450 	  {
2451 	    if (hdr->sh_type == SHT_RELA)
2452 	      target_sect->use_rela_p = 1;
2453 	  }
2454 	abfd->flags |= HAS_RELOC;
2455 	goto success;
2456       }
2457 
2458     case SHT_GNU_verdef:
2459       if (hdr->sh_info != 0)
2460 	elf_dynverdef (abfd) = shindex;
2461       elf_tdata (abfd)->dynverdef_hdr = *hdr;
2462       ret = _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
2463       goto success;
2464 
2465     case SHT_GNU_versym:
2466       if (hdr->sh_entsize != sizeof (Elf_External_Versym))
2467 	goto fail;
2468 
2469       elf_dynversym (abfd) = shindex;
2470       elf_tdata (abfd)->dynversym_hdr = *hdr;
2471       ret = _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
2472       goto success;
2473 
2474     case SHT_GNU_verneed:
2475       if (hdr->sh_info != 0)
2476 	elf_dynverref (abfd) = shindex;
2477       elf_tdata (abfd)->dynverref_hdr = *hdr;
2478       ret = _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
2479       goto success;
2480 
2481     case SHT_SHLIB:
2482       goto success;
2483 
2484     case SHT_GROUP:
2485       if (! IS_VALID_GROUP_SECTION_HEADER (hdr, GRP_ENTRY_SIZE))
2486 	goto fail;
2487 
2488       if (!_bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex))
2489 	goto fail;
2490 
2491       goto success;
2492 
2493     default:
2494       /* Possibly an attributes section.  */
2495       if (hdr->sh_type == SHT_GNU_ATTRIBUTES
2496 	  || hdr->sh_type == bed->obj_attrs_section_type)
2497 	{
2498 	  if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex))
2499 	    goto fail;
2500 	  _bfd_elf_parse_attributes (abfd, hdr);
2501 	  goto success;
2502 	}
2503 
2504       /* Check for any processor-specific section types.  */
2505       if (bed->elf_backend_section_from_shdr (abfd, hdr, name, shindex))
2506 	goto success;
2507 
2508       if (hdr->sh_type >= SHT_LOUSER && hdr->sh_type <= SHT_HIUSER)
2509 	{
2510 	  if ((hdr->sh_flags & SHF_ALLOC) != 0)
2511 	    /* FIXME: How to properly handle allocated section reserved
2512 	       for applications?  */
2513 	    _bfd_error_handler
2514 	      /* xgettext:c-format */
2515 	      (_("%pB: unknown type [%#x] section `%s'"),
2516 	       abfd, hdr->sh_type, name);
2517 	  else
2518 	    {
2519 	      /* Allow sections reserved for applications.  */
2520 	      ret = _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
2521 	      goto success;
2522 	    }
2523 	}
2524       else if (hdr->sh_type >= SHT_LOPROC
2525 	       && hdr->sh_type <= SHT_HIPROC)
2526 	/* FIXME: We should handle this section.  */
2527 	_bfd_error_handler
2528 	  /* xgettext:c-format */
2529 	  (_("%pB: unknown type [%#x] section `%s'"),
2530 	   abfd, hdr->sh_type, name);
2531       else if (hdr->sh_type >= SHT_LOOS && hdr->sh_type <= SHT_HIOS)
2532 	{
2533 	  /* Unrecognised OS-specific sections.  */
2534 	  if ((hdr->sh_flags & SHF_OS_NONCONFORMING) != 0)
2535 	    /* SHF_OS_NONCONFORMING indicates that special knowledge is
2536 	       required to correctly process the section and the file should
2537 	       be rejected with an error message.  */
2538 	    _bfd_error_handler
2539 	      /* xgettext:c-format */
2540 	      (_("%pB: unknown type [%#x] section `%s'"),
2541 	       abfd, hdr->sh_type, name);
2542 	  else
2543 	    {
2544 	      /* Otherwise it should be processed.  */
2545 	      ret = _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
2546 	      goto success;
2547 	    }
2548 	}
2549       else
2550 	/* FIXME: We should handle this section.  */
2551 	_bfd_error_handler
2552 	  /* xgettext:c-format */
2553 	  (_("%pB: unknown type [%#x] section `%s'"),
2554 	   abfd, hdr->sh_type, name);
2555 
2556       goto fail;
2557     }
2558 
2559  fail:
2560   ret = false;
2561  success:
2562   elf_tdata (abfd)->being_created[shindex] = false;
2563   return ret;
2564 }
2565 
2566 /* Return the local symbol specified by ABFD, R_SYMNDX.  */
2567 
2568 Elf_Internal_Sym *
2569 bfd_sym_from_r_symndx (struct sym_cache *cache,
2570 		       bfd *abfd,
2571 		       unsigned long r_symndx)
2572 {
2573   unsigned int ent = r_symndx % LOCAL_SYM_CACHE_SIZE;
2574 
2575   if (cache->abfd != abfd || cache->indx[ent] != r_symndx)
2576     {
2577       Elf_Internal_Shdr *symtab_hdr;
2578       unsigned char esym[sizeof (Elf64_External_Sym)];
2579       Elf_External_Sym_Shndx eshndx;
2580 
2581       symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
2582       if (bfd_elf_get_elf_syms (abfd, symtab_hdr, 1, r_symndx,
2583 				&cache->sym[ent], esym, &eshndx) == NULL)
2584 	return NULL;
2585 
2586       if (cache->abfd != abfd)
2587 	{
2588 	  memset (cache->indx, -1, sizeof (cache->indx));
2589 	  cache->abfd = abfd;
2590 	}
2591       cache->indx[ent] = r_symndx;
2592     }
2593 
2594   return &cache->sym[ent];
2595 }
2596 
2597 /* Given an ELF section number, retrieve the corresponding BFD
2598    section.  */
2599 
2600 asection *
2601 bfd_section_from_elf_index (bfd *abfd, unsigned int sec_index)
2602 {
2603   if (sec_index >= elf_numsections (abfd))
2604     return NULL;
2605   return elf_elfsections (abfd)[sec_index]->bfd_section;
2606 }
2607 
2608 static const struct bfd_elf_special_section special_sections_b[] =
2609 {
2610   { STRING_COMMA_LEN (".bss"), -2, SHT_NOBITS,   SHF_ALLOC + SHF_WRITE },
2611   { NULL,		    0,	0, 0,		 0 }
2612 };
2613 
2614 static const struct bfd_elf_special_section special_sections_c[] =
2615 {
2616   { STRING_COMMA_LEN (".comment"), 0, SHT_PROGBITS, 0 },
2617   { STRING_COMMA_LEN (".ctf"),	0, SHT_PROGBITS,    0 },
2618   { NULL,			0, 0, 0,	    0 }
2619 };
2620 
2621 static const struct bfd_elf_special_section special_sections_d[] =
2622 {
2623   { STRING_COMMA_LEN (".data"),		-2, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
2624   { STRING_COMMA_LEN (".data1"),	 0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
2625   /* There are more DWARF sections than these, but they needn't be added here
2626      unless you have to cope with broken compilers that don't emit section
2627      attributes or you want to help the user writing assembler.  */
2628   { STRING_COMMA_LEN (".debug"),	 0, SHT_PROGBITS, 0 },
2629   { STRING_COMMA_LEN (".debug_line"),	 0, SHT_PROGBITS, 0 },
2630   { STRING_COMMA_LEN (".debug_info"),	 0, SHT_PROGBITS, 0 },
2631   { STRING_COMMA_LEN (".debug_abbrev"),	 0, SHT_PROGBITS, 0 },
2632   { STRING_COMMA_LEN (".debug_aranges"), 0, SHT_PROGBITS, 0 },
2633   { STRING_COMMA_LEN (".dynamic"),	 0, SHT_DYNAMIC,  SHF_ALLOC },
2634   { STRING_COMMA_LEN (".dynstr"),	 0, SHT_STRTAB,	  SHF_ALLOC },
2635   { STRING_COMMA_LEN (".dynsym"),	 0, SHT_DYNSYM,	  SHF_ALLOC },
2636   { NULL,		       0,	 0, 0,		  0 }
2637 };
2638 
2639 static const struct bfd_elf_special_section special_sections_f[] =
2640 {
2641   { STRING_COMMA_LEN (".fini"),	       0, SHT_PROGBITS,	  SHF_ALLOC + SHF_EXECINSTR },
2642   { STRING_COMMA_LEN (".fini_array"), -2, SHT_FINI_ARRAY, SHF_ALLOC + SHF_WRITE },
2643   { NULL,			   0 , 0, 0,		  0 }
2644 };
2645 
2646 static const struct bfd_elf_special_section special_sections_g[] =
2647 {
2648   { STRING_COMMA_LEN (".gnu.linkonce.b"), -2, SHT_NOBITS,      SHF_ALLOC + SHF_WRITE },
2649   { STRING_COMMA_LEN (".gnu.linkonce.n"), -2, SHT_NOBITS,      SHF_ALLOC + SHF_WRITE },
2650   { STRING_COMMA_LEN (".gnu.linkonce.p"), -2, SHT_PROGBITS,    SHF_ALLOC + SHF_WRITE },
2651   { STRING_COMMA_LEN (".gnu.lto_"),	  -1, SHT_PROGBITS,    SHF_EXCLUDE },
2652   { STRING_COMMA_LEN (".got"),		   0, SHT_PROGBITS,    SHF_ALLOC + SHF_WRITE },
2653   { STRING_COMMA_LEN (".gnu.version"),	   0, SHT_GNU_versym,  0 },
2654   { STRING_COMMA_LEN (".gnu.version_d"),   0, SHT_GNU_verdef,  0 },
2655   { STRING_COMMA_LEN (".gnu.version_r"),   0, SHT_GNU_verneed, 0 },
2656   { STRING_COMMA_LEN (".gnu.liblist"),	   0, SHT_GNU_LIBLIST, SHF_ALLOC },
2657   { STRING_COMMA_LEN (".gnu.conflict"),	   0, SHT_RELA,	       SHF_ALLOC },
2658   { STRING_COMMA_LEN (".gnu.hash"),	   0, SHT_GNU_HASH,    SHF_ALLOC },
2659   { NULL,			 0,	   0, 0,	       0 }
2660 };
2661 
2662 static const struct bfd_elf_special_section special_sections_h[] =
2663 {
2664   { STRING_COMMA_LEN (".hash"), 0, SHT_HASH,	 SHF_ALLOC },
2665   { NULL,		     0, 0, 0,		 0 }
2666 };
2667 
2668 static const struct bfd_elf_special_section special_sections_i[] =
2669 {
2670   { STRING_COMMA_LEN (".init"),	       0, SHT_PROGBITS,	  SHF_ALLOC + SHF_EXECINSTR },
2671   { STRING_COMMA_LEN (".init_array"), -2, SHT_INIT_ARRAY, SHF_ALLOC + SHF_WRITE },
2672   { STRING_COMMA_LEN (".interp"),      0, SHT_PROGBITS,	  0 },
2673   { NULL,		       0,      0, 0,		  0 }
2674 };
2675 
2676 static const struct bfd_elf_special_section special_sections_l[] =
2677 {
2678   { STRING_COMMA_LEN (".line"), 0, SHT_PROGBITS, 0 },
2679   { NULL,		     0, 0, 0,		 0 }
2680 };
2681 
2682 static const struct bfd_elf_special_section special_sections_n[] =
2683 {
2684   { STRING_COMMA_LEN (".noinit"),	 -2, SHT_NOBITS,   SHF_ALLOC + SHF_WRITE },
2685   { STRING_COMMA_LEN (".note.GNU-stack"), 0, SHT_PROGBITS, 0 },
2686   { STRING_COMMA_LEN (".note"),		 -1, SHT_NOTE,	   0 },
2687   { NULL,		     0,		  0, 0,		   0 }
2688 };
2689 
2690 static const struct bfd_elf_special_section special_sections_p[] =
2691 {
2692   { STRING_COMMA_LEN (".persistent.bss"), 0, SHT_NOBITS,	SHF_ALLOC + SHF_WRITE },
2693   { STRING_COMMA_LEN (".persistent"),	 -2, SHT_PROGBITS,	SHF_ALLOC + SHF_WRITE },
2694   { STRING_COMMA_LEN (".preinit_array"), -2, SHT_PREINIT_ARRAY, SHF_ALLOC + SHF_WRITE },
2695   { STRING_COMMA_LEN (".plt"),		  0, SHT_PROGBITS,	SHF_ALLOC + SHF_EXECINSTR },
2696   { NULL,		    0,		  0, 0,			0 }
2697 };
2698 
2699 static const struct bfd_elf_special_section special_sections_r[] =
2700 {
2701   { STRING_COMMA_LEN (".rodata"), -2, SHT_PROGBITS, SHF_ALLOC },
2702   { STRING_COMMA_LEN (".rodata1"), 0, SHT_PROGBITS, SHF_ALLOC },
2703   { STRING_COMMA_LEN (".relr.dyn"), 0, SHT_RELR, SHF_ALLOC },
2704   { STRING_COMMA_LEN (".rela"),	  -1, SHT_RELA,	    0 },
2705   { STRING_COMMA_LEN (".rel"),	  -1, SHT_REL,	    0 },
2706   { NULL,		    0,	   0, 0,	    0 }
2707 };
2708 
2709 static const struct bfd_elf_special_section special_sections_s[] =
2710 {
2711   { STRING_COMMA_LEN (".shstrtab"), 0, SHT_STRTAB, 0 },
2712   { STRING_COMMA_LEN (".strtab"),   0, SHT_STRTAB, 0 },
2713   { STRING_COMMA_LEN (".symtab"),   0, SHT_SYMTAB, 0 },
2714   /* See struct bfd_elf_special_section declaration for the semantics of
2715      this special case where .prefix_length != strlen (.prefix).  */
2716   { ".stabstr",			5,  3, SHT_STRTAB, 0 },
2717   { NULL,			0,  0, 0,	   0 }
2718 };
2719 
2720 static const struct bfd_elf_special_section special_sections_t[] =
2721 {
2722   { STRING_COMMA_LEN (".text"),	 -2, SHT_PROGBITS, SHF_ALLOC + SHF_EXECINSTR },
2723   { STRING_COMMA_LEN (".tbss"),	 -2, SHT_NOBITS,   SHF_ALLOC + SHF_WRITE + SHF_TLS },
2724   { STRING_COMMA_LEN (".tdata"), -2, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE + SHF_TLS },
2725   { NULL,		      0,  0, 0,		   0 }
2726 };
2727 
2728 static const struct bfd_elf_special_section special_sections_z[] =
2729 {
2730   { STRING_COMMA_LEN (".zdebug_line"),	  0, SHT_PROGBITS, 0 },
2731   { STRING_COMMA_LEN (".zdebug_info"),	  0, SHT_PROGBITS, 0 },
2732   { STRING_COMMA_LEN (".zdebug_abbrev"),  0, SHT_PROGBITS, 0 },
2733   { STRING_COMMA_LEN (".zdebug_aranges"), 0, SHT_PROGBITS, 0 },
2734   { NULL,		      0,  0, 0,		   0 }
2735 };
2736 
2737 static const struct bfd_elf_special_section * const special_sections[] =
2738 {
2739   special_sections_b,		/* 'b' */
2740   special_sections_c,		/* 'c' */
2741   special_sections_d,		/* 'd' */
2742   NULL,				/* 'e' */
2743   special_sections_f,		/* 'f' */
2744   special_sections_g,		/* 'g' */
2745   special_sections_h,		/* 'h' */
2746   special_sections_i,		/* 'i' */
2747   NULL,				/* 'j' */
2748   NULL,				/* 'k' */
2749   special_sections_l,		/* 'l' */
2750   NULL,				/* 'm' */
2751   special_sections_n,		/* 'n' */
2752   NULL,				/* 'o' */
2753   special_sections_p,		/* 'p' */
2754   NULL,				/* 'q' */
2755   special_sections_r,		/* 'r' */
2756   special_sections_s,		/* 's' */
2757   special_sections_t,		/* 't' */
2758   NULL,				/* 'u' */
2759   NULL,				/* 'v' */
2760   NULL,				/* 'w' */
2761   NULL,				/* 'x' */
2762   NULL,				/* 'y' */
2763   special_sections_z		/* 'z' */
2764 };
2765 
2766 const struct bfd_elf_special_section *
2767 _bfd_elf_get_special_section (const char *name,
2768 			      const struct bfd_elf_special_section *spec,
2769 			      unsigned int rela)
2770 {
2771   int i;
2772   int len;
2773 
2774   len = strlen (name);
2775 
2776   for (i = 0; spec[i].prefix != NULL; i++)
2777     {
2778       int suffix_len;
2779       int prefix_len = spec[i].prefix_length;
2780 
2781       if (len < prefix_len)
2782 	continue;
2783       if (memcmp (name, spec[i].prefix, prefix_len) != 0)
2784 	continue;
2785 
2786       suffix_len = spec[i].suffix_length;
2787       if (suffix_len <= 0)
2788 	{
2789 	  if (name[prefix_len] != 0)
2790 	    {
2791 	      if (suffix_len == 0)
2792 		continue;
2793 	      if (name[prefix_len] != '.'
2794 		  && (suffix_len == -2
2795 		      || (rela && spec[i].type == SHT_REL)))
2796 		continue;
2797 	    }
2798 	}
2799       else
2800 	{
2801 	  if (len < prefix_len + suffix_len)
2802 	    continue;
2803 	  if (memcmp (name + len - suffix_len,
2804 		      spec[i].prefix + prefix_len,
2805 		      suffix_len) != 0)
2806 	    continue;
2807 	}
2808       return &spec[i];
2809     }
2810 
2811   return NULL;
2812 }
2813 
2814 const struct bfd_elf_special_section *
2815 _bfd_elf_get_sec_type_attr (bfd *abfd, asection *sec)
2816 {
2817   int i;
2818   const struct bfd_elf_special_section *spec;
2819   const struct elf_backend_data *bed;
2820 
2821   /* See if this is one of the special sections.  */
2822   if (sec->name == NULL)
2823     return NULL;
2824 
2825   bed = get_elf_backend_data (abfd);
2826   spec = bed->special_sections;
2827   if (spec)
2828     {
2829       spec = _bfd_elf_get_special_section (sec->name,
2830 					   bed->special_sections,
2831 					   sec->use_rela_p);
2832       if (spec != NULL)
2833 	return spec;
2834     }
2835 
2836   if (sec->name[0] != '.')
2837     return NULL;
2838 
2839   i = sec->name[1] - 'b';
2840   if (i < 0 || i > 'z' - 'b')
2841     return NULL;
2842 
2843   spec = special_sections[i];
2844 
2845   if (spec == NULL)
2846     return NULL;
2847 
2848   return _bfd_elf_get_special_section (sec->name, spec, sec->use_rela_p);
2849 }
2850 
2851 bool
2852 _bfd_elf_new_section_hook (bfd *abfd, asection *sec)
2853 {
2854   struct bfd_elf_section_data *sdata;
2855   const struct elf_backend_data *bed;
2856   const struct bfd_elf_special_section *ssect;
2857 
2858   sdata = (struct bfd_elf_section_data *) sec->used_by_bfd;
2859   if (sdata == NULL)
2860     {
2861       sdata = (struct bfd_elf_section_data *) bfd_zalloc (abfd,
2862 							  sizeof (*sdata));
2863       if (sdata == NULL)
2864 	return false;
2865       sec->used_by_bfd = sdata;
2866     }
2867 
2868   /* Indicate whether or not this section should use RELA relocations.  */
2869   bed = get_elf_backend_data (abfd);
2870   sec->use_rela_p = bed->default_use_rela_p;
2871 
2872   /* Set up ELF section type and flags for newly created sections, if
2873      there is an ABI mandated section.  */
2874   ssect = (*bed->get_sec_type_attr) (abfd, sec);
2875   if (ssect != NULL)
2876     {
2877       elf_section_type (sec) = ssect->type;
2878       elf_section_flags (sec) = ssect->attr;
2879     }
2880 
2881   return _bfd_generic_new_section_hook (abfd, sec);
2882 }
2883 
2884 /* Create a new bfd section from an ELF program header.
2885 
2886    Since program segments have no names, we generate a synthetic name
2887    of the form segment<NUM>, where NUM is generally the index in the
2888    program header table.  For segments that are split (see below) we
2889    generate the names segment<NUM>a and segment<NUM>b.
2890 
2891    Note that some program segments may have a file size that is different than
2892    (less than) the memory size.  All this means is that at execution the
2893    system must allocate the amount of memory specified by the memory size,
2894    but only initialize it with the first "file size" bytes read from the
2895    file.  This would occur for example, with program segments consisting
2896    of combined data+bss.
2897 
2898    To handle the above situation, this routine generates TWO bfd sections
2899    for the single program segment.  The first has the length specified by
2900    the file size of the segment, and the second has the length specified
2901    by the difference between the two sizes.  In effect, the segment is split
2902    into its initialized and uninitialized parts.  */
2903 
2904 bool
2905 _bfd_elf_make_section_from_phdr (bfd *abfd,
2906 				 Elf_Internal_Phdr *hdr,
2907 				 int hdr_index,
2908 				 const char *type_name)
2909 {
2910   asection *newsect;
2911   char *name;
2912   char namebuf[64];
2913   size_t len;
2914   int split;
2915   unsigned int opb = bfd_octets_per_byte (abfd, NULL);
2916 
2917   split = ((hdr->p_memsz > 0)
2918 	    && (hdr->p_filesz > 0)
2919 	    && (hdr->p_memsz > hdr->p_filesz));
2920 
2921   if (hdr->p_filesz > 0)
2922     {
2923       sprintf (namebuf, "%s%d%s", type_name, hdr_index, split ? "a" : "");
2924       len = strlen (namebuf) + 1;
2925       name = (char *) bfd_alloc (abfd, len);
2926       if (!name)
2927 	return false;
2928       memcpy (name, namebuf, len);
2929       newsect = bfd_make_section (abfd, name);
2930       if (newsect == NULL)
2931 	return false;
2932       newsect->vma = hdr->p_vaddr / opb;
2933       newsect->lma = hdr->p_paddr / opb;
2934       newsect->size = hdr->p_filesz;
2935       newsect->filepos = hdr->p_offset;
2936       newsect->flags |= SEC_HAS_CONTENTS;
2937       newsect->alignment_power = bfd_log2 (hdr->p_align);
2938       if (hdr->p_type == PT_LOAD)
2939 	{
2940 	  newsect->flags |= SEC_ALLOC;
2941 	  newsect->flags |= SEC_LOAD;
2942 	  if (hdr->p_flags & PF_X)
2943 	    {
2944 	      /* FIXME: all we known is that it has execute PERMISSION,
2945 		 may be data.  */
2946 	      newsect->flags |= SEC_CODE;
2947 	    }
2948 	}
2949       if (!(hdr->p_flags & PF_W))
2950 	{
2951 	  newsect->flags |= SEC_READONLY;
2952 	}
2953     }
2954 
2955   if (hdr->p_memsz > hdr->p_filesz)
2956     {
2957       bfd_vma align;
2958 
2959       sprintf (namebuf, "%s%d%s", type_name, hdr_index, split ? "b" : "");
2960       len = strlen (namebuf) + 1;
2961       name = (char *) bfd_alloc (abfd, len);
2962       if (!name)
2963 	return false;
2964       memcpy (name, namebuf, len);
2965       newsect = bfd_make_section (abfd, name);
2966       if (newsect == NULL)
2967 	return false;
2968       newsect->vma = (hdr->p_vaddr + hdr->p_filesz) / opb;
2969       newsect->lma = (hdr->p_paddr + hdr->p_filesz) / opb;
2970       newsect->size = hdr->p_memsz - hdr->p_filesz;
2971       newsect->filepos = hdr->p_offset + hdr->p_filesz;
2972       align = newsect->vma & -newsect->vma;
2973       if (align == 0 || align > hdr->p_align)
2974 	align = hdr->p_align;
2975       newsect->alignment_power = bfd_log2 (align);
2976       if (hdr->p_type == PT_LOAD)
2977 	{
2978 	  newsect->flags |= SEC_ALLOC;
2979 	  if (hdr->p_flags & PF_X)
2980 	    newsect->flags |= SEC_CODE;
2981 	}
2982       if (!(hdr->p_flags & PF_W))
2983 	newsect->flags |= SEC_READONLY;
2984     }
2985 
2986   return true;
2987 }
2988 
2989 static bool
2990 _bfd_elf_core_find_build_id (bfd *templ, bfd_vma offset)
2991 {
2992   /* The return value is ignored.  Build-ids are considered optional.  */
2993   if (templ->xvec->flavour == bfd_target_elf_flavour)
2994     return (*get_elf_backend_data (templ)->elf_backend_core_find_build_id)
2995       (templ, offset);
2996   return false;
2997 }
2998 
2999 bool
3000 bfd_section_from_phdr (bfd *abfd, Elf_Internal_Phdr *hdr, int hdr_index)
3001 {
3002   const struct elf_backend_data *bed;
3003 
3004   switch (hdr->p_type)
3005     {
3006     case PT_NULL:
3007       return _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index, "null");
3008 
3009     case PT_LOAD:
3010       if (! _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index, "load"))
3011 	return false;
3012       if (bfd_get_format (abfd) == bfd_core && abfd->build_id == NULL)
3013 	_bfd_elf_core_find_build_id (abfd, hdr->p_offset);
3014       return true;
3015 
3016     case PT_DYNAMIC:
3017       return _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index, "dynamic");
3018 
3019     case PT_INTERP:
3020       return _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index, "interp");
3021 
3022     case PT_NOTE:
3023       if (! _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index, "note"))
3024 	return false;
3025       if (! elf_read_notes (abfd, hdr->p_offset, hdr->p_filesz,
3026 			    hdr->p_align))
3027 	return false;
3028       return true;
3029 
3030     case PT_SHLIB:
3031       return _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index, "shlib");
3032 
3033     case PT_PHDR:
3034       return _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index, "phdr");
3035 
3036     case PT_GNU_EH_FRAME:
3037       return _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index,
3038 					      "eh_frame_hdr");
3039 
3040     case PT_GNU_STACK:
3041       return _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index, "stack");
3042 
3043     case PT_GNU_RELRO:
3044       return _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index, "relro");
3045 
3046     case PT_GNU_SFRAME:
3047       return _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index,
3048 					      "sframe");
3049 
3050     default:
3051       /* Check for any processor-specific program segment types.  */
3052       bed = get_elf_backend_data (abfd);
3053       return bed->elf_backend_section_from_phdr (abfd, hdr, hdr_index, "proc");
3054     }
3055 }
3056 
3057 /* Return the REL_HDR for SEC, assuming there is only a single one, either
3058    REL or RELA.  */
3059 
3060 Elf_Internal_Shdr *
3061 _bfd_elf_single_rel_hdr (asection *sec)
3062 {
3063   if (elf_section_data (sec)->rel.hdr)
3064     {
3065       BFD_ASSERT (elf_section_data (sec)->rela.hdr == NULL);
3066       return elf_section_data (sec)->rel.hdr;
3067     }
3068   else
3069     return elf_section_data (sec)->rela.hdr;
3070 }
3071 
3072 static bool
3073 _bfd_elf_set_reloc_sh_name (bfd *abfd,
3074 			    Elf_Internal_Shdr *rel_hdr,
3075 			    const char *sec_name,
3076 			    bool use_rela_p)
3077 {
3078   char *name = (char *) bfd_alloc (abfd,
3079 				   sizeof ".rela" + strlen (sec_name));
3080   if (name == NULL)
3081     return false;
3082 
3083   sprintf (name, "%s%s", use_rela_p ? ".rela" : ".rel", sec_name);
3084   rel_hdr->sh_name =
3085     (unsigned int) _bfd_elf_strtab_add (elf_shstrtab (abfd), name,
3086 					false);
3087   if (rel_hdr->sh_name == (unsigned int) -1)
3088     return false;
3089 
3090   return true;
3091 }
3092 
3093 /* Allocate and initialize a section-header for a new reloc section,
3094    containing relocations against ASECT.  It is stored in RELDATA.  If
3095    USE_RELA_P is TRUE, we use RELA relocations; otherwise, we use REL
3096    relocations.  */
3097 
3098 static bool
3099 _bfd_elf_init_reloc_shdr (bfd *abfd,
3100 			  struct bfd_elf_section_reloc_data *reldata,
3101 			  const char *sec_name,
3102 			  bool use_rela_p,
3103 			  bool delay_st_name_p)
3104 {
3105   Elf_Internal_Shdr *rel_hdr;
3106   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
3107 
3108   BFD_ASSERT (reldata->hdr == NULL);
3109   rel_hdr = bfd_zalloc (abfd, sizeof (*rel_hdr));
3110   reldata->hdr = rel_hdr;
3111 
3112   if (delay_st_name_p)
3113     rel_hdr->sh_name = (unsigned int) -1;
3114   else if (!_bfd_elf_set_reloc_sh_name (abfd, rel_hdr, sec_name,
3115 					use_rela_p))
3116     return false;
3117   rel_hdr->sh_type = use_rela_p ? SHT_RELA : SHT_REL;
3118   rel_hdr->sh_entsize = (use_rela_p
3119 			 ? bed->s->sizeof_rela
3120 			 : bed->s->sizeof_rel);
3121   rel_hdr->sh_addralign = (bfd_vma) 1 << bed->s->log_file_align;
3122   rel_hdr->sh_flags = 0;
3123   rel_hdr->sh_addr = 0;
3124   rel_hdr->sh_size = 0;
3125   rel_hdr->sh_offset = 0;
3126 
3127   return true;
3128 }
3129 
3130 /* Return the default section type based on the passed in section flags.  */
3131 
3132 int
3133 bfd_elf_get_default_section_type (flagword flags)
3134 {
3135   if ((flags & (SEC_ALLOC | SEC_IS_COMMON)) != 0
3136       && (flags & (SEC_LOAD | SEC_HAS_CONTENTS)) == 0)
3137     return SHT_NOBITS;
3138   return SHT_PROGBITS;
3139 }
3140 
3141 struct fake_section_arg
3142 {
3143   struct bfd_link_info *link_info;
3144   bool failed;
3145 };
3146 
3147 /* Set up an ELF internal section header for a section.  */
3148 
3149 static void
3150 elf_fake_sections (bfd *abfd, asection *asect, void *fsarg)
3151 {
3152   struct fake_section_arg *arg = (struct fake_section_arg *)fsarg;
3153   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
3154   struct bfd_elf_section_data *esd = elf_section_data (asect);
3155   Elf_Internal_Shdr *this_hdr;
3156   unsigned int sh_type;
3157   const char *name = asect->name;
3158   bool delay_st_name_p = false;
3159   bfd_vma mask;
3160 
3161   if (arg->failed)
3162     {
3163       /* We already failed; just get out of the bfd_map_over_sections
3164 	 loop.  */
3165       return;
3166     }
3167 
3168   this_hdr = &esd->this_hdr;
3169 
3170   /* ld: compress DWARF debug sections with names: .debug_*.  */
3171   if (arg->link_info
3172       && (abfd->flags & BFD_COMPRESS) != 0
3173       && (asect->flags & SEC_DEBUGGING) != 0
3174       && name[1] == 'd'
3175       && name[6] == '_')
3176     {
3177       /* If this section will be compressed, delay adding section
3178 	 name to section name section after it is compressed in
3179 	 _bfd_elf_assign_file_positions_for_non_load.  */
3180       delay_st_name_p = true;
3181     }
3182 
3183   if (delay_st_name_p)
3184     this_hdr->sh_name = (unsigned int) -1;
3185   else
3186     {
3187       this_hdr->sh_name
3188 	= (unsigned int) _bfd_elf_strtab_add (elf_shstrtab (abfd),
3189 					      name, false);
3190       if (this_hdr->sh_name == (unsigned int) -1)
3191 	{
3192 	  arg->failed = true;
3193 	  return;
3194 	}
3195     }
3196 
3197   /* Don't clear sh_flags. Assembler may set additional bits.  */
3198 
3199   if ((asect->flags & SEC_ALLOC) != 0
3200       || asect->user_set_vma)
3201     this_hdr->sh_addr = asect->vma * bfd_octets_per_byte (abfd, asect);
3202   else
3203     this_hdr->sh_addr = 0;
3204 
3205   this_hdr->sh_offset = 0;
3206   this_hdr->sh_size = asect->size;
3207   this_hdr->sh_link = 0;
3208   /* PR 17512: file: 0eb809fe, 8b0535ee.  */
3209   if (asect->alignment_power >= (sizeof (bfd_vma) * 8) - 1)
3210     {
3211       _bfd_error_handler
3212 	/* xgettext:c-format */
3213 	(_("%pB: error: alignment power %d of section `%pA' is too big"),
3214 	 abfd, asect->alignment_power, asect);
3215       arg->failed = true;
3216       return;
3217     }
3218   /* Set sh_addralign to the highest power of two given by alignment
3219      consistent with the section VMA.  Linker scripts can force VMA.  */
3220   mask = ((bfd_vma) 1 << asect->alignment_power) | this_hdr->sh_addr;
3221   this_hdr->sh_addralign = mask & -mask;
3222   /* The sh_entsize and sh_info fields may have been set already by
3223      copy_private_section_data.  */
3224 
3225   this_hdr->bfd_section = asect;
3226   this_hdr->contents = NULL;
3227 
3228   /* If the section type is unspecified, we set it based on
3229      asect->flags.  */
3230   if (asect->type != 0)
3231     sh_type = asect->type;
3232   else if ((asect->flags & SEC_GROUP) != 0)
3233     sh_type = SHT_GROUP;
3234   else
3235     sh_type = bfd_elf_get_default_section_type (asect->flags);
3236 
3237   if (this_hdr->sh_type == SHT_NULL)
3238     this_hdr->sh_type = sh_type;
3239   else if (this_hdr->sh_type == SHT_NOBITS
3240 	   && sh_type == SHT_PROGBITS
3241 	   && (asect->flags & SEC_ALLOC) != 0)
3242     {
3243       /* Warn if we are changing a NOBITS section to PROGBITS, but
3244 	 allow the link to proceed.  This can happen when users link
3245 	 non-bss input sections to bss output sections, or emit data
3246 	 to a bss output section via a linker script.  */
3247       _bfd_error_handler
3248 	(_("warning: section `%pA' type changed to PROGBITS"), asect);
3249       this_hdr->sh_type = sh_type;
3250     }
3251 
3252   switch (this_hdr->sh_type)
3253     {
3254     default:
3255       break;
3256 
3257     case SHT_STRTAB:
3258     case SHT_NOTE:
3259     case SHT_NOBITS:
3260     case SHT_PROGBITS:
3261       break;
3262 
3263     case SHT_INIT_ARRAY:
3264     case SHT_FINI_ARRAY:
3265     case SHT_PREINIT_ARRAY:
3266       this_hdr->sh_entsize = bed->s->arch_size / 8;
3267       break;
3268 
3269     case SHT_HASH:
3270       this_hdr->sh_entsize = bed->s->sizeof_hash_entry;
3271       break;
3272 
3273     case SHT_DYNSYM:
3274       this_hdr->sh_entsize = bed->s->sizeof_sym;
3275       break;
3276 
3277     case SHT_DYNAMIC:
3278       this_hdr->sh_entsize = bed->s->sizeof_dyn;
3279       break;
3280 
3281     case SHT_RELA:
3282       if (get_elf_backend_data (abfd)->may_use_rela_p)
3283 	this_hdr->sh_entsize = bed->s->sizeof_rela;
3284       break;
3285 
3286      case SHT_REL:
3287       if (get_elf_backend_data (abfd)->may_use_rel_p)
3288 	this_hdr->sh_entsize = bed->s->sizeof_rel;
3289       break;
3290 
3291      case SHT_GNU_versym:
3292       this_hdr->sh_entsize = sizeof (Elf_External_Versym);
3293       break;
3294 
3295      case SHT_GNU_verdef:
3296       this_hdr->sh_entsize = 0;
3297       /* objcopy or strip will copy over sh_info, but may not set
3298 	 cverdefs.  The linker will set cverdefs, but sh_info will be
3299 	 zero.  */
3300       if (this_hdr->sh_info == 0)
3301 	this_hdr->sh_info = elf_tdata (abfd)->cverdefs;
3302       else
3303 	BFD_ASSERT (elf_tdata (abfd)->cverdefs == 0
3304 		    || this_hdr->sh_info == elf_tdata (abfd)->cverdefs);
3305       break;
3306 
3307     case SHT_GNU_verneed:
3308       this_hdr->sh_entsize = 0;
3309       /* objcopy or strip will copy over sh_info, but may not set
3310 	 cverrefs.  The linker will set cverrefs, but sh_info will be
3311 	 zero.  */
3312       if (this_hdr->sh_info == 0)
3313 	this_hdr->sh_info = elf_tdata (abfd)->cverrefs;
3314       else
3315 	BFD_ASSERT (elf_tdata (abfd)->cverrefs == 0
3316 		    || this_hdr->sh_info == elf_tdata (abfd)->cverrefs);
3317       break;
3318 
3319     case SHT_GROUP:
3320       this_hdr->sh_entsize = GRP_ENTRY_SIZE;
3321       break;
3322 
3323     case SHT_GNU_HASH:
3324       this_hdr->sh_entsize = bed->s->arch_size == 64 ? 0 : 4;
3325       break;
3326     }
3327 
3328   if ((asect->flags & SEC_ALLOC) != 0)
3329     this_hdr->sh_flags |= SHF_ALLOC;
3330   if ((asect->flags & SEC_READONLY) == 0)
3331     this_hdr->sh_flags |= SHF_WRITE;
3332   if ((asect->flags & SEC_CODE) != 0)
3333     this_hdr->sh_flags |= SHF_EXECINSTR;
3334   if ((asect->flags & SEC_MERGE) != 0)
3335     {
3336       this_hdr->sh_flags |= SHF_MERGE;
3337       this_hdr->sh_entsize = asect->entsize;
3338     }
3339   if ((asect->flags & SEC_STRINGS) != 0)
3340     this_hdr->sh_flags |= SHF_STRINGS;
3341   if ((asect->flags & SEC_GROUP) == 0 && elf_group_name (asect) != NULL)
3342     this_hdr->sh_flags |= SHF_GROUP;
3343   if ((asect->flags & SEC_THREAD_LOCAL) != 0)
3344     {
3345       this_hdr->sh_flags |= SHF_TLS;
3346       if (asect->size == 0
3347 	  && (asect->flags & SEC_HAS_CONTENTS) == 0)
3348 	{
3349 	  struct bfd_link_order *o = asect->map_tail.link_order;
3350 
3351 	  this_hdr->sh_size = 0;
3352 	  if (o != NULL)
3353 	    {
3354 	      this_hdr->sh_size = o->offset + o->size;
3355 	      if (this_hdr->sh_size != 0)
3356 		this_hdr->sh_type = SHT_NOBITS;
3357 	    }
3358 	}
3359     }
3360   if ((asect->flags & (SEC_GROUP | SEC_EXCLUDE)) == SEC_EXCLUDE)
3361     this_hdr->sh_flags |= SHF_EXCLUDE;
3362 
3363   /* If the section has relocs, set up a section header for the
3364      SHT_REL[A] section.  If two relocation sections are required for
3365      this section, it is up to the processor-specific back-end to
3366      create the other.  */
3367   if ((asect->flags & SEC_RELOC) != 0)
3368     {
3369       /* When doing a relocatable link, create both REL and RELA sections if
3370 	 needed.  */
3371       if (arg->link_info
3372 	  /* Do the normal setup if we wouldn't create any sections here.  */
3373 	  && esd->rel.count + esd->rela.count > 0
3374 	  && (bfd_link_relocatable (arg->link_info)
3375 	      || arg->link_info->emitrelocations))
3376 	{
3377 	  if (esd->rel.count && esd->rel.hdr == NULL
3378 	      && !_bfd_elf_init_reloc_shdr (abfd, &esd->rel, name,
3379 					    false, delay_st_name_p))
3380 	    {
3381 	      arg->failed = true;
3382 	      return;
3383 	    }
3384 	  if (esd->rela.count && esd->rela.hdr == NULL
3385 	      && !_bfd_elf_init_reloc_shdr (abfd, &esd->rela, name,
3386 					    true, delay_st_name_p))
3387 	    {
3388 	      arg->failed = true;
3389 	      return;
3390 	    }
3391 	}
3392       else if (!_bfd_elf_init_reloc_shdr (abfd,
3393 					  (asect->use_rela_p
3394 					   ? &esd->rela : &esd->rel),
3395 					  name,
3396 					  asect->use_rela_p,
3397 					  delay_st_name_p))
3398 	{
3399 	  arg->failed = true;
3400 	  return;
3401 	}
3402     }
3403 
3404   /* Check for processor-specific section types.  */
3405   sh_type = this_hdr->sh_type;
3406   if (bed->elf_backend_fake_sections
3407       && !(*bed->elf_backend_fake_sections) (abfd, this_hdr, asect))
3408     {
3409       arg->failed = true;
3410       return;
3411     }
3412 
3413   if (sh_type == SHT_NOBITS && asect->size != 0)
3414     {
3415       /* Don't change the header type from NOBITS if we are being
3416 	 called for objcopy --only-keep-debug.  */
3417       this_hdr->sh_type = sh_type;
3418     }
3419 }
3420 
3421 /* Fill in the contents of a SHT_GROUP section.  Called from
3422    _bfd_elf_compute_section_file_positions for gas, objcopy, and
3423    when ELF targets use the generic linker, ld.  Called for ld -r
3424    from bfd_elf_final_link.  */
3425 
3426 void
3427 bfd_elf_set_group_contents (bfd *abfd, asection *sec, void *failedptrarg)
3428 {
3429   bool *failedptr = (bool *) failedptrarg;
3430   asection *elt, *first;
3431   unsigned char *loc;
3432   bool gas;
3433 
3434   /* Ignore linker created group section.  See elfNN_ia64_object_p in
3435      elfxx-ia64.c.  */
3436   if ((sec->flags & (SEC_GROUP | SEC_LINKER_CREATED)) != SEC_GROUP
3437       || sec->size == 0
3438       || *failedptr)
3439     return;
3440 
3441   if (elf_section_data (sec)->this_hdr.sh_info == 0)
3442     {
3443       unsigned long symindx = 0;
3444 
3445       /* elf_group_id will have been set up by objcopy and the
3446 	 generic linker.  */
3447       if (elf_group_id (sec) != NULL)
3448 	symindx = elf_group_id (sec)->udata.i;
3449 
3450       if (symindx == 0)
3451 	{
3452 	  /* If called from the assembler, swap_out_syms will have set up
3453 	     elf_section_syms.
3454 	     PR 25699: A corrupt input file could contain bogus group info.  */
3455 	  if (sec->index >= elf_num_section_syms (abfd)
3456 	      || elf_section_syms (abfd)[sec->index] == NULL)
3457 	    {
3458 	      *failedptr = true;
3459 	      return;
3460 	    }
3461 	  symindx = elf_section_syms (abfd)[sec->index]->udata.i;
3462 	}
3463       elf_section_data (sec)->this_hdr.sh_info = symindx;
3464     }
3465   else if (elf_section_data (sec)->this_hdr.sh_info == (unsigned int) -2)
3466     {
3467       /* The ELF backend linker sets sh_info to -2 when the group
3468 	 signature symbol is global, and thus the index can't be
3469 	 set until all local symbols are output.  */
3470       asection *igroup;
3471       struct bfd_elf_section_data *sec_data;
3472       unsigned long symndx;
3473       unsigned long extsymoff;
3474       struct elf_link_hash_entry *h;
3475 
3476       /* The point of this little dance to the first SHF_GROUP section
3477 	 then back to the SHT_GROUP section is that this gets us to
3478 	 the SHT_GROUP in the input object.  */
3479       igroup = elf_sec_group (elf_next_in_group (sec));
3480       sec_data = elf_section_data (igroup);
3481       symndx = sec_data->this_hdr.sh_info;
3482       extsymoff = 0;
3483       if (!elf_bad_symtab (igroup->owner))
3484 	{
3485 	  Elf_Internal_Shdr *symtab_hdr;
3486 
3487 	  symtab_hdr = &elf_tdata (igroup->owner)->symtab_hdr;
3488 	  extsymoff = symtab_hdr->sh_info;
3489 	}
3490       h = elf_sym_hashes (igroup->owner)[symndx - extsymoff];
3491       while (h->root.type == bfd_link_hash_indirect
3492 	     || h->root.type == bfd_link_hash_warning)
3493 	h = (struct elf_link_hash_entry *) h->root.u.i.link;
3494 
3495       elf_section_data (sec)->this_hdr.sh_info = h->indx;
3496     }
3497 
3498   /* The contents won't be allocated for "ld -r" or objcopy.  */
3499   gas = true;
3500   if (sec->contents == NULL)
3501     {
3502       gas = false;
3503       sec->contents = (unsigned char *) bfd_alloc (abfd, sec->size);
3504 
3505       /* Arrange for the section to be written out.  */
3506       elf_section_data (sec)->this_hdr.contents = sec->contents;
3507       if (sec->contents == NULL)
3508 	{
3509 	  *failedptr = true;
3510 	  return;
3511 	}
3512     }
3513 
3514   loc = sec->contents + sec->size;
3515 
3516   /* Get the pointer to the first section in the group that gas
3517      squirreled away here.  objcopy arranges for this to be set to the
3518      start of the input section group.  */
3519   first = elt = elf_next_in_group (sec);
3520 
3521   /* First element is a flag word.  Rest of section is elf section
3522      indices for all the sections of the group.  Write them backwards
3523      just to keep the group in the same order as given in .section
3524      directives, not that it matters.  */
3525   while (elt != NULL)
3526     {
3527       asection *s;
3528 
3529       s = elt;
3530       if (!gas)
3531 	s = s->output_section;
3532       if (s != NULL
3533 	  && !bfd_is_abs_section (s))
3534 	{
3535 	  struct bfd_elf_section_data *elf_sec = elf_section_data (s);
3536 	  struct bfd_elf_section_data *input_elf_sec = elf_section_data (elt);
3537 
3538 	  if (elf_sec->rel.hdr != NULL
3539 	      && (gas
3540 		  || (input_elf_sec->rel.hdr != NULL
3541 		      && input_elf_sec->rel.hdr->sh_flags & SHF_GROUP) != 0))
3542 	    {
3543 	      elf_sec->rel.hdr->sh_flags |= SHF_GROUP;
3544 	      loc -= 4;
3545 	      if (loc == sec->contents)
3546 		break;
3547 	      H_PUT_32 (abfd, elf_sec->rel.idx, loc);
3548 	    }
3549 	  if (elf_sec->rela.hdr != NULL
3550 	      && (gas
3551 		  || (input_elf_sec->rela.hdr != NULL
3552 		      && input_elf_sec->rela.hdr->sh_flags & SHF_GROUP) != 0))
3553 	    {
3554 	      elf_sec->rela.hdr->sh_flags |= SHF_GROUP;
3555 	      loc -= 4;
3556 	      if (loc == sec->contents)
3557 		break;
3558 	      H_PUT_32 (abfd, elf_sec->rela.idx, loc);
3559 	    }
3560 	  loc -= 4;
3561 	  if (loc == sec->contents)
3562 	    break;
3563 	  H_PUT_32 (abfd, elf_sec->this_idx, loc);
3564 	}
3565       elt = elf_next_in_group (elt);
3566       if (elt == first)
3567 	break;
3568     }
3569 
3570   /* We should always get here with loc == sec->contents + 4, but it is
3571      possible to craft bogus SHT_GROUP sections that will cause segfaults
3572      in objcopy without checking loc here and in the loop above.  */
3573   if (loc == sec->contents)
3574     BFD_ASSERT (0);
3575   else
3576     {
3577       loc -= 4;
3578       if (loc != sec->contents)
3579 	{
3580 	  BFD_ASSERT (0);
3581 	  memset (sec->contents + 4, 0, loc - sec->contents);
3582 	  loc = sec->contents;
3583 	}
3584     }
3585 
3586   H_PUT_32 (abfd, sec->flags & SEC_LINK_ONCE ? GRP_COMDAT : 0, loc);
3587 }
3588 
3589 /* Given NAME, the name of a relocation section stripped of its
3590    .rel/.rela prefix, return the section in ABFD to which the
3591    relocations apply.  */
3592 
3593 asection *
3594 _bfd_elf_plt_get_reloc_section (bfd *abfd, const char *name)
3595 {
3596   /* If a target needs .got.plt section, relocations in rela.plt/rel.plt
3597      section likely apply to .got.plt or .got section.  */
3598   if (get_elf_backend_data (abfd)->want_got_plt
3599       && strcmp (name, ".plt") == 0)
3600     {
3601       asection *sec;
3602 
3603       name = ".got.plt";
3604       sec = bfd_get_section_by_name (abfd, name);
3605       if (sec != NULL)
3606 	return sec;
3607       name = ".got";
3608     }
3609 
3610   return bfd_get_section_by_name (abfd, name);
3611 }
3612 
3613 /* Return the section to which RELOC_SEC applies.  */
3614 
3615 static asection *
3616 elf_get_reloc_section (asection *reloc_sec)
3617 {
3618   const char *name;
3619   unsigned int type;
3620   bfd *abfd;
3621   const struct elf_backend_data *bed;
3622 
3623   type = elf_section_data (reloc_sec)->this_hdr.sh_type;
3624   if (type != SHT_REL && type != SHT_RELA)
3625     return NULL;
3626 
3627   /* We look up the section the relocs apply to by name.  */
3628   name = reloc_sec->name;
3629   if (!startswith (name, ".rel"))
3630     return NULL;
3631   name += 4;
3632   if (type == SHT_RELA && *name++ != 'a')
3633     return NULL;
3634 
3635   abfd = reloc_sec->owner;
3636   bed = get_elf_backend_data (abfd);
3637   return bed->get_reloc_section (abfd, name);
3638 }
3639 
3640 /* Assign all ELF section numbers.  The dummy first section is handled here
3641    too.  The link/info pointers for the standard section types are filled
3642    in here too, while we're at it.  LINK_INFO will be 0 when arriving
3643    here for gas, objcopy, and when using the generic ELF linker.  */
3644 
3645 static bool
3646 assign_section_numbers (bfd *abfd, struct bfd_link_info *link_info)
3647 {
3648   struct elf_obj_tdata *t = elf_tdata (abfd);
3649   asection *sec;
3650   unsigned int section_number;
3651   Elf_Internal_Shdr **i_shdrp;
3652   struct bfd_elf_section_data *d;
3653   bool need_symtab;
3654   size_t amt;
3655 
3656   section_number = 1;
3657 
3658   _bfd_elf_strtab_clear_all_refs (elf_shstrtab (abfd));
3659 
3660   /* SHT_GROUP sections are in relocatable files only.  */
3661   if (link_info == NULL || !link_info->resolve_section_groups)
3662     {
3663       size_t reloc_count = 0;
3664 
3665       /* Put SHT_GROUP sections first.  */
3666       for (sec = abfd->sections; sec != NULL; sec = sec->next)
3667 	{
3668 	  d = elf_section_data (sec);
3669 
3670 	  if (d->this_hdr.sh_type == SHT_GROUP)
3671 	    {
3672 	      if (sec->flags & SEC_LINKER_CREATED)
3673 		{
3674 		  /* Remove the linker created SHT_GROUP sections.  */
3675 		  bfd_section_list_remove (abfd, sec);
3676 		  abfd->section_count--;
3677 		}
3678 	      else
3679 		d->this_idx = section_number++;
3680 	    }
3681 
3682 	  /* Count relocations.  */
3683 	  reloc_count += sec->reloc_count;
3684 	}
3685 
3686       /* Set/clear HAS_RELOC depending on whether there are relocations.  */
3687       if (reloc_count == 0)
3688 	abfd->flags &= ~HAS_RELOC;
3689       else
3690 	abfd->flags |= HAS_RELOC;
3691     }
3692 
3693   for (sec = abfd->sections; sec; sec = sec->next)
3694     {
3695       d = elf_section_data (sec);
3696 
3697       if (d->this_hdr.sh_type != SHT_GROUP)
3698 	d->this_idx = section_number++;
3699       if (d->this_hdr.sh_name != (unsigned int) -1)
3700 	_bfd_elf_strtab_addref (elf_shstrtab (abfd), d->this_hdr.sh_name);
3701       if (d->rel.hdr)
3702 	{
3703 	  d->rel.idx = section_number++;
3704 	  if (d->rel.hdr->sh_name != (unsigned int) -1)
3705 	    _bfd_elf_strtab_addref (elf_shstrtab (abfd), d->rel.hdr->sh_name);
3706 	}
3707       else
3708 	d->rel.idx = 0;
3709 
3710       if (d->rela.hdr)
3711 	{
3712 	  d->rela.idx = section_number++;
3713 	  if (d->rela.hdr->sh_name != (unsigned int) -1)
3714 	    _bfd_elf_strtab_addref (elf_shstrtab (abfd), d->rela.hdr->sh_name);
3715 	}
3716       else
3717 	d->rela.idx = 0;
3718     }
3719 
3720   need_symtab = (bfd_get_symcount (abfd) > 0
3721 		 || (link_info == NULL
3722 		     && ((abfd->flags & (EXEC_P | DYNAMIC | HAS_RELOC))
3723 			 == HAS_RELOC)));
3724   if (need_symtab)
3725     {
3726       elf_onesymtab (abfd) = section_number++;
3727       _bfd_elf_strtab_addref (elf_shstrtab (abfd), t->symtab_hdr.sh_name);
3728       if (section_number > ((SHN_LORESERVE - 2) & 0xFFFF))
3729 	{
3730 	  elf_section_list *entry;
3731 
3732 	  BFD_ASSERT (elf_symtab_shndx_list (abfd) == NULL);
3733 
3734 	  entry = bfd_zalloc (abfd, sizeof (*entry));
3735 	  entry->ndx = section_number++;
3736 	  elf_symtab_shndx_list (abfd) = entry;
3737 	  entry->hdr.sh_name
3738 	    = (unsigned int) _bfd_elf_strtab_add (elf_shstrtab (abfd),
3739 						  ".symtab_shndx", false);
3740 	  if (entry->hdr.sh_name == (unsigned int) -1)
3741 	    return false;
3742 	}
3743       elf_strtab_sec (abfd) = section_number++;
3744       _bfd_elf_strtab_addref (elf_shstrtab (abfd), t->strtab_hdr.sh_name);
3745     }
3746 
3747   elf_shstrtab_sec (abfd) = section_number++;
3748   _bfd_elf_strtab_addref (elf_shstrtab (abfd), t->shstrtab_hdr.sh_name);
3749   elf_elfheader (abfd)->e_shstrndx = elf_shstrtab_sec (abfd);
3750 
3751   if (section_number >= SHN_LORESERVE)
3752     {
3753       /* xgettext:c-format */
3754       _bfd_error_handler (_("%pB: too many sections: %u"),
3755 			  abfd, section_number);
3756       return false;
3757     }
3758 
3759   elf_numsections (abfd) = section_number;
3760   elf_elfheader (abfd)->e_shnum = section_number;
3761 
3762   /* Set up the list of section header pointers, in agreement with the
3763      indices.  */
3764   amt = section_number * sizeof (Elf_Internal_Shdr *);
3765   i_shdrp = (Elf_Internal_Shdr **) bfd_zalloc (abfd, amt);
3766   if (i_shdrp == NULL)
3767     return false;
3768 
3769   i_shdrp[0] = (Elf_Internal_Shdr *) bfd_zalloc (abfd,
3770 						 sizeof (Elf_Internal_Shdr));
3771   if (i_shdrp[0] == NULL)
3772     {
3773       bfd_release (abfd, i_shdrp);
3774       return false;
3775     }
3776 
3777   elf_elfsections (abfd) = i_shdrp;
3778 
3779   i_shdrp[elf_shstrtab_sec (abfd)] = &t->shstrtab_hdr;
3780   if (need_symtab)
3781     {
3782       i_shdrp[elf_onesymtab (abfd)] = &t->symtab_hdr;
3783       if (elf_numsections (abfd) > (SHN_LORESERVE & 0xFFFF))
3784 	{
3785 	  elf_section_list * entry = elf_symtab_shndx_list (abfd);
3786 	  BFD_ASSERT (entry != NULL);
3787 	  i_shdrp[entry->ndx] = & entry->hdr;
3788 	  entry->hdr.sh_link = elf_onesymtab (abfd);
3789 	}
3790       i_shdrp[elf_strtab_sec (abfd)] = &t->strtab_hdr;
3791       t->symtab_hdr.sh_link = elf_strtab_sec (abfd);
3792     }
3793 
3794   for (sec = abfd->sections; sec; sec = sec->next)
3795     {
3796       asection *s;
3797 
3798       d = elf_section_data (sec);
3799 
3800       i_shdrp[d->this_idx] = &d->this_hdr;
3801       if (d->rel.idx != 0)
3802 	i_shdrp[d->rel.idx] = d->rel.hdr;
3803       if (d->rela.idx != 0)
3804 	i_shdrp[d->rela.idx] = d->rela.hdr;
3805 
3806       /* Fill in the sh_link and sh_info fields while we're at it.  */
3807 
3808       /* sh_link of a reloc section is the section index of the symbol
3809 	 table.  sh_info is the section index of the section to which
3810 	 the relocation entries apply.  */
3811       if (d->rel.idx != 0)
3812 	{
3813 	  d->rel.hdr->sh_link = elf_onesymtab (abfd);
3814 	  d->rel.hdr->sh_info = d->this_idx;
3815 	  d->rel.hdr->sh_flags |= SHF_INFO_LINK;
3816 	}
3817       if (d->rela.idx != 0)
3818 	{
3819 	  d->rela.hdr->sh_link = elf_onesymtab (abfd);
3820 	  d->rela.hdr->sh_info = d->this_idx;
3821 	  d->rela.hdr->sh_flags |= SHF_INFO_LINK;
3822 	}
3823 
3824       /* We need to set up sh_link for SHF_LINK_ORDER.  */
3825       if ((d->this_hdr.sh_flags & SHF_LINK_ORDER) != 0)
3826 	{
3827 	  s = elf_linked_to_section (sec);
3828 	  /* We can now have a NULL linked section pointer.
3829 	     This happens when the sh_link field is 0, which is done
3830 	     when a linked to section is discarded but the linking
3831 	     section has been retained for some reason.  */
3832 	  if (s)
3833 	    {
3834 	      /* Check discarded linkonce section.  */
3835 	      if (discarded_section (s))
3836 		{
3837 		  asection *kept;
3838 		  _bfd_error_handler
3839 		    /* xgettext:c-format */
3840 		    (_("%pB: sh_link of section `%pA' points to"
3841 		       " discarded section `%pA' of `%pB'"),
3842 		     abfd, d->this_hdr.bfd_section, s, s->owner);
3843 		  /* Point to the kept section if it has the same
3844 		     size as the discarded one.  */
3845 		  kept = _bfd_elf_check_kept_section (s, link_info);
3846 		  if (kept == NULL)
3847 		    {
3848 		      bfd_set_error (bfd_error_bad_value);
3849 		      return false;
3850 		    }
3851 		  s = kept;
3852 		}
3853 	      /* Handle objcopy. */
3854 	      else if (s->output_section == NULL)
3855 		{
3856 		  _bfd_error_handler
3857 		    /* xgettext:c-format */
3858 		    (_("%pB: sh_link of section `%pA' points to"
3859 		       " removed section `%pA' of `%pB'"),
3860 		     abfd, d->this_hdr.bfd_section, s, s->owner);
3861 		  bfd_set_error (bfd_error_bad_value);
3862 		  return false;
3863 		}
3864 	      s = s->output_section;
3865 	      d->this_hdr.sh_link = elf_section_data (s)->this_idx;
3866 	    }
3867 	}
3868 
3869       switch (d->this_hdr.sh_type)
3870 	{
3871 	case SHT_REL:
3872 	case SHT_RELA:
3873 	  /* A reloc section which we are treating as a normal BFD
3874 	     section.  sh_link is the section index of the symbol
3875 	     table.  sh_info is the section index of the section to
3876 	     which the relocation entries apply.  We assume that an
3877 	     allocated reloc section uses the dynamic symbol table
3878 	     if there is one.  Otherwise we guess the normal symbol
3879 	     table.  FIXME: How can we be sure?  */
3880 	  if (d->this_hdr.sh_link == 0 && (sec->flags & SEC_ALLOC) != 0)
3881 	    {
3882 	      s = bfd_get_section_by_name (abfd, ".dynsym");
3883 	      if (s != NULL)
3884 		d->this_hdr.sh_link = elf_section_data (s)->this_idx;
3885 	    }
3886 	  if (d->this_hdr.sh_link == 0)
3887 	    d->this_hdr.sh_link = elf_onesymtab (abfd);
3888 
3889 	  s = elf_get_reloc_section (sec);
3890 	  if (s != NULL)
3891 	    {
3892 	      d->this_hdr.sh_info = elf_section_data (s)->this_idx;
3893 	      d->this_hdr.sh_flags |= SHF_INFO_LINK;
3894 	    }
3895 	  break;
3896 
3897 	case SHT_STRTAB:
3898 	  /* We assume that a section named .stab*str is a stabs
3899 	     string section.  We look for a section with the same name
3900 	     but without the trailing ``str'', and set its sh_link
3901 	     field to point to this section.  */
3902 	  if (startswith (sec->name, ".stab")
3903 	      && strcmp (sec->name + strlen (sec->name) - 3, "str") == 0)
3904 	    {
3905 	      size_t len;
3906 	      char *alc;
3907 
3908 	      len = strlen (sec->name);
3909 	      alc = (char *) bfd_malloc (len - 2);
3910 	      if (alc == NULL)
3911 		return false;
3912 	      memcpy (alc, sec->name, len - 3);
3913 	      alc[len - 3] = '\0';
3914 	      s = bfd_get_section_by_name (abfd, alc);
3915 	      free (alc);
3916 	      if (s != NULL)
3917 		{
3918 		  elf_section_data (s)->this_hdr.sh_link = d->this_idx;
3919 
3920 		  /* This is a .stab section.  */
3921 		  elf_section_data (s)->this_hdr.sh_entsize = 12;
3922 		}
3923 	    }
3924 	  break;
3925 
3926 	case SHT_DYNAMIC:
3927 	case SHT_DYNSYM:
3928 	case SHT_GNU_verneed:
3929 	case SHT_GNU_verdef:
3930 	  /* sh_link is the section header index of the string table
3931 	     used for the dynamic entries, or the symbol table, or the
3932 	     version strings.  */
3933 	  s = bfd_get_section_by_name (abfd, ".dynstr");
3934 	  if (s != NULL)
3935 	    d->this_hdr.sh_link = elf_section_data (s)->this_idx;
3936 	  break;
3937 
3938 	case SHT_GNU_LIBLIST:
3939 	  /* sh_link is the section header index of the prelink library
3940 	     list used for the dynamic entries, or the symbol table, or
3941 	     the version strings.  */
3942 	  s = bfd_get_section_by_name (abfd, ((sec->flags & SEC_ALLOC)
3943 					      ? ".dynstr" : ".gnu.libstr"));
3944 	  if (s != NULL)
3945 	    d->this_hdr.sh_link = elf_section_data (s)->this_idx;
3946 	  break;
3947 
3948 	case SHT_HASH:
3949 	case SHT_GNU_HASH:
3950 	case SHT_GNU_versym:
3951 	  /* sh_link is the section header index of the symbol table
3952 	     this hash table or version table is for.  */
3953 	  s = bfd_get_section_by_name (abfd, ".dynsym");
3954 	  if (s != NULL)
3955 	    d->this_hdr.sh_link = elf_section_data (s)->this_idx;
3956 	  break;
3957 
3958 	case SHT_GROUP:
3959 	  d->this_hdr.sh_link = elf_onesymtab (abfd);
3960 	}
3961     }
3962 
3963   /* Delay setting sh_name to _bfd_elf_write_object_contents so that
3964      _bfd_elf_assign_file_positions_for_non_load can convert DWARF
3965      debug section name from .debug_* to .zdebug_* if needed.  */
3966 
3967   return true;
3968 }
3969 
3970 static bool
3971 sym_is_global (bfd *abfd, asymbol *sym)
3972 {
3973   /* If the backend has a special mapping, use it.  */
3974   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
3975   if (bed->elf_backend_sym_is_global)
3976     return (*bed->elf_backend_sym_is_global) (abfd, sym);
3977 
3978   return ((sym->flags & (BSF_GLOBAL | BSF_WEAK | BSF_GNU_UNIQUE)) != 0
3979 	  || bfd_is_und_section (bfd_asymbol_section (sym))
3980 	  || bfd_is_com_section (bfd_asymbol_section (sym)));
3981 }
3982 
3983 /* Filter global symbols of ABFD to include in the import library.  All
3984    SYMCOUNT symbols of ABFD can be examined from their pointers in
3985    SYMS.  Pointers of symbols to keep should be stored contiguously at
3986    the beginning of that array.
3987 
3988    Returns the number of symbols to keep.  */
3989 
3990 unsigned int
3991 _bfd_elf_filter_global_symbols (bfd *abfd, struct bfd_link_info *info,
3992 				asymbol **syms, long symcount)
3993 {
3994   long src_count, dst_count = 0;
3995 
3996   for (src_count = 0; src_count < symcount; src_count++)
3997     {
3998       asymbol *sym = syms[src_count];
3999       char *name = (char *) bfd_asymbol_name (sym);
4000       struct bfd_link_hash_entry *h;
4001 
4002       if (!sym_is_global (abfd, sym))
4003 	continue;
4004 
4005       h = bfd_link_hash_lookup (info->hash, name, false, false, false);
4006       if (h == NULL)
4007 	continue;
4008       if (h->type != bfd_link_hash_defined && h->type != bfd_link_hash_defweak)
4009 	continue;
4010       if (h->linker_def || h->ldscript_def)
4011 	continue;
4012 
4013       syms[dst_count++] = sym;
4014     }
4015 
4016   syms[dst_count] = NULL;
4017 
4018   return dst_count;
4019 }
4020 
4021 /* Don't output section symbols for sections that are not going to be
4022    output, that are duplicates or there is no BFD section.  */
4023 
4024 static bool
4025 ignore_section_sym (bfd *abfd, asymbol *sym)
4026 {
4027   elf_symbol_type *type_ptr;
4028 
4029   if (sym == NULL)
4030     return false;
4031 
4032   if ((sym->flags & BSF_SECTION_SYM) == 0)
4033     return false;
4034 
4035   /* Ignore the section symbol if it isn't used.  */
4036   if ((sym->flags & BSF_SECTION_SYM_USED) == 0)
4037     return true;
4038 
4039   if (sym->section == NULL)
4040     return true;
4041 
4042   type_ptr = elf_symbol_from (sym);
4043   return ((type_ptr != NULL
4044 	   && type_ptr->internal_elf_sym.st_shndx != 0
4045 	   && bfd_is_abs_section (sym->section))
4046 	  || !(sym->section->owner == abfd
4047 	       || (sym->section->output_section != NULL
4048 		   && sym->section->output_section->owner == abfd
4049 		   && sym->section->output_offset == 0)
4050 	       || bfd_is_abs_section (sym->section)));
4051 }
4052 
4053 /* Map symbol from it's internal number to the external number, moving
4054    all local symbols to be at the head of the list.  */
4055 
4056 static bool
4057 elf_map_symbols (bfd *abfd, unsigned int *pnum_locals)
4058 {
4059   unsigned int symcount = bfd_get_symcount (abfd);
4060   asymbol **syms = bfd_get_outsymbols (abfd);
4061   asymbol **sect_syms;
4062   unsigned int num_locals = 0;
4063   unsigned int num_globals = 0;
4064   unsigned int num_locals2 = 0;
4065   unsigned int num_globals2 = 0;
4066   unsigned int max_index = 0;
4067   unsigned int idx;
4068   asection *asect;
4069   asymbol **new_syms;
4070   size_t amt;
4071 
4072 #ifdef DEBUG
4073   fprintf (stderr, "elf_map_symbols\n");
4074   fflush (stderr);
4075 #endif
4076 
4077   for (asect = abfd->sections; asect; asect = asect->next)
4078     {
4079       if (max_index < asect->index)
4080 	max_index = asect->index;
4081     }
4082 
4083   max_index++;
4084   amt = max_index * sizeof (asymbol *);
4085   sect_syms = (asymbol **) bfd_zalloc (abfd, amt);
4086   if (sect_syms == NULL)
4087     return false;
4088   elf_section_syms (abfd) = sect_syms;
4089   elf_num_section_syms (abfd) = max_index;
4090 
4091   /* Init sect_syms entries for any section symbols we have already
4092      decided to output.  */
4093   for (idx = 0; idx < symcount; idx++)
4094     {
4095       asymbol *sym = syms[idx];
4096 
4097       if ((sym->flags & BSF_SECTION_SYM) != 0
4098 	  && sym->value == 0
4099 	  && !ignore_section_sym (abfd, sym)
4100 	  && !bfd_is_abs_section (sym->section))
4101 	{
4102 	  asection *sec = sym->section;
4103 
4104 	  if (sec->owner != abfd)
4105 	    sec = sec->output_section;
4106 
4107 	  sect_syms[sec->index] = syms[idx];
4108 	}
4109     }
4110 
4111   /* Classify all of the symbols.  */
4112   for (idx = 0; idx < symcount; idx++)
4113     {
4114       if (sym_is_global (abfd, syms[idx]))
4115 	num_globals++;
4116       else if (!ignore_section_sym (abfd, syms[idx]))
4117 	num_locals++;
4118     }
4119 
4120   /* We will be adding a section symbol for each normal BFD section.  Most
4121      sections will already have a section symbol in outsymbols, but
4122      eg. SHT_GROUP sections will not, and we need the section symbol mapped
4123      at least in that case.  */
4124   for (asect = abfd->sections; asect; asect = asect->next)
4125     {
4126       asymbol *sym = asect->symbol;
4127       /* Don't include ignored section symbols.  */
4128       if (!ignore_section_sym (abfd, sym)
4129 	  && sect_syms[asect->index] == NULL)
4130 	{
4131 	  if (!sym_is_global (abfd, asect->symbol))
4132 	    num_locals++;
4133 	  else
4134 	    num_globals++;
4135 	}
4136     }
4137 
4138   /* Now sort the symbols so the local symbols are first.  */
4139   amt = (num_locals + num_globals) * sizeof (asymbol *);
4140   new_syms = (asymbol **) bfd_alloc (abfd, amt);
4141   if (new_syms == NULL)
4142     return false;
4143 
4144   for (idx = 0; idx < symcount; idx++)
4145     {
4146       asymbol *sym = syms[idx];
4147       unsigned int i;
4148 
4149       if (sym_is_global (abfd, sym))
4150 	i = num_locals + num_globals2++;
4151       /* Don't include ignored section symbols.  */
4152       else if (!ignore_section_sym (abfd, sym))
4153 	i = num_locals2++;
4154       else
4155 	continue;
4156       new_syms[i] = sym;
4157       sym->udata.i = i + 1;
4158     }
4159   for (asect = abfd->sections; asect; asect = asect->next)
4160     {
4161       asymbol *sym = asect->symbol;
4162       if (!ignore_section_sym (abfd, sym)
4163 	  && sect_syms[asect->index] == NULL)
4164 	{
4165 	  unsigned int i;
4166 
4167 	  sect_syms[asect->index] = sym;
4168 	  if (!sym_is_global (abfd, sym))
4169 	    i = num_locals2++;
4170 	  else
4171 	    i = num_locals + num_globals2++;
4172 	  new_syms[i] = sym;
4173 	  sym->udata.i = i + 1;
4174 	}
4175     }
4176 
4177   bfd_set_symtab (abfd, new_syms, num_locals + num_globals);
4178 
4179   *pnum_locals = num_locals;
4180   return true;
4181 }
4182 
4183 /* Align to the maximum file alignment that could be required for any
4184    ELF data structure.  */
4185 
4186 static inline file_ptr
4187 align_file_position (file_ptr off, int align)
4188 {
4189   return (off + align - 1) & ~(align - 1);
4190 }
4191 
4192 /* Assign a file position to a section, optionally aligning to the
4193    required section alignment.  */
4194 
4195 file_ptr
4196 _bfd_elf_assign_file_position_for_section (Elf_Internal_Shdr *i_shdrp,
4197 					   file_ptr offset,
4198 					   bool align)
4199 {
4200   if (align && i_shdrp->sh_addralign > 1)
4201     offset = BFD_ALIGN (offset, i_shdrp->sh_addralign & -i_shdrp->sh_addralign);
4202   i_shdrp->sh_offset = offset;
4203   if (i_shdrp->bfd_section != NULL)
4204     i_shdrp->bfd_section->filepos = offset;
4205   if (i_shdrp->sh_type != SHT_NOBITS)
4206     offset += i_shdrp->sh_size;
4207   return offset;
4208 }
4209 
4210 /* Compute the file positions we are going to put the sections at, and
4211    otherwise prepare to begin writing out the ELF file.  If LINK_INFO
4212    is not NULL, this is being called by the ELF backend linker.  */
4213 
4214 bool
4215 _bfd_elf_compute_section_file_positions (bfd *abfd,
4216 					 struct bfd_link_info *link_info)
4217 {
4218   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
4219   struct fake_section_arg fsargs;
4220   bool failed;
4221   struct elf_strtab_hash *strtab = NULL;
4222   Elf_Internal_Shdr *shstrtab_hdr;
4223   bool need_symtab;
4224 
4225   if (abfd->output_has_begun)
4226     return true;
4227 
4228   /* Do any elf backend specific processing first.  */
4229   if (bed->elf_backend_begin_write_processing)
4230     (*bed->elf_backend_begin_write_processing) (abfd, link_info);
4231 
4232   if (!(*bed->elf_backend_init_file_header) (abfd, link_info))
4233     return false;
4234 
4235   fsargs.failed = false;
4236   fsargs.link_info = link_info;
4237   bfd_map_over_sections (abfd, elf_fake_sections, &fsargs);
4238   if (fsargs.failed)
4239     return false;
4240 
4241   if (!assign_section_numbers (abfd, link_info))
4242     return false;
4243 
4244   /* The backend linker builds symbol table information itself.  */
4245   need_symtab = (link_info == NULL
4246 		 && (bfd_get_symcount (abfd) > 0
4247 		     || ((abfd->flags & (EXEC_P | DYNAMIC | HAS_RELOC))
4248 			 == HAS_RELOC)));
4249   if (need_symtab)
4250     {
4251       /* Non-zero if doing a relocatable link.  */
4252       int relocatable_p = ! (abfd->flags & (EXEC_P | DYNAMIC));
4253 
4254       if (! swap_out_syms (abfd, &strtab, relocatable_p, link_info))
4255 	return false;
4256     }
4257 
4258   failed = false;
4259   if (link_info == NULL)
4260     {
4261       bfd_map_over_sections (abfd, bfd_elf_set_group_contents, &failed);
4262       if (failed)
4263 	return false;
4264     }
4265 
4266   shstrtab_hdr = &elf_tdata (abfd)->shstrtab_hdr;
4267   /* sh_name was set in init_file_header.  */
4268   shstrtab_hdr->sh_type = SHT_STRTAB;
4269   shstrtab_hdr->sh_flags = bed->elf_strtab_flags;
4270   shstrtab_hdr->sh_addr = 0;
4271   /* sh_size is set in _bfd_elf_assign_file_positions_for_non_load.  */
4272   shstrtab_hdr->sh_entsize = 0;
4273   shstrtab_hdr->sh_link = 0;
4274   shstrtab_hdr->sh_info = 0;
4275   /* sh_offset is set in _bfd_elf_assign_file_positions_for_non_load.  */
4276   shstrtab_hdr->sh_addralign = 1;
4277 
4278   if (!assign_file_positions_except_relocs (abfd, link_info))
4279     return false;
4280 
4281   if (need_symtab)
4282     {
4283       file_ptr off;
4284       Elf_Internal_Shdr *hdr;
4285 
4286       off = elf_next_file_pos (abfd);
4287 
4288       hdr = & elf_symtab_hdr (abfd);
4289       off = _bfd_elf_assign_file_position_for_section (hdr, off, true);
4290 
4291       if (elf_symtab_shndx_list (abfd) != NULL)
4292 	{
4293 	  hdr = & elf_symtab_shndx_list (abfd)->hdr;
4294 	  if (hdr->sh_size != 0)
4295 	    off = _bfd_elf_assign_file_position_for_section (hdr, off, true);
4296 	  /* FIXME: What about other symtab_shndx sections in the list ?  */
4297 	}
4298 
4299       hdr = &elf_tdata (abfd)->strtab_hdr;
4300       off = _bfd_elf_assign_file_position_for_section (hdr, off, true);
4301 
4302       elf_next_file_pos (abfd) = off;
4303 
4304       /* Now that we know where the .strtab section goes, write it
4305 	 out.  */
4306       if (bfd_seek (abfd, hdr->sh_offset, SEEK_SET) != 0
4307 	  || ! _bfd_elf_strtab_emit (abfd, strtab))
4308 	return false;
4309       _bfd_elf_strtab_free (strtab);
4310     }
4311 
4312   abfd->output_has_begun = true;
4313 
4314   return true;
4315 }
4316 
4317 /* Retrieve .eh_frame_hdr.  Prior to size_dynamic_sections the
4318    function effectively returns whether --eh-frame-hdr is given on the
4319    command line.  After size_dynamic_sections the result reflects
4320    whether .eh_frame_hdr will actually be output (sizing isn't done
4321    until ldemul_after_allocation).  */
4322 
4323 static asection *
4324 elf_eh_frame_hdr (const struct bfd_link_info *info)
4325 {
4326   if (info != NULL && is_elf_hash_table (info->hash))
4327     return elf_hash_table (info)->eh_info.hdr_sec;
4328   return NULL;
4329 }
4330 
4331 /* Make an initial estimate of the size of the program header.  If we
4332    get the number wrong here, we'll redo section placement.  */
4333 
4334 static bfd_size_type
4335 get_program_header_size (bfd *abfd, struct bfd_link_info *info)
4336 {
4337   size_t segs;
4338   asection *s;
4339   const struct elf_backend_data *bed;
4340 
4341   /* Assume we will need exactly two PT_LOAD segments: one for text
4342      and one for data.  */
4343   segs = 2;
4344 
4345   s = bfd_get_section_by_name (abfd, ".interp");
4346   if (s != NULL && (s->flags & SEC_LOAD) != 0 && s->size != 0)
4347     {
4348       /* If we have a loadable interpreter section, we need a
4349 	 PT_INTERP segment.  In this case, assume we also need a
4350 	 PT_PHDR segment, although that may not be true for all
4351 	 targets.  */
4352       segs += 2;
4353     }
4354 
4355   if (bfd_get_section_by_name (abfd, ".dynamic") != NULL)
4356     {
4357       /* We need a PT_DYNAMIC segment.  */
4358       ++segs;
4359     }
4360 
4361   if (info != NULL && info->relro)
4362     {
4363       /* We need a PT_GNU_RELRO segment.  */
4364       ++segs;
4365     }
4366 
4367   if (elf_eh_frame_hdr (info))
4368     {
4369       /* We need a PT_GNU_EH_FRAME segment.  */
4370       ++segs;
4371     }
4372 
4373   if (elf_stack_flags (abfd))
4374     {
4375       /* We need a PT_GNU_STACK segment.  */
4376       ++segs;
4377     }
4378 
4379   if (elf_sframe (abfd))
4380     {
4381       /* We need a PT_GNU_SFRAME segment.  */
4382       ++segs;
4383     }
4384 
4385   s = bfd_get_section_by_name (abfd,
4386 			       NOTE_GNU_PROPERTY_SECTION_NAME);
4387   if (s != NULL && s->size != 0)
4388     {
4389       /* We need a PT_GNU_PROPERTY segment.  */
4390       ++segs;
4391     }
4392 
4393   for (s = abfd->sections; s != NULL; s = s->next)
4394     {
4395       if ((s->flags & SEC_LOAD) != 0
4396 	  && elf_section_type (s) == SHT_NOTE)
4397 	{
4398 	  unsigned int alignment_power;
4399 	  /* We need a PT_NOTE segment.  */
4400 	  ++segs;
4401 	  /* Try to create just one PT_NOTE segment for all adjacent
4402 	     loadable SHT_NOTE sections.  gABI requires that within a
4403 	     PT_NOTE segment (and also inside of each SHT_NOTE section)
4404 	     each note should have the same alignment.  So we check
4405 	     whether the sections are correctly aligned.  */
4406 	  alignment_power = s->alignment_power;
4407 	  while (s->next != NULL
4408 		 && s->next->alignment_power == alignment_power
4409 		 && (s->next->flags & SEC_LOAD) != 0
4410 		 && elf_section_type (s->next) == SHT_NOTE)
4411 	    s = s->next;
4412 	}
4413     }
4414 
4415   for (s = abfd->sections; s != NULL; s = s->next)
4416     {
4417       if (s->flags & SEC_THREAD_LOCAL)
4418 	{
4419 	  /* We need a PT_TLS segment.  */
4420 	  ++segs;
4421 	  break;
4422 	}
4423     }
4424 
4425   bed = get_elf_backend_data (abfd);
4426 
4427   if ((abfd->flags & D_PAGED) != 0
4428       && (elf_tdata (abfd)->has_gnu_osabi & elf_gnu_osabi_mbind) != 0)
4429     {
4430       /* Add a PT_GNU_MBIND segment for each mbind section.  */
4431       bfd_vma commonpagesize;
4432       unsigned int page_align_power;
4433 
4434       if (info != NULL)
4435 	commonpagesize = info->commonpagesize;
4436       else
4437 	commonpagesize = bed->commonpagesize;
4438       page_align_power = bfd_log2 (commonpagesize);
4439       for (s = abfd->sections; s != NULL; s = s->next)
4440 	if (elf_section_flags (s) & SHF_GNU_MBIND)
4441 	  {
4442 	    if (elf_section_data (s)->this_hdr.sh_info > PT_GNU_MBIND_NUM)
4443 	      {
4444 		_bfd_error_handler
4445 		  /* xgettext:c-format */
4446 		  (_("%pB: GNU_MBIND section `%pA' has invalid "
4447 		     "sh_info field: %d"),
4448 		   abfd, s, elf_section_data (s)->this_hdr.sh_info);
4449 		continue;
4450 	      }
4451 	    /* Align mbind section to page size.  */
4452 	    if (s->alignment_power < page_align_power)
4453 	      s->alignment_power = page_align_power;
4454 	    segs ++;
4455 	  }
4456     }
4457 
4458   /* Let the backend count up any program headers it might need.  */
4459   if (bed->elf_backend_additional_program_headers)
4460     {
4461       int a;
4462 
4463       a = (*bed->elf_backend_additional_program_headers) (abfd, info);
4464       if (a == -1)
4465 	abort ();
4466       segs += a;
4467     }
4468 
4469   return segs * bed->s->sizeof_phdr;
4470 }
4471 
4472 /* Find the segment that contains the output_section of section.  */
4473 
4474 Elf_Internal_Phdr *
4475 _bfd_elf_find_segment_containing_section (bfd * abfd, asection * section)
4476 {
4477   struct elf_segment_map *m;
4478   Elf_Internal_Phdr *p;
4479 
4480   for (m = elf_seg_map (abfd), p = elf_tdata (abfd)->phdr;
4481        m != NULL;
4482        m = m->next, p++)
4483     {
4484       int i;
4485 
4486       for (i = m->count - 1; i >= 0; i--)
4487 	if (m->sections[i] == section)
4488 	  return p;
4489     }
4490 
4491   return NULL;
4492 }
4493 
4494 /* Create a mapping from a set of sections to a program segment.  */
4495 
4496 static struct elf_segment_map *
4497 make_mapping (bfd *abfd,
4498 	      asection **sections,
4499 	      unsigned int from,
4500 	      unsigned int to,
4501 	      bool phdr)
4502 {
4503   struct elf_segment_map *m;
4504   unsigned int i;
4505   asection **hdrpp;
4506   size_t amt;
4507 
4508   amt = sizeof (struct elf_segment_map) - sizeof (asection *);
4509   amt += (to - from) * sizeof (asection *);
4510   m = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
4511   if (m == NULL)
4512     return NULL;
4513   m->next = NULL;
4514   m->p_type = PT_LOAD;
4515   for (i = from, hdrpp = sections + from; i < to; i++, hdrpp++)
4516     m->sections[i - from] = *hdrpp;
4517   m->count = to - from;
4518 
4519   if (from == 0 && phdr)
4520     {
4521       /* Include the headers in the first PT_LOAD segment.  */
4522       m->includes_filehdr = 1;
4523       m->includes_phdrs = 1;
4524     }
4525 
4526   return m;
4527 }
4528 
4529 /* Create the PT_DYNAMIC segment, which includes DYNSEC.  Returns NULL
4530    on failure.  */
4531 
4532 struct elf_segment_map *
4533 _bfd_elf_make_dynamic_segment (bfd *abfd, asection *dynsec)
4534 {
4535   struct elf_segment_map *m;
4536 
4537   m = (struct elf_segment_map *) bfd_zalloc (abfd,
4538 					     sizeof (struct elf_segment_map));
4539   if (m == NULL)
4540     return NULL;
4541   m->next = NULL;
4542   m->p_type = PT_DYNAMIC;
4543   m->count = 1;
4544   m->sections[0] = dynsec;
4545 
4546   return m;
4547 }
4548 
4549 /* Possibly add or remove segments from the segment map.  */
4550 
4551 static bool
4552 elf_modify_segment_map (bfd *abfd,
4553 			struct bfd_link_info *info,
4554 			bool remove_empty_load)
4555 {
4556   struct elf_segment_map **m;
4557   const struct elf_backend_data *bed;
4558 
4559   /* The placement algorithm assumes that non allocated sections are
4560      not in PT_LOAD segments.  We ensure this here by removing such
4561      sections from the segment map.  We also remove excluded
4562      sections.  Finally, any PT_LOAD segment without sections is
4563      removed.  */
4564   m = &elf_seg_map (abfd);
4565   while (*m)
4566     {
4567       unsigned int i, new_count;
4568 
4569       for (new_count = 0, i = 0; i < (*m)->count; i++)
4570 	{
4571 	  if (((*m)->sections[i]->flags & SEC_EXCLUDE) == 0
4572 	      && (((*m)->sections[i]->flags & SEC_ALLOC) != 0
4573 		  || (*m)->p_type != PT_LOAD))
4574 	    {
4575 	      (*m)->sections[new_count] = (*m)->sections[i];
4576 	      new_count++;
4577 	    }
4578 	}
4579       (*m)->count = new_count;
4580 
4581       if (remove_empty_load
4582 	  && (*m)->p_type == PT_LOAD
4583 	  && (*m)->count == 0
4584 	  && !(*m)->includes_phdrs)
4585 	*m = (*m)->next;
4586       else
4587 	m = &(*m)->next;
4588     }
4589 
4590   bed = get_elf_backend_data (abfd);
4591   if (bed->elf_backend_modify_segment_map != NULL)
4592     {
4593       if (!(*bed->elf_backend_modify_segment_map) (abfd, info))
4594 	return false;
4595     }
4596 
4597   return true;
4598 }
4599 
4600 #define IS_TBSS(s) \
4601   ((s->flags & (SEC_THREAD_LOCAL | SEC_LOAD)) == SEC_THREAD_LOCAL)
4602 
4603 /* Set up a mapping from BFD sections to program segments.  Update
4604    NEED_LAYOUT if the section layout is changed.  */
4605 
4606 bool
4607 _bfd_elf_map_sections_to_segments (bfd *abfd,
4608 				   struct bfd_link_info *info,
4609 				   bool *need_layout)
4610 {
4611   unsigned int count;
4612   struct elf_segment_map *m;
4613   asection **sections = NULL;
4614   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
4615   bool no_user_phdrs;
4616 
4617   no_user_phdrs = elf_seg_map (abfd) == NULL;
4618 
4619   if (info != NULL)
4620     {
4621       info->user_phdrs = !no_user_phdrs;
4622 
4623       /* Size the relative relocations if DT_RELR is enabled.  */
4624       if (info->enable_dt_relr
4625 	  && need_layout != NULL
4626 	  && bed->size_relative_relocs
4627 	  && !bed->size_relative_relocs (info, need_layout))
4628 	info->callbacks->einfo
4629 	  (_("%F%P: failed to size relative relocations\n"));
4630     }
4631 
4632   if (no_user_phdrs && bfd_count_sections (abfd) != 0)
4633     {
4634       asection *s;
4635       unsigned int i;
4636       struct elf_segment_map *mfirst;
4637       struct elf_segment_map **pm;
4638       asection *last_hdr;
4639       bfd_vma last_size;
4640       unsigned int hdr_index;
4641       bfd_vma maxpagesize;
4642       asection **hdrpp;
4643       bool phdr_in_segment;
4644       bool writable;
4645       bool executable;
4646       unsigned int tls_count = 0;
4647       asection *first_tls = NULL;
4648       asection *first_mbind = NULL;
4649       asection *dynsec, *eh_frame_hdr;
4650       asection *sframe;
4651       size_t amt;
4652       bfd_vma addr_mask, wrap_to = 0;  /* Bytes.  */
4653       bfd_size_type phdr_size;  /* Octets/bytes.  */
4654       unsigned int opb = bfd_octets_per_byte (abfd, NULL);
4655 
4656       /* Select the allocated sections, and sort them.  */
4657 
4658       amt = bfd_count_sections (abfd) * sizeof (asection *);
4659       sections = (asection **) bfd_malloc (amt);
4660       if (sections == NULL)
4661 	goto error_return;
4662 
4663       /* Calculate top address, avoiding undefined behaviour of shift
4664 	 left operator when shift count is equal to size of type
4665 	 being shifted.  */
4666       addr_mask = ((bfd_vma) 1 << (bfd_arch_bits_per_address (abfd) - 1)) - 1;
4667       addr_mask = (addr_mask << 1) + 1;
4668 
4669       i = 0;
4670       for (s = abfd->sections; s != NULL; s = s->next)
4671 	{
4672 	  if ((s->flags & SEC_ALLOC) != 0)
4673 	    {
4674 	      /* target_index is unused until bfd_elf_final_link
4675 		 starts output of section symbols.  Use it to make
4676 		 qsort stable.  */
4677 	      s->target_index = i;
4678 	      sections[i] = s;
4679 	      ++i;
4680 	      /* A wrapping section potentially clashes with header.  */
4681 	      if (((s->lma + s->size / opb) & addr_mask) < (s->lma & addr_mask))
4682 		wrap_to = (s->lma + s->size / opb) & addr_mask;
4683 	    }
4684 	}
4685       BFD_ASSERT (i <= bfd_count_sections (abfd));
4686       count = i;
4687 
4688       qsort (sections, (size_t) count, sizeof (asection *), elf_sort_sections);
4689 
4690       phdr_size = elf_program_header_size (abfd);
4691       if (phdr_size == (bfd_size_type) -1)
4692 	phdr_size = get_program_header_size (abfd, info);
4693       phdr_size += bed->s->sizeof_ehdr;
4694       /* phdr_size is compared to LMA values which are in bytes.  */
4695       phdr_size /= opb;
4696       if (info != NULL)
4697 	maxpagesize = info->maxpagesize;
4698       else
4699 	maxpagesize = bed->maxpagesize;
4700       if (maxpagesize == 0)
4701 	maxpagesize = 1;
4702       phdr_in_segment = info != NULL && info->load_phdrs;
4703       if (count != 0
4704 	  && (((sections[0]->lma & addr_mask) & (maxpagesize - 1))
4705 	      >= (phdr_size & (maxpagesize - 1))))
4706 	/* For compatibility with old scripts that may not be using
4707 	   SIZEOF_HEADERS, add headers when it looks like space has
4708 	   been left for them.  */
4709 	phdr_in_segment = true;
4710 
4711       /* Build the mapping.  */
4712       mfirst = NULL;
4713       pm = &mfirst;
4714 
4715       /* If we have a .interp section, then create a PT_PHDR segment for
4716 	 the program headers and a PT_INTERP segment for the .interp
4717 	 section.  */
4718       s = bfd_get_section_by_name (abfd, ".interp");
4719       if (s != NULL && (s->flags & SEC_LOAD) != 0 && s->size != 0)
4720 	{
4721 	  amt = sizeof (struct elf_segment_map);
4722 	  m = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
4723 	  if (m == NULL)
4724 	    goto error_return;
4725 	  m->next = NULL;
4726 	  m->p_type = PT_PHDR;
4727 	  m->p_flags = PF_R;
4728 	  m->p_flags_valid = 1;
4729 	  m->includes_phdrs = 1;
4730 	  phdr_in_segment = true;
4731 	  *pm = m;
4732 	  pm = &m->next;
4733 
4734 	  amt = sizeof (struct elf_segment_map);
4735 	  m = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
4736 	  if (m == NULL)
4737 	    goto error_return;
4738 	  m->next = NULL;
4739 	  m->p_type = PT_INTERP;
4740 	  m->count = 1;
4741 	  m->sections[0] = s;
4742 
4743 	  *pm = m;
4744 	  pm = &m->next;
4745 	}
4746 
4747       /* Look through the sections.  We put sections in the same program
4748 	 segment when the start of the second section can be placed within
4749 	 a few bytes of the end of the first section.  */
4750       last_hdr = NULL;
4751       last_size = 0;
4752       hdr_index = 0;
4753       writable = false;
4754       executable = false;
4755       dynsec = bfd_get_section_by_name (abfd, ".dynamic");
4756       if (dynsec != NULL
4757 	  && (dynsec->flags & SEC_LOAD) == 0)
4758 	dynsec = NULL;
4759 
4760       if ((abfd->flags & D_PAGED) == 0)
4761 	phdr_in_segment = false;
4762 
4763       /* Deal with -Ttext or something similar such that the first section
4764 	 is not adjacent to the program headers.  This is an
4765 	 approximation, since at this point we don't know exactly how many
4766 	 program headers we will need.  */
4767       if (phdr_in_segment && count > 0)
4768 	{
4769 	  bfd_vma phdr_lma;  /* Bytes.  */
4770 	  bool separate_phdr = false;
4771 
4772 	  phdr_lma = (sections[0]->lma - phdr_size) & addr_mask & -maxpagesize;
4773 	  if (info != NULL
4774 	      && info->separate_code
4775 	      && (sections[0]->flags & SEC_CODE) != 0)
4776 	    {
4777 	      /* If data sections should be separate from code and
4778 		 thus not executable, and the first section is
4779 		 executable then put the file and program headers in
4780 		 their own PT_LOAD.  */
4781 	      separate_phdr = true;
4782 	      if ((((phdr_lma + phdr_size - 1) & addr_mask & -maxpagesize)
4783 		   == (sections[0]->lma & addr_mask & -maxpagesize)))
4784 		{
4785 		  /* The file and program headers are currently on the
4786 		     same page as the first section.  Put them on the
4787 		     previous page if we can.  */
4788 		  if (phdr_lma >= maxpagesize)
4789 		    phdr_lma -= maxpagesize;
4790 		  else
4791 		    separate_phdr = false;
4792 		}
4793 	    }
4794 	  if ((sections[0]->lma & addr_mask) < phdr_lma
4795 	      || (sections[0]->lma & addr_mask) < phdr_size)
4796 	    /* If file and program headers would be placed at the end
4797 	       of memory then it's probably better to omit them.  */
4798 	    phdr_in_segment = false;
4799 	  else if (phdr_lma < wrap_to)
4800 	    /* If a section wraps around to where we'll be placing
4801 	       file and program headers, then the headers will be
4802 	       overwritten.  */
4803 	    phdr_in_segment = false;
4804 	  else if (separate_phdr)
4805 	    {
4806 	      m = make_mapping (abfd, sections, 0, 0, phdr_in_segment);
4807 	      if (m == NULL)
4808 		goto error_return;
4809 	      m->p_paddr = phdr_lma * opb;
4810 	      m->p_vaddr_offset
4811 		= (sections[0]->vma - phdr_size) & addr_mask & -maxpagesize;
4812 	      m->p_paddr_valid = 1;
4813 	      *pm = m;
4814 	      pm = &m->next;
4815 	      phdr_in_segment = false;
4816 	    }
4817 	}
4818 
4819       for (i = 0, hdrpp = sections; i < count; i++, hdrpp++)
4820 	{
4821 	  asection *hdr;
4822 	  bool new_segment;
4823 
4824 	  hdr = *hdrpp;
4825 
4826 	  /* See if this section and the last one will fit in the same
4827 	     segment.  */
4828 
4829 	  if (last_hdr == NULL)
4830 	    {
4831 	      /* If we don't have a segment yet, then we don't need a new
4832 		 one (we build the last one after this loop).  */
4833 	      new_segment = false;
4834 	    }
4835 	  else if (last_hdr->lma - last_hdr->vma != hdr->lma - hdr->vma)
4836 	    {
4837 	      /* If this section has a different relation between the
4838 		 virtual address and the load address, then we need a new
4839 		 segment.  */
4840 	      new_segment = true;
4841 	    }
4842 	  else if (hdr->lma < last_hdr->lma + last_size
4843 		   || last_hdr->lma + last_size < last_hdr->lma)
4844 	    {
4845 	      /* If this section has a load address that makes it overlap
4846 		 the previous section, then we need a new segment.  */
4847 	      new_segment = true;
4848 	    }
4849 	  else if ((abfd->flags & D_PAGED) != 0
4850 		   && (((last_hdr->lma + last_size - 1) & -maxpagesize)
4851 		       == (hdr->lma & -maxpagesize)))
4852 	    {
4853 	      /* If we are demand paged then we can't map two disk
4854 		 pages onto the same memory page.  */
4855 	      new_segment = false;
4856 	    }
4857 	  /* In the next test we have to be careful when last_hdr->lma is close
4858 	     to the end of the address space.  If the aligned address wraps
4859 	     around to the start of the address space, then there are no more
4860 	     pages left in memory and it is OK to assume that the current
4861 	     section can be included in the current segment.  */
4862 	  else if ((BFD_ALIGN (last_hdr->lma + last_size, maxpagesize)
4863 		    + maxpagesize > last_hdr->lma)
4864 		   && (BFD_ALIGN (last_hdr->lma + last_size, maxpagesize)
4865 		       + maxpagesize <= hdr->lma))
4866 	    {
4867 	      /* If putting this section in this segment would force us to
4868 		 skip a page in the segment, then we need a new segment.  */
4869 	      new_segment = true;
4870 	    }
4871 	  else if ((last_hdr->flags & (SEC_LOAD | SEC_THREAD_LOCAL)) == 0
4872 		   && (hdr->flags & (SEC_LOAD | SEC_THREAD_LOCAL)) != 0)
4873 	    {
4874 	      /* We don't want to put a loaded section after a
4875 		 nonloaded (ie. bss style) section in the same segment
4876 		 as that will force the non-loaded section to be loaded.
4877 		 Consider .tbss sections as loaded for this purpose.  */
4878 	      new_segment = true;
4879 	    }
4880 	  else if ((abfd->flags & D_PAGED) == 0)
4881 	    {
4882 	      /* If the file is not demand paged, which means that we
4883 		 don't require the sections to be correctly aligned in the
4884 		 file, then there is no other reason for a new segment.  */
4885 	      new_segment = false;
4886 	    }
4887 	  else if (info != NULL
4888 		   && info->separate_code
4889 		   && executable != ((hdr->flags & SEC_CODE) != 0))
4890 	    {
4891 	      new_segment = true;
4892 	    }
4893 	  else if (! writable
4894 		   && (hdr->flags & SEC_READONLY) == 0)
4895 	    {
4896 	      /* We don't want to put a writable section in a read only
4897 		 segment.  */
4898 	      new_segment = true;
4899 	    }
4900 	  else
4901 	    {
4902 	      /* Otherwise, we can use the same segment.  */
4903 	      new_segment = false;
4904 	    }
4905 
4906 	  /* Allow interested parties a chance to override our decision.  */
4907 	  if (last_hdr != NULL
4908 	      && info != NULL
4909 	      && info->callbacks->override_segment_assignment != NULL)
4910 	    new_segment
4911 	      = info->callbacks->override_segment_assignment (info, abfd, hdr,
4912 							      last_hdr,
4913 							      new_segment);
4914 
4915 	  if (! new_segment)
4916 	    {
4917 	      if ((hdr->flags & SEC_READONLY) == 0)
4918 		writable = true;
4919 	      if ((hdr->flags & SEC_CODE) != 0)
4920 		executable = true;
4921 	      last_hdr = hdr;
4922 	      /* .tbss sections effectively have zero size.  */
4923 	      last_size = (!IS_TBSS (hdr) ? hdr->size : 0) / opb;
4924 	      continue;
4925 	    }
4926 
4927 	  /* We need a new program segment.  We must create a new program
4928 	     header holding all the sections from hdr_index until hdr.  */
4929 
4930 	  m = make_mapping (abfd, sections, hdr_index, i, phdr_in_segment);
4931 	  if (m == NULL)
4932 	    goto error_return;
4933 
4934 	  *pm = m;
4935 	  pm = &m->next;
4936 
4937 	  if ((hdr->flags & SEC_READONLY) == 0)
4938 	    writable = true;
4939 	  else
4940 	    writable = false;
4941 
4942 	  if ((hdr->flags & SEC_CODE) == 0)
4943 	    executable = false;
4944 	  else
4945 	    executable = true;
4946 
4947 	  last_hdr = hdr;
4948 	  /* .tbss sections effectively have zero size.  */
4949 	  last_size = (!IS_TBSS (hdr) ? hdr->size : 0) / opb;
4950 	  hdr_index = i;
4951 	  phdr_in_segment = false;
4952 	}
4953 
4954       /* Create a final PT_LOAD program segment, but not if it's just
4955 	 for .tbss.  */
4956       if (last_hdr != NULL
4957 	  && (i - hdr_index != 1
4958 	      || !IS_TBSS (last_hdr)))
4959 	{
4960 	  m = make_mapping (abfd, sections, hdr_index, i, phdr_in_segment);
4961 	  if (m == NULL)
4962 	    goto error_return;
4963 
4964 	  *pm = m;
4965 	  pm = &m->next;
4966 	}
4967 
4968       /* If there is a .dynamic section, throw in a PT_DYNAMIC segment.  */
4969       if (dynsec != NULL)
4970 	{
4971 	  m = _bfd_elf_make_dynamic_segment (abfd, dynsec);
4972 	  if (m == NULL)
4973 	    goto error_return;
4974 	  *pm = m;
4975 	  pm = &m->next;
4976 	}
4977 
4978       /* For each batch of consecutive loadable SHT_NOTE  sections,
4979 	 add a PT_NOTE segment.  We don't use bfd_get_section_by_name,
4980 	 because if we link together nonloadable .note sections and
4981 	 loadable .note sections, we will generate two .note sections
4982 	 in the output file.  */
4983       for (s = abfd->sections; s != NULL; s = s->next)
4984 	{
4985 	  if ((s->flags & SEC_LOAD) != 0
4986 	      && elf_section_type (s) == SHT_NOTE)
4987 	    {
4988 	      asection *s2;
4989 	      unsigned int alignment_power = s->alignment_power;
4990 
4991 	      count = 1;
4992 	      for (s2 = s; s2->next != NULL; s2 = s2->next)
4993 		{
4994 		  if (s2->next->alignment_power == alignment_power
4995 		      && (s2->next->flags & SEC_LOAD) != 0
4996 		      && elf_section_type (s2->next) == SHT_NOTE
4997 		      && align_power (s2->lma + s2->size / opb,
4998 				      alignment_power)
4999 		      == s2->next->lma)
5000 		    count++;
5001 		  else
5002 		    break;
5003 		}
5004 	      amt = sizeof (struct elf_segment_map) - sizeof (asection *);
5005 	      amt += count * sizeof (asection *);
5006 	      m = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
5007 	      if (m == NULL)
5008 		goto error_return;
5009 	      m->next = NULL;
5010 	      m->p_type = PT_NOTE;
5011 	      m->count = count;
5012 	      while (count > 1)
5013 		{
5014 		  m->sections[m->count - count--] = s;
5015 		  BFD_ASSERT ((s->flags & SEC_THREAD_LOCAL) == 0);
5016 		  s = s->next;
5017 		}
5018 	      m->sections[m->count - 1] = s;
5019 	      BFD_ASSERT ((s->flags & SEC_THREAD_LOCAL) == 0);
5020 	      *pm = m;
5021 	      pm = &m->next;
5022 	    }
5023 	  if (s->flags & SEC_THREAD_LOCAL)
5024 	    {
5025 	      if (! tls_count)
5026 		first_tls = s;
5027 	      tls_count++;
5028 	    }
5029 	  if (first_mbind == NULL
5030 	      && (elf_section_flags (s) & SHF_GNU_MBIND) != 0)
5031 	    first_mbind = s;
5032 	}
5033 
5034       /* If there are any SHF_TLS output sections, add PT_TLS segment.  */
5035       if (tls_count > 0)
5036 	{
5037 	  amt = sizeof (struct elf_segment_map) - sizeof (asection *);
5038 	  amt += tls_count * sizeof (asection *);
5039 	  m = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
5040 	  if (m == NULL)
5041 	    goto error_return;
5042 	  m->next = NULL;
5043 	  m->p_type = PT_TLS;
5044 	  m->count = tls_count;
5045 	  /* Mandated PF_R.  */
5046 	  m->p_flags = PF_R;
5047 	  m->p_flags_valid = 1;
5048 	  s = first_tls;
5049 	  for (i = 0; i < tls_count; ++i)
5050 	    {
5051 	      if ((s->flags & SEC_THREAD_LOCAL) == 0)
5052 		{
5053 		  _bfd_error_handler
5054 		    (_("%pB: TLS sections are not adjacent:"), abfd);
5055 		  s = first_tls;
5056 		  i = 0;
5057 		  while (i < tls_count)
5058 		    {
5059 		      if ((s->flags & SEC_THREAD_LOCAL) != 0)
5060 			{
5061 			  _bfd_error_handler (_("	    TLS: %pA"), s);
5062 			  i++;
5063 			}
5064 		      else
5065 			_bfd_error_handler (_("	non-TLS: %pA"), s);
5066 		      s = s->next;
5067 		    }
5068 		  bfd_set_error (bfd_error_bad_value);
5069 		  goto error_return;
5070 		}
5071 	      m->sections[i] = s;
5072 	      s = s->next;
5073 	    }
5074 
5075 	  *pm = m;
5076 	  pm = &m->next;
5077 	}
5078 
5079       if (first_mbind
5080 	  && (abfd->flags & D_PAGED) != 0
5081 	  && (elf_tdata (abfd)->has_gnu_osabi & elf_gnu_osabi_mbind) != 0)
5082 	for (s = first_mbind; s != NULL; s = s->next)
5083 	  if ((elf_section_flags (s) & SHF_GNU_MBIND) != 0
5084 	      && elf_section_data (s)->this_hdr.sh_info <= PT_GNU_MBIND_NUM)
5085 	    {
5086 	      /* Mandated PF_R.  */
5087 	      unsigned long p_flags = PF_R;
5088 	      if ((s->flags & SEC_READONLY) == 0)
5089 		p_flags |= PF_W;
5090 	      if ((s->flags & SEC_CODE) != 0)
5091 		p_flags |= PF_X;
5092 
5093 	      amt = sizeof (struct elf_segment_map) + sizeof (asection *);
5094 	      m = bfd_zalloc (abfd, amt);
5095 	      if (m == NULL)
5096 		goto error_return;
5097 	      m->next = NULL;
5098 	      m->p_type = (PT_GNU_MBIND_LO
5099 			   + elf_section_data (s)->this_hdr.sh_info);
5100 	      m->count = 1;
5101 	      m->p_flags_valid = 1;
5102 	      m->sections[0] = s;
5103 	      m->p_flags = p_flags;
5104 
5105 	      *pm = m;
5106 	      pm = &m->next;
5107 	    }
5108 
5109       s = bfd_get_section_by_name (abfd,
5110 				   NOTE_GNU_PROPERTY_SECTION_NAME);
5111       if (s != NULL && s->size != 0)
5112 	{
5113 	  amt = sizeof (struct elf_segment_map) + sizeof (asection *);
5114 	  m = bfd_zalloc (abfd, amt);
5115 	  if (m == NULL)
5116 	    goto error_return;
5117 	  m->next = NULL;
5118 	  m->p_type = PT_GNU_PROPERTY;
5119 	  m->count = 1;
5120 	  m->p_flags_valid = 1;
5121 	  m->sections[0] = s;
5122 	  m->p_flags = PF_R;
5123 	  *pm = m;
5124 	  pm = &m->next;
5125 	}
5126 
5127       /* If there is a .eh_frame_hdr section, throw in a PT_GNU_EH_FRAME
5128 	 segment.  */
5129       eh_frame_hdr = elf_eh_frame_hdr (info);
5130       if (eh_frame_hdr != NULL
5131 	  && (eh_frame_hdr->output_section->flags & SEC_LOAD) != 0)
5132 	{
5133 	  amt = sizeof (struct elf_segment_map);
5134 	  m = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
5135 	  if (m == NULL)
5136 	    goto error_return;
5137 	  m->next = NULL;
5138 	  m->p_type = PT_GNU_EH_FRAME;
5139 	  m->count = 1;
5140 	  m->sections[0] = eh_frame_hdr->output_section;
5141 
5142 	  *pm = m;
5143 	  pm = &m->next;
5144 	}
5145 
5146       /* If there is a .sframe section, throw in a PT_GNU_SFRAME
5147 	 segment.  */
5148       sframe = elf_sframe (abfd);
5149       if (sframe != NULL
5150 	  && (sframe->output_section->flags & SEC_LOAD) != 0
5151 	  && sframe->size != 0)
5152 	{
5153 	  amt = sizeof (struct elf_segment_map);
5154 	  m = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
5155 	  if (m == NULL)
5156 	    goto error_return;
5157 	  m->next = NULL;
5158 	  m->p_type = PT_GNU_SFRAME;
5159 	  m->count = 1;
5160 	  m->sections[0] = sframe->output_section;
5161 
5162 	  *pm = m;
5163 	  pm = &m->next;
5164 	}
5165 
5166       if (elf_stack_flags (abfd))
5167 	{
5168 	  amt = sizeof (struct elf_segment_map);
5169 	  m = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
5170 	  if (m == NULL)
5171 	    goto error_return;
5172 	  m->next = NULL;
5173 	  m->p_type = PT_GNU_STACK;
5174 	  m->p_flags = elf_stack_flags (abfd);
5175 	  m->p_align = bed->stack_align;
5176 	  m->p_flags_valid = 1;
5177 	  m->p_align_valid = m->p_align != 0;
5178 	  if (info->stacksize > 0)
5179 	    {
5180 	      m->p_size = info->stacksize;
5181 	      m->p_size_valid = 1;
5182 	    }
5183 
5184 	  *pm = m;
5185 	  pm = &m->next;
5186 	}
5187 
5188       if (info != NULL && info->relro)
5189 	{
5190 	  for (m = mfirst; m != NULL; m = m->next)
5191 	    {
5192 	      if (m->p_type == PT_LOAD
5193 		  && m->count != 0
5194 		  && m->sections[0]->vma >= info->relro_start
5195 		  && m->sections[0]->vma < info->relro_end)
5196 		{
5197 		  i = m->count;
5198 		  while (--i != (unsigned) -1)
5199 		    {
5200 		      if (m->sections[i]->size > 0
5201 			  && (m->sections[i]->flags & SEC_LOAD) != 0
5202 			  && (m->sections[i]->flags & SEC_HAS_CONTENTS) != 0)
5203 			break;
5204 		    }
5205 
5206 		  if (i != (unsigned) -1)
5207 		    break;
5208 		}
5209 	    }
5210 
5211 	  /* Make a PT_GNU_RELRO segment only when it isn't empty.  */
5212 	  if (m != NULL)
5213 	    {
5214 	      amt = sizeof (struct elf_segment_map);
5215 	      m = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
5216 	      if (m == NULL)
5217 		goto error_return;
5218 	      m->next = NULL;
5219 	      m->p_type = PT_GNU_RELRO;
5220 	      *pm = m;
5221 	      pm = &m->next;
5222 	    }
5223 	}
5224 
5225       free (sections);
5226       elf_seg_map (abfd) = mfirst;
5227     }
5228 
5229   if (!elf_modify_segment_map (abfd, info, no_user_phdrs))
5230     return false;
5231 
5232   for (count = 0, m = elf_seg_map (abfd); m != NULL; m = m->next)
5233     ++count;
5234   elf_program_header_size (abfd) = count * bed->s->sizeof_phdr;
5235 
5236   return true;
5237 
5238  error_return:
5239   free (sections);
5240   return false;
5241 }
5242 
5243 /* Sort sections by address.  */
5244 
5245 static int
5246 elf_sort_sections (const void *arg1, const void *arg2)
5247 {
5248   const asection *sec1 = *(const asection **) arg1;
5249   const asection *sec2 = *(const asection **) arg2;
5250   bfd_size_type size1, size2;
5251 
5252   /* Sort by LMA first, since this is the address used to
5253      place the section into a segment.  */
5254   if (sec1->lma < sec2->lma)
5255     return -1;
5256   else if (sec1->lma > sec2->lma)
5257     return 1;
5258 
5259   /* Then sort by VMA.  Normally the LMA and the VMA will be
5260      the same, and this will do nothing.  */
5261   if (sec1->vma < sec2->vma)
5262     return -1;
5263   else if (sec1->vma > sec2->vma)
5264     return 1;
5265 
5266   /* Put !SEC_LOAD sections after SEC_LOAD ones.  */
5267 
5268 #define TOEND(x) (((x)->flags & (SEC_LOAD | SEC_THREAD_LOCAL)) == 0 \
5269 		  && (x)->size != 0)
5270 
5271   if (TOEND (sec1))
5272     {
5273       if (!TOEND (sec2))
5274 	return 1;
5275     }
5276   else if (TOEND (sec2))
5277     return -1;
5278 
5279 #undef TOEND
5280 
5281   /* Sort by size, to put zero sized sections
5282      before others at the same address.  */
5283 
5284   size1 = (sec1->flags & SEC_LOAD) ? sec1->size : 0;
5285   size2 = (sec2->flags & SEC_LOAD) ? sec2->size : 0;
5286 
5287   if (size1 < size2)
5288     return -1;
5289   if (size1 > size2)
5290     return 1;
5291 
5292   return sec1->target_index - sec2->target_index;
5293 }
5294 
5295 /* This qsort comparison functions sorts PT_LOAD segments first and
5296    by p_paddr, for assign_file_positions_for_load_sections.  */
5297 
5298 static int
5299 elf_sort_segments (const void *arg1, const void *arg2)
5300 {
5301   const struct elf_segment_map *m1 = *(const struct elf_segment_map **) arg1;
5302   const struct elf_segment_map *m2 = *(const struct elf_segment_map **) arg2;
5303 
5304   if (m1->p_type != m2->p_type)
5305     {
5306       if (m1->p_type == PT_NULL)
5307 	return 1;
5308       if (m2->p_type == PT_NULL)
5309 	return -1;
5310       return m1->p_type < m2->p_type ? -1 : 1;
5311     }
5312   if (m1->includes_filehdr != m2->includes_filehdr)
5313     return m1->includes_filehdr ? -1 : 1;
5314   if (m1->no_sort_lma != m2->no_sort_lma)
5315     return m1->no_sort_lma ? -1 : 1;
5316   if (m1->p_type == PT_LOAD && !m1->no_sort_lma)
5317     {
5318       bfd_vma lma1, lma2;  /* Octets.  */
5319       lma1 = 0;
5320       if (m1->p_paddr_valid)
5321 	lma1 = m1->p_paddr;
5322       else if (m1->count != 0)
5323 	{
5324 	  unsigned int opb = bfd_octets_per_byte (m1->sections[0]->owner,
5325 						  m1->sections[0]);
5326 	  lma1 = (m1->sections[0]->lma + m1->p_vaddr_offset) * opb;
5327 	}
5328       lma2 = 0;
5329       if (m2->p_paddr_valid)
5330 	lma2 = m2->p_paddr;
5331       else if (m2->count != 0)
5332 	{
5333 	  unsigned int opb = bfd_octets_per_byte (m2->sections[0]->owner,
5334 						  m2->sections[0]);
5335 	  lma2 = (m2->sections[0]->lma + m2->p_vaddr_offset) * opb;
5336 	}
5337       if (lma1 != lma2)
5338 	return lma1 < lma2 ? -1 : 1;
5339     }
5340   if (m1->idx != m2->idx)
5341     return m1->idx < m2->idx ? -1 : 1;
5342   return 0;
5343 }
5344 
5345 /* Ian Lance Taylor writes:
5346 
5347    We shouldn't be using % with a negative signed number.  That's just
5348    not good.  We have to make sure either that the number is not
5349    negative, or that the number has an unsigned type.  When the types
5350    are all the same size they wind up as unsigned.  When file_ptr is a
5351    larger signed type, the arithmetic winds up as signed long long,
5352    which is wrong.
5353 
5354    What we're trying to say here is something like ``increase OFF by
5355    the least amount that will cause it to be equal to the VMA modulo
5356    the page size.''  */
5357 /* In other words, something like:
5358 
5359    vma_offset = m->sections[0]->vma % bed->maxpagesize;
5360    off_offset = off % bed->maxpagesize;
5361    if (vma_offset < off_offset)
5362      adjustment = vma_offset + bed->maxpagesize - off_offset;
5363    else
5364      adjustment = vma_offset - off_offset;
5365 
5366    which can be collapsed into the expression below.  */
5367 
5368 static file_ptr
5369 vma_page_aligned_bias (bfd_vma vma, ufile_ptr off, bfd_vma maxpagesize)
5370 {
5371   /* PR binutils/16199: Handle an alignment of zero.  */
5372   if (maxpagesize == 0)
5373     maxpagesize = 1;
5374   return ((vma - off) % maxpagesize);
5375 }
5376 
5377 static void
5378 print_segment_map (const struct elf_segment_map *m)
5379 {
5380   unsigned int j;
5381   const char *pt = get_segment_type (m->p_type);
5382   char buf[32];
5383 
5384   if (pt == NULL)
5385     {
5386       if (m->p_type >= PT_LOPROC && m->p_type <= PT_HIPROC)
5387 	sprintf (buf, "LOPROC+%7.7x",
5388 		 (unsigned int) (m->p_type - PT_LOPROC));
5389       else if (m->p_type >= PT_LOOS && m->p_type <= PT_HIOS)
5390 	sprintf (buf, "LOOS+%7.7x",
5391 		 (unsigned int) (m->p_type - PT_LOOS));
5392       else
5393 	snprintf (buf, sizeof (buf), "%8.8x",
5394 		  (unsigned int) m->p_type);
5395       pt = buf;
5396     }
5397   fflush (stdout);
5398   fprintf (stderr, "%s:", pt);
5399   for (j = 0; j < m->count; j++)
5400     fprintf (stderr, " %s", m->sections [j]->name);
5401   putc ('\n',stderr);
5402   fflush (stderr);
5403 }
5404 
5405 static bool
5406 write_zeros (bfd *abfd, file_ptr pos, bfd_size_type len)
5407 {
5408   void *buf;
5409   bool ret;
5410 
5411   if (bfd_seek (abfd, pos, SEEK_SET) != 0)
5412     return false;
5413   buf = bfd_zmalloc (len);
5414   if (buf == NULL)
5415     return false;
5416   ret = bfd_bwrite (buf, len, abfd) == len;
5417   free (buf);
5418   return ret;
5419 }
5420 
5421 /* Assign file positions to the sections based on the mapping from
5422    sections to segments.  This function also sets up some fields in
5423    the file header.  */
5424 
5425 static bool
5426 assign_file_positions_for_load_sections (bfd *abfd,
5427 					 struct bfd_link_info *link_info)
5428 {
5429   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
5430   struct elf_segment_map *m;
5431   struct elf_segment_map *phdr_load_seg;
5432   Elf_Internal_Phdr *phdrs;
5433   Elf_Internal_Phdr *p;
5434   file_ptr off;  /* Octets.  */
5435   bfd_size_type maxpagesize;
5436   unsigned int alloc, actual;
5437   unsigned int i, j;
5438   struct elf_segment_map **sorted_seg_map;
5439   unsigned int opb = bfd_octets_per_byte (abfd, NULL);
5440 
5441   if (link_info == NULL
5442       && !_bfd_elf_map_sections_to_segments (abfd, link_info, NULL))
5443     return false;
5444 
5445   alloc = 0;
5446   for (m = elf_seg_map (abfd); m != NULL; m = m->next)
5447     m->idx = alloc++;
5448 
5449   if (alloc)
5450     {
5451       elf_elfheader (abfd)->e_phoff = bed->s->sizeof_ehdr;
5452       elf_elfheader (abfd)->e_phentsize = bed->s->sizeof_phdr;
5453     }
5454   else
5455     {
5456       /* PR binutils/12467.  */
5457       elf_elfheader (abfd)->e_phoff = 0;
5458       elf_elfheader (abfd)->e_phentsize = 0;
5459     }
5460 
5461   elf_elfheader (abfd)->e_phnum = alloc;
5462 
5463   if (elf_program_header_size (abfd) == (bfd_size_type) -1)
5464     {
5465       actual = alloc;
5466       elf_program_header_size (abfd) = alloc * bed->s->sizeof_phdr;
5467     }
5468   else
5469     {
5470       actual = elf_program_header_size (abfd) / bed->s->sizeof_phdr;
5471       BFD_ASSERT (elf_program_header_size (abfd)
5472 		  == actual * bed->s->sizeof_phdr);
5473       BFD_ASSERT (actual >= alloc);
5474     }
5475 
5476   if (alloc == 0)
5477     {
5478       elf_next_file_pos (abfd) = bed->s->sizeof_ehdr;
5479       return true;
5480     }
5481 
5482   /* We're writing the size in elf_program_header_size (abfd),
5483      see assign_file_positions_except_relocs, so make sure we have
5484      that amount allocated, with trailing space cleared.
5485      The variable alloc contains the computed need, while
5486      elf_program_header_size (abfd) contains the size used for the
5487      layout.
5488      See ld/emultempl/elf-generic.em:gld${EMULATION_NAME}_map_segments
5489      where the layout is forced to according to a larger size in the
5490      last iterations for the testcase ld-elf/header.  */
5491   phdrs = bfd_zalloc (abfd, (actual * sizeof (*phdrs)
5492 			     + alloc * sizeof (*sorted_seg_map)));
5493   sorted_seg_map = (struct elf_segment_map **) (phdrs + actual);
5494   elf_tdata (abfd)->phdr = phdrs;
5495   if (phdrs == NULL)
5496     return false;
5497 
5498   for (m = elf_seg_map (abfd), j = 0; m != NULL; m = m->next, j++)
5499     {
5500       sorted_seg_map[j] = m;
5501       /* If elf_segment_map is not from map_sections_to_segments, the
5502 	 sections may not be correctly ordered.  NOTE: sorting should
5503 	 not be done to the PT_NOTE section of a corefile, which may
5504 	 contain several pseudo-sections artificially created by bfd.
5505 	 Sorting these pseudo-sections breaks things badly.  */
5506       if (m->count > 1
5507 	  && !(elf_elfheader (abfd)->e_type == ET_CORE
5508 	       && m->p_type == PT_NOTE))
5509 	{
5510 	  for (i = 0; i < m->count; i++)
5511 	    m->sections[i]->target_index = i;
5512 	  qsort (m->sections, (size_t) m->count, sizeof (asection *),
5513 		 elf_sort_sections);
5514 	}
5515     }
5516   if (alloc > 1)
5517     qsort (sorted_seg_map, alloc, sizeof (*sorted_seg_map),
5518 	   elf_sort_segments);
5519 
5520   maxpagesize = 1;
5521   if ((abfd->flags & D_PAGED) != 0)
5522     {
5523       if (link_info != NULL)
5524 	maxpagesize = link_info->maxpagesize;
5525       else
5526 	maxpagesize = bed->maxpagesize;
5527     }
5528 
5529   /* Sections must map to file offsets past the ELF file header.  */
5530   off = bed->s->sizeof_ehdr;
5531   /* And if one of the PT_LOAD headers doesn't include the program
5532      headers then we'll be mapping program headers in the usual
5533      position after the ELF file header.  */
5534   phdr_load_seg = NULL;
5535   for (j = 0; j < alloc; j++)
5536     {
5537       m = sorted_seg_map[j];
5538       if (m->p_type != PT_LOAD)
5539 	break;
5540       if (m->includes_phdrs)
5541 	{
5542 	  phdr_load_seg = m;
5543 	  break;
5544 	}
5545     }
5546   if (phdr_load_seg == NULL)
5547     off += actual * bed->s->sizeof_phdr;
5548 
5549   for (j = 0; j < alloc; j++)
5550     {
5551       asection **secpp;
5552       bfd_vma off_adjust;  /* Octets.  */
5553       bool no_contents;
5554       bfd_size_type p_align;
5555       bool p_align_p;
5556 
5557       /* An ELF segment (described by Elf_Internal_Phdr) may contain a
5558 	 number of sections with contents contributing to both p_filesz
5559 	 and p_memsz, followed by a number of sections with no contents
5560 	 that just contribute to p_memsz.  In this loop, OFF tracks next
5561 	 available file offset for PT_LOAD and PT_NOTE segments.  */
5562       m = sorted_seg_map[j];
5563       p = phdrs + m->idx;
5564       p->p_type = m->p_type;
5565       p->p_flags = m->p_flags;
5566       p_align = bed->p_align;
5567       p_align_p = false;
5568 
5569       if (m->count == 0)
5570 	p->p_vaddr = m->p_vaddr_offset * opb;
5571       else
5572 	p->p_vaddr = (m->sections[0]->vma + m->p_vaddr_offset) * opb;
5573 
5574       if (m->p_paddr_valid)
5575 	p->p_paddr = m->p_paddr;
5576       else if (m->count == 0)
5577 	p->p_paddr = 0;
5578       else
5579 	p->p_paddr = (m->sections[0]->lma + m->p_vaddr_offset) * opb;
5580 
5581       if (p->p_type == PT_LOAD
5582 	  && (abfd->flags & D_PAGED) != 0)
5583 	{
5584 	  /* p_align in demand paged PT_LOAD segments effectively stores
5585 	     the maximum page size.  When copying an executable with
5586 	     objcopy, we set m->p_align from the input file.  Use this
5587 	     value for maxpagesize rather than bed->maxpagesize, which
5588 	     may be different.  Note that we use maxpagesize for PT_TLS
5589 	     segment alignment later in this function, so we are relying
5590 	     on at least one PT_LOAD segment appearing before a PT_TLS
5591 	     segment.  */
5592 	  if (m->p_align_valid)
5593 	    maxpagesize = m->p_align;
5594 	  else if (p_align != 0
5595 		   && (link_info == NULL
5596 		       || !link_info->maxpagesize_is_set))
5597 	    /* Set p_align to the default p_align value while laying
5598 	       out segments aligning to the maximum page size or the
5599 	       largest section alignment.  The run-time loader can
5600 	       align segments to the default p_align value or the
5601 	       maximum page size, depending on system page size.  */
5602 	    p_align_p = true;
5603 
5604 	  p->p_align = maxpagesize;
5605 	}
5606       else if (m->p_align_valid)
5607 	p->p_align = m->p_align;
5608       else if (m->count == 0)
5609 	p->p_align = 1 << bed->s->log_file_align;
5610 
5611       if (m == phdr_load_seg)
5612 	{
5613 	  if (!m->includes_filehdr)
5614 	    p->p_offset = off;
5615 	  off += actual * bed->s->sizeof_phdr;
5616 	}
5617 
5618       no_contents = false;
5619       off_adjust = 0;
5620       if (p->p_type == PT_LOAD
5621 	  && m->count > 0)
5622 	{
5623 	  bfd_size_type align;  /* Bytes.  */
5624 	  unsigned int align_power = 0;
5625 
5626 	  if (m->p_align_valid)
5627 	    align = p->p_align;
5628 	  else
5629 	    {
5630 	      for (i = 0, secpp = m->sections; i < m->count; i++, secpp++)
5631 		{
5632 		  unsigned int secalign;
5633 
5634 		  secalign = bfd_section_alignment (*secpp);
5635 		  if (secalign > align_power)
5636 		    align_power = secalign;
5637 		}
5638 	      align = (bfd_size_type) 1 << align_power;
5639 	      if (align < maxpagesize)
5640 		{
5641 		  /* If a section requires alignment higher than the
5642 		     default p_align value, don't set p_align to the
5643 		     default p_align value.  */
5644 		  if (align > p_align)
5645 		    p_align_p = false;
5646 		  align = maxpagesize;
5647 		}
5648 	      else
5649 		{
5650 		  /* If a section requires alignment higher than the
5651 		     maximum page size, set p_align to the section
5652 		     alignment.  */
5653 		  p_align_p = true;
5654 		  p_align = align;
5655 		}
5656 	    }
5657 
5658 	  for (i = 0; i < m->count; i++)
5659 	    if ((m->sections[i]->flags & (SEC_LOAD | SEC_HAS_CONTENTS)) == 0)
5660 	      /* If we aren't making room for this section, then
5661 		 it must be SHT_NOBITS regardless of what we've
5662 		 set via struct bfd_elf_special_section.  */
5663 	      elf_section_type (m->sections[i]) = SHT_NOBITS;
5664 
5665 	  /* Find out whether this segment contains any loadable
5666 	     sections.  */
5667 	  no_contents = true;
5668 	  for (i = 0; i < m->count; i++)
5669 	    if (elf_section_type (m->sections[i]) != SHT_NOBITS)
5670 	      {
5671 		no_contents = false;
5672 		break;
5673 	      }
5674 
5675 	  off_adjust = vma_page_aligned_bias (p->p_vaddr, off, align * opb);
5676 
5677 	  /* Broken hardware and/or kernel require that files do not
5678 	     map the same page with different permissions on some hppa
5679 	     processors.  */
5680 	  if (j != 0
5681 	      && (abfd->flags & D_PAGED) != 0
5682 	      && bed->no_page_alias
5683 	      && (off & (maxpagesize - 1)) != 0
5684 	      && ((off & -maxpagesize)
5685 		  == ((off + off_adjust) & -maxpagesize)))
5686 	    off_adjust += maxpagesize;
5687 	  off += off_adjust;
5688 	  if (no_contents)
5689 	    {
5690 	      /* We shouldn't need to align the segment on disk since
5691 		 the segment doesn't need file space, but the gABI
5692 		 arguably requires the alignment and glibc ld.so
5693 		 checks it.  So to comply with the alignment
5694 		 requirement but not waste file space, we adjust
5695 		 p_offset for just this segment.  (OFF_ADJUST is
5696 		 subtracted from OFF later.)  This may put p_offset
5697 		 past the end of file, but that shouldn't matter.  */
5698 	    }
5699 	  else
5700 	    off_adjust = 0;
5701 	}
5702       /* Make sure the .dynamic section is the first section in the
5703 	 PT_DYNAMIC segment.  */
5704       else if (p->p_type == PT_DYNAMIC
5705 	       && m->count > 1
5706 	       && strcmp (m->sections[0]->name, ".dynamic") != 0)
5707 	{
5708 	  _bfd_error_handler
5709 	    (_("%pB: The first section in the PT_DYNAMIC segment"
5710 	       " is not the .dynamic section"),
5711 	     abfd);
5712 	  bfd_set_error (bfd_error_bad_value);
5713 	  return false;
5714 	}
5715       /* Set the note section type to SHT_NOTE.  */
5716       else if (p->p_type == PT_NOTE)
5717 	for (i = 0; i < m->count; i++)
5718 	  elf_section_type (m->sections[i]) = SHT_NOTE;
5719 
5720       if (m->includes_filehdr)
5721 	{
5722 	  if (!m->p_flags_valid)
5723 	    p->p_flags |= PF_R;
5724 	  p->p_filesz = bed->s->sizeof_ehdr;
5725 	  p->p_memsz = bed->s->sizeof_ehdr;
5726 	  if (p->p_type == PT_LOAD)
5727 	    {
5728 	      if (m->count > 0)
5729 		{
5730 		  if (p->p_vaddr < (bfd_vma) off
5731 		      || (!m->p_paddr_valid
5732 			  && p->p_paddr < (bfd_vma) off))
5733 		    {
5734 		      _bfd_error_handler
5735 			(_("%pB: not enough room for program headers,"
5736 			   " try linking with -N"),
5737 			 abfd);
5738 		      bfd_set_error (bfd_error_bad_value);
5739 		      return false;
5740 		    }
5741 		  p->p_vaddr -= off;
5742 		  if (!m->p_paddr_valid)
5743 		    p->p_paddr -= off;
5744 		}
5745 	    }
5746 	  else if (sorted_seg_map[0]->includes_filehdr)
5747 	    {
5748 	      Elf_Internal_Phdr *filehdr = phdrs + sorted_seg_map[0]->idx;
5749 	      p->p_vaddr = filehdr->p_vaddr;
5750 	      if (!m->p_paddr_valid)
5751 		p->p_paddr = filehdr->p_paddr;
5752 	    }
5753 	}
5754 
5755       if (m->includes_phdrs)
5756 	{
5757 	  if (!m->p_flags_valid)
5758 	    p->p_flags |= PF_R;
5759 	  p->p_filesz += actual * bed->s->sizeof_phdr;
5760 	  p->p_memsz += actual * bed->s->sizeof_phdr;
5761 	  if (!m->includes_filehdr)
5762 	    {
5763 	      if (p->p_type == PT_LOAD)
5764 		{
5765 		  elf_elfheader (abfd)->e_phoff = p->p_offset;
5766 		  if (m->count > 0)
5767 		    {
5768 		      p->p_vaddr -= off - p->p_offset;
5769 		      if (!m->p_paddr_valid)
5770 			p->p_paddr -= off - p->p_offset;
5771 		    }
5772 		}
5773 	      else if (phdr_load_seg != NULL)
5774 		{
5775 		  Elf_Internal_Phdr *phdr = phdrs + phdr_load_seg->idx;
5776 		  bfd_vma phdr_off = 0;  /* Octets.  */
5777 		  if (phdr_load_seg->includes_filehdr)
5778 		    phdr_off = bed->s->sizeof_ehdr;
5779 		  p->p_vaddr = phdr->p_vaddr + phdr_off;
5780 		  if (!m->p_paddr_valid)
5781 		    p->p_paddr = phdr->p_paddr + phdr_off;
5782 		  p->p_offset = phdr->p_offset + phdr_off;
5783 		}
5784 	      else
5785 		p->p_offset = bed->s->sizeof_ehdr;
5786 	    }
5787 	}
5788 
5789       if (p->p_type == PT_LOAD
5790 	  || (p->p_type == PT_NOTE && bfd_get_format (abfd) == bfd_core))
5791 	{
5792 	  if (!m->includes_filehdr && !m->includes_phdrs)
5793 	    {
5794 	      p->p_offset = off;
5795 	      if (no_contents)
5796 		{
5797 		  /* Put meaningless p_offset for PT_LOAD segments
5798 		     without file contents somewhere within the first
5799 		     page, in an attempt to not point past EOF.  */
5800 		  bfd_size_type align = maxpagesize;
5801 		  if (align < p->p_align)
5802 		    align = p->p_align;
5803 		  if (align < 1)
5804 		    align = 1;
5805 		  p->p_offset = off % align;
5806 		}
5807 	    }
5808 	  else
5809 	    {
5810 	      file_ptr adjust;  /* Octets.  */
5811 
5812 	      adjust = off - (p->p_offset + p->p_filesz);
5813 	      if (!no_contents)
5814 		p->p_filesz += adjust;
5815 	      p->p_memsz += adjust;
5816 	    }
5817 	}
5818 
5819       /* Set up p_filesz, p_memsz, p_align and p_flags from the section
5820 	 maps.  Set filepos for sections in PT_LOAD segments, and in
5821 	 core files, for sections in PT_NOTE segments.
5822 	 assign_file_positions_for_non_load_sections will set filepos
5823 	 for other sections and update p_filesz for other segments.  */
5824       for (i = 0, secpp = m->sections; i < m->count; i++, secpp++)
5825 	{
5826 	  asection *sec;
5827 	  bfd_size_type align;
5828 	  Elf_Internal_Shdr *this_hdr;
5829 
5830 	  sec = *secpp;
5831 	  this_hdr = &elf_section_data (sec)->this_hdr;
5832 	  align = (bfd_size_type) 1 << bfd_section_alignment (sec);
5833 
5834 	  if ((p->p_type == PT_LOAD
5835 	       || p->p_type == PT_TLS)
5836 	      && (this_hdr->sh_type != SHT_NOBITS
5837 		  || ((this_hdr->sh_flags & SHF_ALLOC) != 0
5838 		      && ((this_hdr->sh_flags & SHF_TLS) == 0
5839 			  || p->p_type == PT_TLS))))
5840 	    {
5841 	      bfd_vma p_start = p->p_paddr;		/* Octets.  */
5842 	      bfd_vma p_end = p_start + p->p_memsz;	/* Octets.  */
5843 	      bfd_vma s_start = sec->lma * opb;		/* Octets.  */
5844 	      bfd_vma adjust = s_start - p_end;		/* Octets.  */
5845 
5846 	      if (adjust != 0
5847 		  && (s_start < p_end
5848 		      || p_end < p_start))
5849 		{
5850 		  _bfd_error_handler
5851 		    /* xgettext:c-format */
5852 		    (_("%pB: section %pA lma %#" PRIx64
5853 		       " adjusted to %#" PRIx64),
5854 		     abfd, sec, (uint64_t) s_start / opb,
5855 		     (uint64_t) p_end / opb);
5856 		  adjust = 0;
5857 		  sec->lma = p_end / opb;
5858 		}
5859 	      p->p_memsz += adjust;
5860 
5861 	      if (p->p_type == PT_LOAD)
5862 		{
5863 		  if (this_hdr->sh_type != SHT_NOBITS)
5864 		    {
5865 		      off_adjust = 0;
5866 		      if (p->p_filesz + adjust < p->p_memsz)
5867 			{
5868 			  /* We have a PROGBITS section following NOBITS ones.
5869 			     Allocate file space for the NOBITS section(s) and
5870 			     zero it.  */
5871 			  adjust = p->p_memsz - p->p_filesz;
5872 			  if (!write_zeros (abfd, off, adjust))
5873 			    return false;
5874 			}
5875 		    }
5876 		  /* We only adjust sh_offset in SHT_NOBITS sections
5877 		     as would seem proper for their address when the
5878 		     section is first in the segment.  sh_offset
5879 		     doesn't really have any significance for
5880 		     SHT_NOBITS anyway, apart from a notional position
5881 		     relative to other sections.  Historically we
5882 		     didn't bother with adjusting sh_offset and some
5883 		     programs depend on it not being adjusted.  See
5884 		     pr12921 and pr25662.  */
5885 		  if (this_hdr->sh_type != SHT_NOBITS || i == 0)
5886 		    {
5887 		      off += adjust;
5888 		      if (this_hdr->sh_type == SHT_NOBITS)
5889 			off_adjust += adjust;
5890 		    }
5891 		}
5892 	      if (this_hdr->sh_type != SHT_NOBITS)
5893 		p->p_filesz += adjust;
5894 	    }
5895 
5896 	  if (p->p_type == PT_NOTE && bfd_get_format (abfd) == bfd_core)
5897 	    {
5898 	      /* The section at i == 0 is the one that actually contains
5899 		 everything.  */
5900 	      if (i == 0)
5901 		{
5902 		  this_hdr->sh_offset = sec->filepos = off;
5903 		  off += this_hdr->sh_size;
5904 		  p->p_filesz = this_hdr->sh_size;
5905 		  p->p_memsz = 0;
5906 		  p->p_align = 1;
5907 		}
5908 	      else
5909 		{
5910 		  /* The rest are fake sections that shouldn't be written.  */
5911 		  sec->filepos = 0;
5912 		  sec->size = 0;
5913 		  sec->flags = 0;
5914 		  continue;
5915 		}
5916 	    }
5917 	  else
5918 	    {
5919 	      if (p->p_type == PT_LOAD)
5920 		{
5921 		  this_hdr->sh_offset = sec->filepos = off;
5922 		  if (this_hdr->sh_type != SHT_NOBITS)
5923 		    off += this_hdr->sh_size;
5924 		}
5925 	      else if (this_hdr->sh_type == SHT_NOBITS
5926 		       && (this_hdr->sh_flags & SHF_TLS) != 0
5927 		       && this_hdr->sh_offset == 0)
5928 		{
5929 		  /* This is a .tbss section that didn't get a PT_LOAD.
5930 		     (See _bfd_elf_map_sections_to_segments "Create a
5931 		     final PT_LOAD".)  Set sh_offset to the value it
5932 		     would have if we had created a zero p_filesz and
5933 		     p_memsz PT_LOAD header for the section.  This
5934 		     also makes the PT_TLS header have the same
5935 		     p_offset value.  */
5936 		  bfd_vma adjust = vma_page_aligned_bias (this_hdr->sh_addr,
5937 							  off, align);
5938 		  this_hdr->sh_offset = sec->filepos = off + adjust;
5939 		}
5940 
5941 	      if (this_hdr->sh_type != SHT_NOBITS)
5942 		{
5943 		  p->p_filesz += this_hdr->sh_size;
5944 		  /* A load section without SHF_ALLOC is something like
5945 		     a note section in a PT_NOTE segment.  These take
5946 		     file space but are not loaded into memory.  */
5947 		  if ((this_hdr->sh_flags & SHF_ALLOC) != 0)
5948 		    p->p_memsz += this_hdr->sh_size;
5949 		}
5950 	      else if ((this_hdr->sh_flags & SHF_ALLOC) != 0)
5951 		{
5952 		  if (p->p_type == PT_TLS)
5953 		    p->p_memsz += this_hdr->sh_size;
5954 
5955 		  /* .tbss is special.  It doesn't contribute to p_memsz of
5956 		     normal segments.  */
5957 		  else if ((this_hdr->sh_flags & SHF_TLS) == 0)
5958 		    p->p_memsz += this_hdr->sh_size;
5959 		}
5960 
5961 	      if (align > p->p_align
5962 		  && !m->p_align_valid
5963 		  && (p->p_type != PT_LOAD
5964 		      || (abfd->flags & D_PAGED) == 0))
5965 		p->p_align = align;
5966 	    }
5967 
5968 	  if (!m->p_flags_valid)
5969 	    {
5970 	      p->p_flags |= PF_R;
5971 	      if ((this_hdr->sh_flags & SHF_EXECINSTR) != 0)
5972 		p->p_flags |= PF_X;
5973 	      if ((this_hdr->sh_flags & SHF_WRITE) != 0)
5974 		p->p_flags |= PF_W;
5975 	    }
5976 	}
5977 
5978       off -= off_adjust;
5979 
5980       /* PR ld/20815 - Check that the program header segment, if
5981 	 present, will be loaded into memory.  */
5982       if (p->p_type == PT_PHDR
5983 	  && phdr_load_seg == NULL
5984 	  && !(bed->elf_backend_allow_non_load_phdr != NULL
5985 	       && bed->elf_backend_allow_non_load_phdr (abfd, phdrs, alloc)))
5986 	{
5987 	  /* The fix for this error is usually to edit the linker script being
5988 	     used and set up the program headers manually.  Either that or
5989 	     leave room for the headers at the start of the SECTIONS.  */
5990 	  _bfd_error_handler (_("%pB: error: PHDR segment not covered"
5991 				" by LOAD segment"),
5992 			      abfd);
5993 	  if (link_info == NULL)
5994 	    return false;
5995 	  /* Arrange for the linker to exit with an error, deleting
5996 	     the output file unless --noinhibit-exec is given.  */
5997 	  link_info->callbacks->info ("%X");
5998 	}
5999 
6000       /* Check that all sections are in a PT_LOAD segment.
6001 	 Don't check funky gdb generated core files.  */
6002       if (p->p_type == PT_LOAD && bfd_get_format (abfd) != bfd_core)
6003 	{
6004 	  bool check_vma = true;
6005 
6006 	  for (i = 1; i < m->count; i++)
6007 	    if (m->sections[i]->vma == m->sections[i - 1]->vma
6008 		&& ELF_SECTION_SIZE (&(elf_section_data (m->sections[i])
6009 				       ->this_hdr), p) != 0
6010 		&& ELF_SECTION_SIZE (&(elf_section_data (m->sections[i - 1])
6011 				       ->this_hdr), p) != 0)
6012 	      {
6013 		/* Looks like we have overlays packed into the segment.  */
6014 		check_vma = false;
6015 		break;
6016 	      }
6017 
6018 	  for (i = 0; i < m->count; i++)
6019 	    {
6020 	      Elf_Internal_Shdr *this_hdr;
6021 	      asection *sec;
6022 
6023 	      sec = m->sections[i];
6024 	      this_hdr = &(elf_section_data(sec)->this_hdr);
6025 	      if (!ELF_SECTION_IN_SEGMENT_1 (this_hdr, p, check_vma, 0)
6026 		  && !ELF_TBSS_SPECIAL (this_hdr, p))
6027 		{
6028 		  _bfd_error_handler
6029 		    /* xgettext:c-format */
6030 		    (_("%pB: section `%pA' can't be allocated in segment %d"),
6031 		     abfd, sec, j);
6032 		  print_segment_map (m);
6033 		}
6034 	    }
6035 
6036 	  if (p_align_p)
6037 	    p->p_align = p_align;
6038 	}
6039     }
6040 
6041   elf_next_file_pos (abfd) = off;
6042 
6043   if (link_info != NULL
6044       && phdr_load_seg != NULL
6045       && phdr_load_seg->includes_filehdr)
6046     {
6047       /* There is a segment that contains both the file headers and the
6048 	 program headers, so provide a symbol __ehdr_start pointing there.
6049 	 A program can use this to examine itself robustly.  */
6050 
6051       struct elf_link_hash_entry *hash
6052 	= elf_link_hash_lookup (elf_hash_table (link_info), "__ehdr_start",
6053 				false, false, true);
6054       /* If the symbol was referenced and not defined, define it.  */
6055       if (hash != NULL
6056 	  && (hash->root.type == bfd_link_hash_new
6057 	      || hash->root.type == bfd_link_hash_undefined
6058 	      || hash->root.type == bfd_link_hash_undefweak
6059 	      || hash->root.type == bfd_link_hash_common))
6060 	{
6061 	  asection *s = NULL;
6062 	  bfd_vma filehdr_vaddr = phdrs[phdr_load_seg->idx].p_vaddr / opb;
6063 
6064 	  if (phdr_load_seg->count != 0)
6065 	    /* The segment contains sections, so use the first one.  */
6066 	    s = phdr_load_seg->sections[0];
6067 	  else
6068 	    /* Use the first (i.e. lowest-addressed) section in any segment.  */
6069 	    for (m = elf_seg_map (abfd); m != NULL; m = m->next)
6070 	      if (m->p_type == PT_LOAD && m->count != 0)
6071 		{
6072 		  s = m->sections[0];
6073 		  break;
6074 		}
6075 
6076 	  if (s != NULL)
6077 	    {
6078 	      hash->root.u.def.value = filehdr_vaddr - s->vma;
6079 	      hash->root.u.def.section = s;
6080 	    }
6081 	  else
6082 	    {
6083 	      hash->root.u.def.value = filehdr_vaddr;
6084 	      hash->root.u.def.section = bfd_abs_section_ptr;
6085 	    }
6086 
6087 	  hash->root.type = bfd_link_hash_defined;
6088 	  hash->def_regular = 1;
6089 	  hash->non_elf = 0;
6090 	}
6091     }
6092 
6093   return true;
6094 }
6095 
6096 /* Determine if a bfd is a debuginfo file.  Unfortunately there
6097    is no defined method for detecting such files, so we have to
6098    use heuristics instead.  */
6099 
6100 bool
6101 is_debuginfo_file (bfd *abfd)
6102 {
6103   if (abfd == NULL || bfd_get_flavour (abfd) != bfd_target_elf_flavour)
6104     return false;
6105 
6106   Elf_Internal_Shdr **start_headers = elf_elfsections (abfd);
6107   Elf_Internal_Shdr **end_headers = start_headers + elf_numsections (abfd);
6108   Elf_Internal_Shdr **headerp;
6109 
6110   for (headerp = start_headers; headerp < end_headers; headerp ++)
6111     {
6112       Elf_Internal_Shdr *header = * headerp;
6113 
6114       /* Debuginfo files do not have any allocated SHT_PROGBITS sections.
6115 	 The only allocated sections are SHT_NOBITS or SHT_NOTES.  */
6116       if ((header->sh_flags & SHF_ALLOC) == SHF_ALLOC
6117 	  && header->sh_type != SHT_NOBITS
6118 	  && header->sh_type != SHT_NOTE)
6119 	return false;
6120     }
6121 
6122   return true;
6123 }
6124 
6125 /* Assign file positions for other sections, except for compressed debug
6126    and sections assigned in _bfd_elf_assign_file_positions_for_non_load.  */
6127 
6128 static bool
6129 assign_file_positions_for_non_load_sections (bfd *abfd,
6130 					     struct bfd_link_info *link_info)
6131 {
6132   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
6133   Elf_Internal_Shdr **i_shdrpp;
6134   Elf_Internal_Shdr **hdrpp, **end_hdrpp;
6135   Elf_Internal_Phdr *phdrs;
6136   Elf_Internal_Phdr *p;
6137   struct elf_segment_map *m;
6138   file_ptr off;
6139   unsigned int opb = bfd_octets_per_byte (abfd, NULL);
6140   bfd_vma maxpagesize;
6141 
6142   if (link_info != NULL)
6143     maxpagesize = link_info->maxpagesize;
6144   else
6145     maxpagesize = bed->maxpagesize;
6146   i_shdrpp = elf_elfsections (abfd);
6147   end_hdrpp = i_shdrpp + elf_numsections (abfd);
6148   off = elf_next_file_pos (abfd);
6149   for (hdrpp = i_shdrpp + 1; hdrpp < end_hdrpp; hdrpp++)
6150     {
6151       Elf_Internal_Shdr *hdr;
6152       bfd_vma align;
6153 
6154       hdr = *hdrpp;
6155       if (hdr->bfd_section != NULL
6156 	  && (hdr->bfd_section->filepos != 0
6157 	      || (hdr->sh_type == SHT_NOBITS
6158 		  && hdr->contents == NULL)))
6159 	BFD_ASSERT (hdr->sh_offset == hdr->bfd_section->filepos);
6160       else if ((hdr->sh_flags & SHF_ALLOC) != 0)
6161 	{
6162 	  if (hdr->sh_size != 0
6163 	      /* PR 24717 - debuginfo files are known to be not strictly
6164 		 compliant with the ELF standard.  In particular they often
6165 		 have .note.gnu.property sections that are outside of any
6166 		 loadable segment.  This is not a problem for such files,
6167 		 so do not warn about them.  */
6168 	      && ! is_debuginfo_file (abfd))
6169 	    _bfd_error_handler
6170 	      /* xgettext:c-format */
6171 	      (_("%pB: warning: allocated section `%s' not in segment"),
6172 	       abfd,
6173 	       (hdr->bfd_section == NULL
6174 		? "*unknown*"
6175 		: hdr->bfd_section->name));
6176 	  /* We don't need to page align empty sections.  */
6177 	  if ((abfd->flags & D_PAGED) != 0 && hdr->sh_size != 0)
6178 	    align = maxpagesize;
6179 	  else
6180 	    align = hdr->sh_addralign & -hdr->sh_addralign;
6181 	  off += vma_page_aligned_bias (hdr->sh_addr, off, align);
6182 	  off = _bfd_elf_assign_file_position_for_section (hdr, off,
6183 							   false);
6184 	}
6185       else if (((hdr->sh_type == SHT_REL || hdr->sh_type == SHT_RELA)
6186 		&& hdr->bfd_section == NULL)
6187 	       /* We don't know the offset of these sections yet:
6188 		  their size has not been decided.  */
6189 	       || (abfd->is_linker_output
6190 		   && hdr->bfd_section != NULL
6191 		   && (hdr->sh_name == -1u
6192 		       || bfd_section_is_ctf (hdr->bfd_section)))
6193 	       || hdr == i_shdrpp[elf_onesymtab (abfd)]
6194 	       || (elf_symtab_shndx_list (abfd) != NULL
6195 		   && hdr == i_shdrpp[elf_symtab_shndx_list (abfd)->ndx])
6196 	       || hdr == i_shdrpp[elf_strtab_sec (abfd)]
6197 	       || hdr == i_shdrpp[elf_shstrtab_sec (abfd)])
6198 	hdr->sh_offset = -1;
6199       else
6200 	off = _bfd_elf_assign_file_position_for_section (hdr, off, true);
6201     }
6202   elf_next_file_pos (abfd) = off;
6203 
6204   /* Now that we have set the section file positions, we can set up
6205      the file positions for the non PT_LOAD segments.  */
6206   phdrs = elf_tdata (abfd)->phdr;
6207   for (m = elf_seg_map (abfd), p = phdrs; m != NULL; m = m->next, p++)
6208     {
6209       if (p->p_type == PT_GNU_RELRO)
6210 	{
6211 	  bfd_vma start, end;  /* Bytes.  */
6212 	  bool ok;
6213 
6214 	  if (link_info != NULL)
6215 	    {
6216 	      /* During linking the range of the RELRO segment is passed
6217 		 in link_info.  Note that there may be padding between
6218 		 relro_start and the first RELRO section.  */
6219 	      start = link_info->relro_start;
6220 	      end = link_info->relro_end;
6221 	    }
6222 	  else if (m->count != 0)
6223 	    {
6224 	      if (!m->p_size_valid)
6225 		abort ();
6226 	      start = m->sections[0]->vma;
6227 	      end = start + m->p_size / opb;
6228 	    }
6229 	  else
6230 	    {
6231 	      start = 0;
6232 	      end = 0;
6233 	    }
6234 
6235 	  ok = false;
6236 	  if (start < end)
6237 	    {
6238 	      struct elf_segment_map *lm;
6239 	      const Elf_Internal_Phdr *lp;
6240 	      unsigned int i;
6241 
6242 	      /* Find a LOAD segment containing a section in the RELRO
6243 		 segment.  */
6244 	      for (lm = elf_seg_map (abfd), lp = phdrs;
6245 		   lm != NULL;
6246 		   lm = lm->next, lp++)
6247 		{
6248 		  if (lp->p_type == PT_LOAD
6249 		      && lm->count != 0
6250 		      && (lm->sections[lm->count - 1]->vma
6251 			  + (!IS_TBSS (lm->sections[lm->count - 1])
6252 			     ? lm->sections[lm->count - 1]->size / opb
6253 			     : 0)) > start
6254 		      && lm->sections[0]->vma < end)
6255 		    break;
6256 		}
6257 
6258 	      if (lm != NULL)
6259 		{
6260 		  /* Find the section starting the RELRO segment.  */
6261 		  for (i = 0; i < lm->count; i++)
6262 		    {
6263 		      asection *s = lm->sections[i];
6264 		      if (s->vma >= start
6265 			  && s->vma < end
6266 			  && s->size != 0)
6267 			break;
6268 		    }
6269 
6270 		  if (i < lm->count)
6271 		    {
6272 		      p->p_vaddr = lm->sections[i]->vma * opb;
6273 		      p->p_paddr = lm->sections[i]->lma * opb;
6274 		      p->p_offset = lm->sections[i]->filepos;
6275 		      p->p_memsz = end * opb - p->p_vaddr;
6276 		      p->p_filesz = p->p_memsz;
6277 
6278 		      /* The RELRO segment typically ends a few bytes
6279 			 into .got.plt but other layouts are possible.
6280 			 In cases where the end does not match any
6281 			 loaded section (for instance is in file
6282 			 padding), trim p_filesz back to correspond to
6283 			 the end of loaded section contents.  */
6284 		      if (p->p_filesz > lp->p_vaddr + lp->p_filesz - p->p_vaddr)
6285 			p->p_filesz = lp->p_vaddr + lp->p_filesz - p->p_vaddr;
6286 
6287 		      /* Preserve the alignment and flags if they are
6288 			 valid.  The gold linker generates RW/4 for
6289 			 the PT_GNU_RELRO section.  It is better for
6290 			 objcopy/strip to honor these attributes
6291 			 otherwise gdb will choke when using separate
6292 			 debug files.  */
6293 		      if (!m->p_align_valid)
6294 			p->p_align = 1;
6295 		      if (!m->p_flags_valid)
6296 			p->p_flags = PF_R;
6297 		      ok = true;
6298 		    }
6299 		}
6300 	    }
6301 
6302 	  if (!ok)
6303 	    {
6304 	      if (link_info != NULL)
6305 		_bfd_error_handler
6306 		  (_("%pB: warning: unable to allocate any sections"
6307 		     " to PT_GNU_RELRO segment"),
6308 		   abfd);
6309 	      memset (p, 0, sizeof *p);
6310 	    }
6311 	}
6312       else if (p->p_type == PT_GNU_STACK)
6313 	{
6314 	  if (m->p_size_valid)
6315 	    p->p_memsz = m->p_size;
6316 	}
6317       else if (m->count != 0)
6318 	{
6319 	  unsigned int i;
6320 
6321 	  if (p->p_type != PT_LOAD
6322 	      && (p->p_type != PT_NOTE
6323 		  || bfd_get_format (abfd) != bfd_core))
6324 	    {
6325 	      /* A user specified segment layout may include a PHDR
6326 		 segment that overlaps with a LOAD segment...  */
6327 	      if (p->p_type == PT_PHDR)
6328 		{
6329 		  m->count = 0;
6330 		  continue;
6331 		}
6332 
6333 	      if (m->includes_filehdr || m->includes_phdrs)
6334 		{
6335 		  /* PR 17512: file: 2195325e.  */
6336 		  _bfd_error_handler
6337 		    (_("%pB: error: non-load segment %d includes file header "
6338 		       "and/or program header"),
6339 		     abfd, (int) (p - phdrs));
6340 		  return false;
6341 		}
6342 
6343 	      p->p_filesz = 0;
6344 	      p->p_offset = m->sections[0]->filepos;
6345 	      for (i = m->count; i-- != 0;)
6346 		{
6347 		  asection *sect = m->sections[i];
6348 		  Elf_Internal_Shdr *hdr = &elf_section_data (sect)->this_hdr;
6349 		  if (hdr->sh_type != SHT_NOBITS)
6350 		    {
6351 		      p->p_filesz = sect->filepos - p->p_offset + hdr->sh_size;
6352 		      /* NB: p_memsz of the loadable PT_NOTE segment
6353 			 should be the same as p_filesz.  */
6354 		      if (p->p_type == PT_NOTE
6355 			  && (hdr->sh_flags & SHF_ALLOC) != 0)
6356 			p->p_memsz = p->p_filesz;
6357 		      break;
6358 		    }
6359 		}
6360 	    }
6361 	}
6362     }
6363 
6364   return true;
6365 }
6366 
6367 static elf_section_list *
6368 find_section_in_list (unsigned int i, elf_section_list * list)
6369 {
6370   for (;list != NULL; list = list->next)
6371     if (list->ndx == i)
6372       break;
6373   return list;
6374 }
6375 
6376 /* Work out the file positions of all the sections.  This is called by
6377    _bfd_elf_compute_section_file_positions.  All the section sizes and
6378    VMAs must be known before this is called.
6379 
6380    Reloc sections come in two flavours: Those processed specially as
6381    "side-channel" data attached to a section to which they apply, and
6382    those that bfd doesn't process as relocations.  The latter sort are
6383    stored in a normal bfd section by bfd_section_from_shdr.  We don't
6384    consider the former sort here, unless they form part of the loadable
6385    image.  Reloc sections not assigned here (and compressed debugging
6386    sections and CTF sections which nothing else in the file can rely
6387    upon) will be handled later by assign_file_positions_for_relocs.
6388 
6389    We also don't set the positions of the .symtab and .strtab here.  */
6390 
6391 static bool
6392 assign_file_positions_except_relocs (bfd *abfd,
6393 				     struct bfd_link_info *link_info)
6394 {
6395   struct elf_obj_tdata *tdata = elf_tdata (abfd);
6396   Elf_Internal_Ehdr *i_ehdrp = elf_elfheader (abfd);
6397   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
6398   unsigned int alloc;
6399 
6400   if ((abfd->flags & (EXEC_P | DYNAMIC)) == 0
6401       && bfd_get_format (abfd) != bfd_core)
6402     {
6403       Elf_Internal_Shdr ** const i_shdrpp = elf_elfsections (abfd);
6404       unsigned int num_sec = elf_numsections (abfd);
6405       Elf_Internal_Shdr **hdrpp;
6406       unsigned int i;
6407       file_ptr off;
6408 
6409       /* Start after the ELF header.  */
6410       off = i_ehdrp->e_ehsize;
6411 
6412       /* We are not creating an executable, which means that we are
6413 	 not creating a program header, and that the actual order of
6414 	 the sections in the file is unimportant.  */
6415       for (i = 1, hdrpp = i_shdrpp + 1; i < num_sec; i++, hdrpp++)
6416 	{
6417 	  Elf_Internal_Shdr *hdr;
6418 
6419 	  hdr = *hdrpp;
6420 	  if (((hdr->sh_type == SHT_REL || hdr->sh_type == SHT_RELA)
6421 	       && hdr->bfd_section == NULL)
6422 	      /* Do not assign offsets for these sections yet: we don't know
6423 		 their sizes.  */
6424 	      || (abfd->is_linker_output
6425 		  && hdr->bfd_section != NULL
6426 		  && (hdr->sh_name == -1u
6427 		      || bfd_section_is_ctf (hdr->bfd_section)))
6428 	      || i == elf_onesymtab (abfd)
6429 	      || (elf_symtab_shndx_list (abfd) != NULL
6430 		  && hdr == i_shdrpp[elf_symtab_shndx_list (abfd)->ndx])
6431 	      || i == elf_strtab_sec (abfd)
6432 	      || i == elf_shstrtab_sec (abfd))
6433 	    {
6434 	      hdr->sh_offset = -1;
6435 	    }
6436 	  else
6437 	    off = _bfd_elf_assign_file_position_for_section (hdr, off, true);
6438 	}
6439 
6440       elf_next_file_pos (abfd) = off;
6441       elf_program_header_size (abfd) = 0;
6442     }
6443   else
6444     {
6445       /* Assign file positions for the loaded sections based on the
6446 	 assignment of sections to segments.  */
6447       if (!assign_file_positions_for_load_sections (abfd, link_info))
6448 	return false;
6449 
6450       /* And for non-load sections.  */
6451       if (!assign_file_positions_for_non_load_sections (abfd, link_info))
6452 	return false;
6453     }
6454 
6455   if (!(*bed->elf_backend_modify_headers) (abfd, link_info))
6456     return false;
6457 
6458   /* Write out the program headers.  */
6459   alloc = i_ehdrp->e_phnum;
6460   if (alloc != 0)
6461     {
6462       if (link_info != NULL && ! link_info->no_warn_rwx_segments)
6463 	{
6464 	  /* Memory resident segments with non-zero size and RWX
6465 	     permissions are a security risk, so we generate a warning
6466 	     here if we are creating any.  */
6467 	  unsigned int i;
6468 
6469 	  for (i = 0; i < alloc; i++)
6470 	    {
6471 	      const Elf_Internal_Phdr * phdr = tdata->phdr + i;
6472 
6473 	      if (phdr->p_memsz == 0)
6474 		continue;
6475 
6476 	      if (phdr->p_type == PT_TLS && (phdr->p_flags & PF_X))
6477 		_bfd_error_handler (_("warning: %pB has a TLS segment"
6478 				      " with execute permission"),
6479 				    abfd);
6480 	      else if (phdr->p_type == PT_LOAD
6481 		       && ((phdr->p_flags & (PF_R | PF_W | PF_X))
6482 			   == (PF_R | PF_W | PF_X)))
6483 		_bfd_error_handler (_("warning: %pB has a LOAD segment"
6484 				      " with RWX permissions"),
6485 				    abfd);
6486 	    }
6487 	}
6488 
6489       if (bfd_seek (abfd, i_ehdrp->e_phoff, SEEK_SET) != 0
6490 	  || bed->s->write_out_phdrs (abfd, tdata->phdr, alloc) != 0)
6491 	return false;
6492     }
6493 
6494   return true;
6495 }
6496 
6497 bool
6498 _bfd_elf_init_file_header (bfd *abfd,
6499 			   struct bfd_link_info *info ATTRIBUTE_UNUSED)
6500 {
6501   Elf_Internal_Ehdr *i_ehdrp;	/* Elf file header, internal form.  */
6502   struct elf_strtab_hash *shstrtab;
6503   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
6504 
6505   i_ehdrp = elf_elfheader (abfd);
6506 
6507   shstrtab = _bfd_elf_strtab_init ();
6508   if (shstrtab == NULL)
6509     return false;
6510 
6511   elf_shstrtab (abfd) = shstrtab;
6512 
6513   i_ehdrp->e_ident[EI_MAG0] = ELFMAG0;
6514   i_ehdrp->e_ident[EI_MAG1] = ELFMAG1;
6515   i_ehdrp->e_ident[EI_MAG2] = ELFMAG2;
6516   i_ehdrp->e_ident[EI_MAG3] = ELFMAG3;
6517 
6518   i_ehdrp->e_ident[EI_CLASS] = bed->s->elfclass;
6519   i_ehdrp->e_ident[EI_DATA] =
6520     bfd_big_endian (abfd) ? ELFDATA2MSB : ELFDATA2LSB;
6521   i_ehdrp->e_ident[EI_VERSION] = bed->s->ev_current;
6522 
6523   if ((abfd->flags & DYNAMIC) != 0)
6524     i_ehdrp->e_type = ET_DYN;
6525   else if ((abfd->flags & EXEC_P) != 0)
6526     i_ehdrp->e_type = ET_EXEC;
6527   else if (bfd_get_format (abfd) == bfd_core)
6528     i_ehdrp->e_type = ET_CORE;
6529   else
6530     i_ehdrp->e_type = ET_REL;
6531 
6532   switch (bfd_get_arch (abfd))
6533     {
6534     case bfd_arch_unknown:
6535       i_ehdrp->e_machine = EM_NONE;
6536       break;
6537 
6538       /* There used to be a long list of cases here, each one setting
6539 	 e_machine to the same EM_* macro #defined as ELF_MACHINE_CODE
6540 	 in the corresponding bfd definition.  To avoid duplication,
6541 	 the switch was removed.  Machines that need special handling
6542 	 can generally do it in elf_backend_final_write_processing(),
6543 	 unless they need the information earlier than the final write.
6544 	 Such need can generally be supplied by replacing the tests for
6545 	 e_machine with the conditions used to determine it.  */
6546     default:
6547       i_ehdrp->e_machine = bed->elf_machine_code;
6548     }
6549 
6550   i_ehdrp->e_version = bed->s->ev_current;
6551   i_ehdrp->e_ehsize = bed->s->sizeof_ehdr;
6552 
6553   /* No program header, for now.  */
6554   i_ehdrp->e_phoff = 0;
6555   i_ehdrp->e_phentsize = 0;
6556   i_ehdrp->e_phnum = 0;
6557 
6558   /* Each bfd section is section header entry.  */
6559   i_ehdrp->e_entry = bfd_get_start_address (abfd);
6560   i_ehdrp->e_shentsize = bed->s->sizeof_shdr;
6561 
6562   elf_tdata (abfd)->symtab_hdr.sh_name =
6563     (unsigned int) _bfd_elf_strtab_add (shstrtab, ".symtab", false);
6564   elf_tdata (abfd)->strtab_hdr.sh_name =
6565     (unsigned int) _bfd_elf_strtab_add (shstrtab, ".strtab", false);
6566   elf_tdata (abfd)->shstrtab_hdr.sh_name =
6567     (unsigned int) _bfd_elf_strtab_add (shstrtab, ".shstrtab", false);
6568   if (elf_tdata (abfd)->symtab_hdr.sh_name == (unsigned int) -1
6569       || elf_tdata (abfd)->strtab_hdr.sh_name == (unsigned int) -1
6570       || elf_tdata (abfd)->shstrtab_hdr.sh_name == (unsigned int) -1)
6571     return false;
6572 
6573   return true;
6574 }
6575 
6576 /* Set e_type in ELF header to ET_EXEC for -pie -Ttext-segment=.
6577 
6578    FIXME: We used to have code here to sort the PT_LOAD segments into
6579    ascending order, as per the ELF spec.  But this breaks some programs,
6580    including the Linux kernel.  But really either the spec should be
6581    changed or the programs updated.  */
6582 
6583 bool
6584 _bfd_elf_modify_headers (bfd *obfd, struct bfd_link_info *link_info)
6585 {
6586   if (link_info != NULL && bfd_link_pie (link_info))
6587     {
6588       Elf_Internal_Ehdr *i_ehdrp = elf_elfheader (obfd);
6589       unsigned int num_segments = i_ehdrp->e_phnum;
6590       struct elf_obj_tdata *tdata = elf_tdata (obfd);
6591       Elf_Internal_Phdr *segment = tdata->phdr;
6592       Elf_Internal_Phdr *end_segment = &segment[num_segments];
6593 
6594       /* Find the lowest p_vaddr in PT_LOAD segments.  */
6595       bfd_vma p_vaddr = (bfd_vma) -1;
6596       for (; segment < end_segment; segment++)
6597 	if (segment->p_type == PT_LOAD && p_vaddr > segment->p_vaddr)
6598 	  p_vaddr = segment->p_vaddr;
6599 
6600       /* Set e_type to ET_EXEC if the lowest p_vaddr in PT_LOAD
6601 	 segments is non-zero.  */
6602       if (p_vaddr)
6603 	i_ehdrp->e_type = ET_EXEC;
6604     }
6605   return true;
6606 }
6607 
6608 /* Assign file positions for all the reloc sections which are not part
6609    of the loadable file image, and the file position of section headers.  */
6610 
6611 static bool
6612 _bfd_elf_assign_file_positions_for_non_load (bfd *abfd)
6613 {
6614   file_ptr off;
6615   Elf_Internal_Shdr **shdrpp, **end_shdrpp;
6616   Elf_Internal_Shdr *shdrp;
6617   Elf_Internal_Ehdr *i_ehdrp;
6618   const struct elf_backend_data *bed;
6619 
6620   off = elf_next_file_pos (abfd);
6621 
6622   shdrpp = elf_elfsections (abfd);
6623   end_shdrpp = shdrpp + elf_numsections (abfd);
6624   for (shdrpp++; shdrpp < end_shdrpp; shdrpp++)
6625     {
6626       shdrp = *shdrpp;
6627       if (shdrp->sh_offset == -1)
6628 	{
6629 	  asection *sec = shdrp->bfd_section;
6630 	  if (sec == NULL
6631 	      || shdrp->sh_type == SHT_REL
6632 	      || shdrp->sh_type == SHT_RELA)
6633 	    ;
6634 	  else if (bfd_section_is_ctf (sec))
6635 	    {
6636 	      /* Update section size and contents.	*/
6637 	      shdrp->sh_size = sec->size;
6638 	      shdrp->contents = sec->contents;
6639 	    }
6640 	  else if (shdrp->sh_name == -1u)
6641 	    {
6642 	      const char *name = sec->name;
6643 	      struct bfd_elf_section_data *d;
6644 
6645 	      /* Compress DWARF debug sections.  */
6646 	      if (!bfd_compress_section (abfd, sec, shdrp->contents))
6647 		return false;
6648 
6649 	      if (sec->compress_status == COMPRESS_SECTION_DONE
6650 		  && (abfd->flags & BFD_COMPRESS_GABI) == 0
6651 		  && name[1] == 'd')
6652 		{
6653 		  /* If section is compressed with zlib-gnu, convert
6654 		     section name from .debug_* to .zdebug_*.  */
6655 		  char *new_name = bfd_debug_name_to_zdebug (abfd, name);
6656 		  if (new_name == NULL)
6657 		    return false;
6658 		  name = new_name;
6659 		}
6660 	      /* Add section name to section name section.  */
6661 	      shdrp->sh_name
6662 		= (unsigned int) _bfd_elf_strtab_add (elf_shstrtab (abfd),
6663 						      name, false);
6664 	      d = elf_section_data (sec);
6665 
6666 	      /* Add reloc section name to section name section.  */
6667 	      if (d->rel.hdr
6668 		  && !_bfd_elf_set_reloc_sh_name (abfd, d->rel.hdr,
6669 						  name, false))
6670 		return false;
6671 	      if (d->rela.hdr
6672 		  && !_bfd_elf_set_reloc_sh_name (abfd, d->rela.hdr,
6673 						  name, true))
6674 		return false;
6675 
6676 	      /* Update section size and contents.  */
6677 	      shdrp->sh_size = sec->size;
6678 	      shdrp->contents = sec->contents;
6679 	      sec->contents = NULL;
6680 	    }
6681 
6682 	  off = _bfd_elf_assign_file_position_for_section (shdrp, off, true);
6683 	}
6684     }
6685 
6686   /* Place section name section after DWARF debug sections have been
6687      compressed.  */
6688   _bfd_elf_strtab_finalize (elf_shstrtab (abfd));
6689   shdrp = &elf_tdata (abfd)->shstrtab_hdr;
6690   shdrp->sh_size = _bfd_elf_strtab_size (elf_shstrtab (abfd));
6691   off = _bfd_elf_assign_file_position_for_section (shdrp, off, true);
6692 
6693   /* Place the section headers.  */
6694   i_ehdrp = elf_elfheader (abfd);
6695   bed = get_elf_backend_data (abfd);
6696   off = align_file_position (off, 1 << bed->s->log_file_align);
6697   i_ehdrp->e_shoff = off;
6698   off += i_ehdrp->e_shnum * i_ehdrp->e_shentsize;
6699   elf_next_file_pos (abfd) = off;
6700 
6701   return true;
6702 }
6703 
6704 bool
6705 _bfd_elf_write_object_contents (bfd *abfd)
6706 {
6707   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
6708   Elf_Internal_Shdr **i_shdrp;
6709   bool failed;
6710   unsigned int count, num_sec;
6711   struct elf_obj_tdata *t;
6712 
6713   if (! abfd->output_has_begun
6714       && ! _bfd_elf_compute_section_file_positions (abfd, NULL))
6715     return false;
6716   /* Do not rewrite ELF data when the BFD has been opened for update.
6717      abfd->output_has_begun was set to TRUE on opening, so creation of
6718      new sections, and modification of existing section sizes was
6719      restricted.  This means the ELF header, program headers and
6720      section headers can't have changed.  If the contents of any
6721      sections has been modified, then those changes have already been
6722      written to the BFD.  */
6723   else if (abfd->direction == both_direction)
6724     {
6725       BFD_ASSERT (abfd->output_has_begun);
6726       return true;
6727     }
6728 
6729   i_shdrp = elf_elfsections (abfd);
6730 
6731   failed = false;
6732   bfd_map_over_sections (abfd, bed->s->write_relocs, &failed);
6733   if (failed)
6734     return false;
6735 
6736   if (!_bfd_elf_assign_file_positions_for_non_load (abfd))
6737     return false;
6738 
6739   /* After writing the headers, we need to write the sections too...  */
6740   num_sec = elf_numsections (abfd);
6741   for (count = 1; count < num_sec; count++)
6742     {
6743       i_shdrp[count]->sh_name
6744 	= _bfd_elf_strtab_offset (elf_shstrtab (abfd),
6745 				  i_shdrp[count]->sh_name);
6746       if (bed->elf_backend_section_processing)
6747 	if (!(*bed->elf_backend_section_processing) (abfd, i_shdrp[count]))
6748 	  return false;
6749       if (i_shdrp[count]->contents)
6750 	{
6751 	  bfd_size_type amt = i_shdrp[count]->sh_size;
6752 
6753 	  if (bfd_seek (abfd, i_shdrp[count]->sh_offset, SEEK_SET) != 0
6754 	      || bfd_bwrite (i_shdrp[count]->contents, amt, abfd) != amt)
6755 	    return false;
6756 	}
6757     }
6758 
6759   /* Write out the section header names.  */
6760   t = elf_tdata (abfd);
6761   if (elf_shstrtab (abfd) != NULL
6762       && (bfd_seek (abfd, t->shstrtab_hdr.sh_offset, SEEK_SET) != 0
6763 	  || !_bfd_elf_strtab_emit (abfd, elf_shstrtab (abfd))))
6764     return false;
6765 
6766   if (!(*bed->elf_backend_final_write_processing) (abfd))
6767     return false;
6768 
6769   if (!bed->s->write_shdrs_and_ehdr (abfd))
6770     return false;
6771 
6772   /* This is last since write_shdrs_and_ehdr can touch i_shdrp[0].  */
6773   if (t->o->build_id.after_write_object_contents != NULL
6774       && !(*t->o->build_id.after_write_object_contents) (abfd))
6775     return false;
6776   if (t->o->package_metadata.after_write_object_contents != NULL
6777       && !(*t->o->package_metadata.after_write_object_contents) (abfd))
6778     return false;
6779 
6780   return true;
6781 }
6782 
6783 bool
6784 _bfd_elf_write_corefile_contents (bfd *abfd)
6785 {
6786   /* Hopefully this can be done just like an object file.  */
6787   return _bfd_elf_write_object_contents (abfd);
6788 }
6789 
6790 /* Given a section, search the header to find them.  */
6791 
6792 unsigned int
6793 _bfd_elf_section_from_bfd_section (bfd *abfd, struct bfd_section *asect)
6794 {
6795   const struct elf_backend_data *bed;
6796   unsigned int sec_index;
6797 
6798   if (elf_section_data (asect) != NULL
6799       && elf_section_data (asect)->this_idx != 0)
6800     return elf_section_data (asect)->this_idx;
6801 
6802   if (bfd_is_abs_section (asect))
6803     sec_index = SHN_ABS;
6804   else if (bfd_is_com_section (asect))
6805     sec_index = SHN_COMMON;
6806   else if (bfd_is_und_section (asect))
6807     sec_index = SHN_UNDEF;
6808   else
6809     sec_index = SHN_BAD;
6810 
6811   bed = get_elf_backend_data (abfd);
6812   if (bed->elf_backend_section_from_bfd_section)
6813     {
6814       int retval = sec_index;
6815 
6816       if ((*bed->elf_backend_section_from_bfd_section) (abfd, asect, &retval))
6817 	return retval;
6818     }
6819 
6820   if (sec_index == SHN_BAD)
6821     bfd_set_error (bfd_error_nonrepresentable_section);
6822 
6823   return sec_index;
6824 }
6825 
6826 /* Given a BFD symbol, return the index in the ELF symbol table, or -1
6827    on error.  */
6828 
6829 int
6830 _bfd_elf_symbol_from_bfd_symbol (bfd *abfd, asymbol **asym_ptr_ptr)
6831 {
6832   asymbol *asym_ptr = *asym_ptr_ptr;
6833   int idx;
6834   flagword flags = asym_ptr->flags;
6835 
6836   /* When gas creates relocations against local labels, it creates its
6837      own symbol for the section, but does put the symbol into the
6838      symbol chain, so udata is 0.  When the linker is generating
6839      relocatable output, this section symbol may be for one of the
6840      input sections rather than the output section.  */
6841   if (asym_ptr->udata.i == 0
6842       && (flags & BSF_SECTION_SYM)
6843       && asym_ptr->section)
6844     {
6845       asection *sec;
6846 
6847       sec = asym_ptr->section;
6848       if (sec->owner != abfd && sec->output_section != NULL)
6849 	sec = sec->output_section;
6850       if (sec->owner == abfd
6851 	  && sec->index < elf_num_section_syms (abfd)
6852 	  && elf_section_syms (abfd)[sec->index] != NULL)
6853 	asym_ptr->udata.i = elf_section_syms (abfd)[sec->index]->udata.i;
6854     }
6855 
6856   idx = asym_ptr->udata.i;
6857 
6858   if (idx == 0)
6859     {
6860       /* This case can occur when using --strip-symbol on a symbol
6861 	 which is used in a relocation entry.  */
6862       _bfd_error_handler
6863 	/* xgettext:c-format */
6864 	(_("%pB: symbol `%s' required but not present"),
6865 	 abfd, bfd_asymbol_name (asym_ptr));
6866       bfd_set_error (bfd_error_no_symbols);
6867       return -1;
6868     }
6869 
6870 #if DEBUG & 4
6871   {
6872     fprintf (stderr,
6873 	     "elf_symbol_from_bfd_symbol 0x%.8lx, name = %s, sym num = %d,"
6874 	     " flags = 0x%.8x\n",
6875 	     (long) asym_ptr, asym_ptr->name, idx, flags);
6876     fflush (stderr);
6877   }
6878 #endif
6879 
6880   return idx;
6881 }
6882 
6883 static inline bfd_vma
6884 segment_size (Elf_Internal_Phdr *segment)
6885 {
6886   return (segment->p_memsz > segment->p_filesz
6887 	  ? segment->p_memsz : segment->p_filesz);
6888 }
6889 
6890 
6891 /* Returns the end address of the segment + 1.  */
6892 static inline bfd_vma
6893 segment_end (Elf_Internal_Phdr *segment, bfd_vma start)
6894 {
6895   return start + segment_size (segment);
6896 }
6897 
6898 static inline bfd_size_type
6899 section_size (asection *section, Elf_Internal_Phdr *segment)
6900 {
6901   if ((section->flags & SEC_HAS_CONTENTS) != 0
6902       || (section->flags & SEC_THREAD_LOCAL) == 0
6903       || segment->p_type == PT_TLS)
6904     return section->size;
6905   return 0;
6906 }
6907 
6908 /* Returns TRUE if the given section is contained within the given
6909    segment.  LMA addresses are compared against PADDR when
6910    bed->want_p_paddr_set_to_zero is false, VMA against VADDR when true.  */
6911 static bool
6912 is_contained_by (asection *section, Elf_Internal_Phdr *segment,
6913 		 bfd_vma paddr, bfd_vma vaddr, unsigned int opb,
6914 		 const struct elf_backend_data *bed)
6915 {
6916   bfd_vma seg_addr = !bed->want_p_paddr_set_to_zero ? paddr : vaddr;
6917   bfd_vma addr = !bed->want_p_paddr_set_to_zero ? section->lma : section->vma;
6918   bfd_vma octet;
6919   if (_bfd_mul_overflow (addr, opb, &octet))
6920     return false;
6921   /* The third and fourth lines below are testing that the section end
6922      address is within the segment.  It's written this way to avoid
6923      overflow.  Add seg_addr + section_size to both sides of the
6924      inequality to make it obvious.  */
6925   return (octet >= seg_addr
6926 	  && segment_size (segment) >= section_size (section, segment)
6927 	  && (octet - seg_addr
6928 	      <= segment_size (segment) - section_size (section, segment)));
6929 }
6930 
6931 /* Handle PT_NOTE segment.  */
6932 static bool
6933 is_note (asection *s, Elf_Internal_Phdr *p)
6934 {
6935   return (p->p_type == PT_NOTE
6936 	  && elf_section_type (s) == SHT_NOTE
6937 	  && (ufile_ptr) s->filepos >= p->p_offset
6938 	  && p->p_filesz >= s->size
6939 	  && (ufile_ptr) s->filepos - p->p_offset <= p->p_filesz - s->size);
6940 }
6941 
6942 /* Rewrite program header information.  */
6943 
6944 static bool
6945 rewrite_elf_program_header (bfd *ibfd, bfd *obfd, bfd_vma maxpagesize)
6946 {
6947   Elf_Internal_Ehdr *iehdr;
6948   struct elf_segment_map *map;
6949   struct elf_segment_map *map_first;
6950   struct elf_segment_map **pointer_to_map;
6951   Elf_Internal_Phdr *segment;
6952   asection *section;
6953   unsigned int i;
6954   unsigned int num_segments;
6955   bool phdr_included = false;
6956   bool p_paddr_valid;
6957   struct elf_segment_map *phdr_adjust_seg = NULL;
6958   unsigned int phdr_adjust_num = 0;
6959   const struct elf_backend_data *bed;
6960   unsigned int opb = bfd_octets_per_byte (ibfd, NULL);
6961 
6962   bed = get_elf_backend_data (ibfd);
6963   iehdr = elf_elfheader (ibfd);
6964 
6965   map_first = NULL;
6966   pointer_to_map = &map_first;
6967 
6968   num_segments = elf_elfheader (ibfd)->e_phnum;
6969 
6970   /* The complicated case when p_vaddr is 0 is to handle the Solaris
6971      linker, which generates a PT_INTERP section with p_vaddr and
6972      p_memsz set to 0.  */
6973 #define IS_SOLARIS_PT_INTERP(p, s)					\
6974   (p->p_vaddr == 0							\
6975    && p->p_paddr == 0							\
6976    && p->p_memsz == 0							\
6977    && p->p_filesz > 0							\
6978    && (s->flags & SEC_HAS_CONTENTS) != 0				\
6979    && s->size > 0							\
6980    && (bfd_vma) s->filepos >= p->p_offset				\
6981    && ((bfd_vma) s->filepos + s->size					\
6982        <= p->p_offset + p->p_filesz))
6983 
6984   /* Decide if the given section should be included in the given segment.
6985      A section will be included if:
6986        1. It is within the address space of the segment -- we use the LMA
6987 	  if that is set for the segment and the VMA otherwise,
6988        2. It is an allocated section or a NOTE section in a PT_NOTE
6989 	  segment.
6990        3. There is an output section associated with it,
6991        4. The section has not already been allocated to a previous segment.
6992        5. PT_GNU_STACK segments do not include any sections.
6993        6. PT_TLS segment includes only SHF_TLS sections.
6994        7. SHF_TLS sections are only in PT_TLS or PT_LOAD segments.
6995        8. PT_DYNAMIC should not contain empty sections at the beginning
6996 	  (with the possible exception of .dynamic).  */
6997 #define IS_SECTION_IN_INPUT_SEGMENT(section, segment, bed, opb)		\
6998   (((is_contained_by (section, segment, segment->p_paddr,		\
6999 		      segment->p_vaddr, opb, bed)			\
7000      && (section->flags & SEC_ALLOC) != 0)				\
7001     || is_note (section, segment))					\
7002    && segment->p_type != PT_GNU_STACK					\
7003    && (segment->p_type != PT_TLS					\
7004        || (section->flags & SEC_THREAD_LOCAL))				\
7005    && (segment->p_type == PT_LOAD					\
7006        || segment->p_type == PT_TLS					\
7007        || (section->flags & SEC_THREAD_LOCAL) == 0)			\
7008    && (segment->p_type != PT_DYNAMIC					\
7009        || section_size (section, segment) > 0				\
7010        || (segment->p_paddr						\
7011 	   ? segment->p_paddr != section->lma * (opb)			\
7012 	   : segment->p_vaddr != section->vma * (opb))			\
7013        || (strcmp (bfd_section_name (section), ".dynamic") == 0))	\
7014    && (segment->p_type != PT_LOAD || !section->segment_mark))
7015 
7016 /* If the output section of a section in the input segment is NULL,
7017    it is removed from the corresponding output segment.   */
7018 #define INCLUDE_SECTION_IN_SEGMENT(section, segment, bed, opb)		\
7019   (IS_SECTION_IN_INPUT_SEGMENT (section, segment, bed, opb)		\
7020    && section->output_section != NULL)
7021 
7022   /* Returns TRUE iff seg1 starts after the end of seg2.  */
7023 #define SEGMENT_AFTER_SEGMENT(seg1, seg2, field)			\
7024   (seg1->field >= segment_end (seg2, seg2->field))
7025 
7026   /* Returns TRUE iff seg1 and seg2 overlap. Segments overlap iff both
7027      their VMA address ranges and their LMA address ranges overlap.
7028      It is possible to have overlapping VMA ranges without overlapping LMA
7029      ranges.  RedBoot images for example can have both .data and .bss mapped
7030      to the same VMA range, but with the .data section mapped to a different
7031      LMA.  */
7032 #define SEGMENT_OVERLAPS(seg1, seg2)					\
7033   (   !(SEGMENT_AFTER_SEGMENT (seg1, seg2, p_vaddr)			\
7034 	|| SEGMENT_AFTER_SEGMENT (seg2, seg1, p_vaddr))			\
7035    && !(SEGMENT_AFTER_SEGMENT (seg1, seg2, p_paddr)			\
7036 	|| SEGMENT_AFTER_SEGMENT (seg2, seg1, p_paddr)))
7037 
7038   /* Initialise the segment mark field, and discard stupid alignment.  */
7039   for (section = ibfd->sections; section != NULL; section = section->next)
7040     {
7041       asection *o = section->output_section;
7042       if (o != NULL && o->alignment_power >= (sizeof (bfd_vma) * 8) - 1)
7043 	o->alignment_power = 0;
7044       section->segment_mark = false;
7045     }
7046 
7047   /* The Solaris linker creates program headers in which all the
7048      p_paddr fields are zero.  When we try to objcopy or strip such a
7049      file, we get confused.  Check for this case, and if we find it
7050      don't set the p_paddr_valid fields.  */
7051   p_paddr_valid = false;
7052   for (i = 0, segment = elf_tdata (ibfd)->phdr;
7053        i < num_segments;
7054        i++, segment++)
7055     if (segment->p_paddr != 0)
7056       {
7057 	p_paddr_valid = true;
7058 	break;
7059       }
7060 
7061   /* Scan through the segments specified in the program header
7062      of the input BFD.  For this first scan we look for overlaps
7063      in the loadable segments.  These can be created by weird
7064      parameters to objcopy.  Also, fix some solaris weirdness.  */
7065   for (i = 0, segment = elf_tdata (ibfd)->phdr;
7066        i < num_segments;
7067        i++, segment++)
7068     {
7069       unsigned int j;
7070       Elf_Internal_Phdr *segment2;
7071 
7072       if (segment->p_type == PT_INTERP)
7073 	for (section = ibfd->sections; section; section = section->next)
7074 	  if (IS_SOLARIS_PT_INTERP (segment, section))
7075 	    {
7076 	      /* Mininal change so that the normal section to segment
7077 		 assignment code will work.  */
7078 	      segment->p_vaddr = section->vma * opb;
7079 	      break;
7080 	    }
7081 
7082       if (segment->p_type != PT_LOAD)
7083 	{
7084 	  /* Remove PT_GNU_RELRO segment.  */
7085 	  if (segment->p_type == PT_GNU_RELRO)
7086 	    segment->p_type = PT_NULL;
7087 	  continue;
7088 	}
7089 
7090       /* Determine if this segment overlaps any previous segments.  */
7091       for (j = 0, segment2 = elf_tdata (ibfd)->phdr; j < i; j++, segment2++)
7092 	{
7093 	  bfd_signed_vma extra_length;
7094 
7095 	  if (segment2->p_type != PT_LOAD
7096 	      || !SEGMENT_OVERLAPS (segment, segment2))
7097 	    continue;
7098 
7099 	  /* Merge the two segments together.  */
7100 	  if (segment2->p_vaddr < segment->p_vaddr)
7101 	    {
7102 	      /* Extend SEGMENT2 to include SEGMENT and then delete
7103 		 SEGMENT.  */
7104 	      extra_length = (segment_end (segment, segment->p_vaddr)
7105 			      - segment_end (segment2, segment2->p_vaddr));
7106 
7107 	      if (extra_length > 0)
7108 		{
7109 		  segment2->p_memsz += extra_length;
7110 		  segment2->p_filesz += extra_length;
7111 		}
7112 
7113 	      segment->p_type = PT_NULL;
7114 
7115 	      /* Since we have deleted P we must restart the outer loop.  */
7116 	      i = 0;
7117 	      segment = elf_tdata (ibfd)->phdr;
7118 	      break;
7119 	    }
7120 	  else
7121 	    {
7122 	      /* Extend SEGMENT to include SEGMENT2 and then delete
7123 		 SEGMENT2.  */
7124 	      extra_length = (segment_end (segment2, segment2->p_vaddr)
7125 			      - segment_end (segment, segment->p_vaddr));
7126 
7127 	      if (extra_length > 0)
7128 		{
7129 		  segment->p_memsz += extra_length;
7130 		  segment->p_filesz += extra_length;
7131 		}
7132 
7133 	      segment2->p_type = PT_NULL;
7134 	    }
7135 	}
7136     }
7137 
7138   /* The second scan attempts to assign sections to segments.  */
7139   for (i = 0, segment = elf_tdata (ibfd)->phdr;
7140        i < num_segments;
7141        i++, segment++)
7142     {
7143       unsigned int section_count;
7144       asection **sections;
7145       asection *output_section;
7146       unsigned int isec;
7147       asection *matching_lma;
7148       asection *suggested_lma;
7149       unsigned int j;
7150       size_t amt;
7151       asection *first_section;
7152 
7153       if (segment->p_type == PT_NULL)
7154 	continue;
7155 
7156       first_section = NULL;
7157       /* Compute how many sections might be placed into this segment.  */
7158       for (section = ibfd->sections, section_count = 0;
7159 	   section != NULL;
7160 	   section = section->next)
7161 	{
7162 	  /* Find the first section in the input segment, which may be
7163 	     removed from the corresponding output segment.   */
7164 	  if (IS_SECTION_IN_INPUT_SEGMENT (section, segment, bed, opb))
7165 	    {
7166 	      if (first_section == NULL)
7167 		first_section = section;
7168 	      if (section->output_section != NULL)
7169 		++section_count;
7170 	    }
7171 	}
7172 
7173       /* Allocate a segment map big enough to contain
7174 	 all of the sections we have selected.  */
7175       amt = sizeof (struct elf_segment_map) - sizeof (asection *);
7176       amt += section_count * sizeof (asection *);
7177       map = (struct elf_segment_map *) bfd_zalloc (obfd, amt);
7178       if (map == NULL)
7179 	return false;
7180 
7181       /* Initialise the fields of the segment map.  Default to
7182 	 using the physical address of the segment in the input BFD.  */
7183       map->next = NULL;
7184       map->p_type = segment->p_type;
7185       map->p_flags = segment->p_flags;
7186       map->p_flags_valid = 1;
7187 
7188       if (map->p_type == PT_LOAD
7189 	  && (ibfd->flags & D_PAGED) != 0
7190 	  && maxpagesize > 1
7191 	  && segment->p_align > 1)
7192 	{
7193 	  map->p_align = segment->p_align;
7194 	  if (segment->p_align > maxpagesize)
7195 	    map->p_align = maxpagesize;
7196 	  map->p_align_valid = 1;
7197 	}
7198 
7199       /* If the first section in the input segment is removed, there is
7200 	 no need to preserve segment physical address in the corresponding
7201 	 output segment.  */
7202       if (!first_section || first_section->output_section != NULL)
7203 	{
7204 	  map->p_paddr = segment->p_paddr;
7205 	  map->p_paddr_valid = p_paddr_valid;
7206 	}
7207 
7208       /* Determine if this segment contains the ELF file header
7209 	 and if it contains the program headers themselves.  */
7210       map->includes_filehdr = (segment->p_offset == 0
7211 			       && segment->p_filesz >= iehdr->e_ehsize);
7212       map->includes_phdrs = 0;
7213 
7214       if (!phdr_included || segment->p_type != PT_LOAD)
7215 	{
7216 	  map->includes_phdrs =
7217 	    (segment->p_offset <= (bfd_vma) iehdr->e_phoff
7218 	     && (segment->p_offset + segment->p_filesz
7219 		 >= ((bfd_vma) iehdr->e_phoff
7220 		     + iehdr->e_phnum * iehdr->e_phentsize)));
7221 
7222 	  if (segment->p_type == PT_LOAD && map->includes_phdrs)
7223 	    phdr_included = true;
7224 	}
7225 
7226       if (section_count == 0)
7227 	{
7228 	  /* Special segments, such as the PT_PHDR segment, may contain
7229 	     no sections, but ordinary, loadable segments should contain
7230 	     something.  They are allowed by the ELF spec however, so only
7231 	     a warning is produced.
7232 	     There is however the valid use case of embedded systems which
7233 	     have segments with p_filesz of 0 and a p_memsz > 0 to initialize
7234 	     flash memory with zeros.  No warning is shown for that case.  */
7235 	  if (segment->p_type == PT_LOAD
7236 	      && (segment->p_filesz > 0 || segment->p_memsz == 0))
7237 	    /* xgettext:c-format */
7238 	    _bfd_error_handler
7239 	      (_("%pB: warning: empty loadable segment detected"
7240 		 " at vaddr=%#" PRIx64 ", is this intentional?"),
7241 	       ibfd, (uint64_t) segment->p_vaddr);
7242 
7243 	  map->p_vaddr_offset = segment->p_vaddr / opb;
7244 	  map->count = 0;
7245 	  *pointer_to_map = map;
7246 	  pointer_to_map = &map->next;
7247 
7248 	  continue;
7249 	}
7250 
7251       /* Now scan the sections in the input BFD again and attempt
7252 	 to add their corresponding output sections to the segment map.
7253 	 The problem here is how to handle an output section which has
7254 	 been moved (ie had its LMA changed).  There are four possibilities:
7255 
7256 	 1. None of the sections have been moved.
7257 	    In this case we can continue to use the segment LMA from the
7258 	    input BFD.
7259 
7260 	 2. All of the sections have been moved by the same amount.
7261 	    In this case we can change the segment's LMA to match the LMA
7262 	    of the first section.
7263 
7264 	 3. Some of the sections have been moved, others have not.
7265 	    In this case those sections which have not been moved can be
7266 	    placed in the current segment which will have to have its size,
7267 	    and possibly its LMA changed, and a new segment or segments will
7268 	    have to be created to contain the other sections.
7269 
7270 	 4. The sections have been moved, but not by the same amount.
7271 	    In this case we can change the segment's LMA to match the LMA
7272 	    of the first section and we will have to create a new segment
7273 	    or segments to contain the other sections.
7274 
7275 	 In order to save time, we allocate an array to hold the section
7276 	 pointers that we are interested in.  As these sections get assigned
7277 	 to a segment, they are removed from this array.  */
7278 
7279       amt = section_count * sizeof (asection *);
7280       sections = (asection **) bfd_malloc (amt);
7281       if (sections == NULL)
7282 	return false;
7283 
7284       /* Step One: Scan for segment vs section LMA conflicts.
7285 	 Also add the sections to the section array allocated above.
7286 	 Also add the sections to the current segment.  In the common
7287 	 case, where the sections have not been moved, this means that
7288 	 we have completely filled the segment, and there is nothing
7289 	 more to do.  */
7290       isec = 0;
7291       matching_lma = NULL;
7292       suggested_lma = NULL;
7293 
7294       for (section = first_section, j = 0;
7295 	   section != NULL;
7296 	   section = section->next)
7297 	{
7298 	  if (INCLUDE_SECTION_IN_SEGMENT (section, segment, bed, opb))
7299 	    {
7300 	      output_section = section->output_section;
7301 
7302 	      sections[j++] = section;
7303 
7304 	      /* The Solaris native linker always sets p_paddr to 0.
7305 		 We try to catch that case here, and set it to the
7306 		 correct value.  Note - some backends require that
7307 		 p_paddr be left as zero.  */
7308 	      if (!p_paddr_valid
7309 		  && segment->p_vaddr != 0
7310 		  && !bed->want_p_paddr_set_to_zero
7311 		  && isec == 0
7312 		  && output_section->lma != 0
7313 		  && (align_power (segment->p_vaddr
7314 				   + (map->includes_filehdr
7315 				      ? iehdr->e_ehsize : 0)
7316 				   + (map->includes_phdrs
7317 				      ? iehdr->e_phnum * iehdr->e_phentsize
7318 				      : 0),
7319 				   output_section->alignment_power * opb)
7320 		      == (output_section->vma * opb)))
7321 		map->p_paddr = segment->p_vaddr;
7322 
7323 	      /* Match up the physical address of the segment with the
7324 		 LMA address of the output section.  */
7325 	      if (is_contained_by (output_section, segment, map->p_paddr,
7326 				   map->p_paddr + map->p_vaddr_offset, opb, bed)
7327 		  || is_note (section, segment))
7328 		{
7329 		  if (matching_lma == NULL
7330 		      || output_section->lma < matching_lma->lma)
7331 		    matching_lma = output_section;
7332 
7333 		  /* We assume that if the section fits within the segment
7334 		     then it does not overlap any other section within that
7335 		     segment.  */
7336 		  map->sections[isec++] = output_section;
7337 		}
7338 	      else if (suggested_lma == NULL)
7339 		suggested_lma = output_section;
7340 
7341 	      if (j == section_count)
7342 		break;
7343 	    }
7344 	}
7345 
7346       BFD_ASSERT (j == section_count);
7347 
7348       /* Step Two: Adjust the physical address of the current segment,
7349 	 if necessary.  */
7350       if (isec == section_count)
7351 	{
7352 	  /* All of the sections fitted within the segment as currently
7353 	     specified.  This is the default case.  Add the segment to
7354 	     the list of built segments and carry on to process the next
7355 	     program header in the input BFD.  */
7356 	  map->count = section_count;
7357 	  *pointer_to_map = map;
7358 	  pointer_to_map = &map->next;
7359 
7360 	  if (p_paddr_valid
7361 	      && !bed->want_p_paddr_set_to_zero)
7362 	    {
7363 	      bfd_vma hdr_size = 0;
7364 	      if (map->includes_filehdr)
7365 		hdr_size = iehdr->e_ehsize;
7366 	      if (map->includes_phdrs)
7367 		hdr_size += iehdr->e_phnum * iehdr->e_phentsize;
7368 
7369 	      /* Account for padding before the first section in the
7370 		 segment.  */
7371 	      map->p_vaddr_offset = ((map->p_paddr + hdr_size) / opb
7372 				     - matching_lma->lma);
7373 	    }
7374 
7375 	  free (sections);
7376 	  continue;
7377 	}
7378       else
7379 	{
7380 	  /* Change the current segment's physical address to match
7381 	     the LMA of the first section that fitted, or if no
7382 	     section fitted, the first section.  */
7383 	  if (matching_lma == NULL)
7384 	    matching_lma = suggested_lma;
7385 
7386 	  map->p_paddr = matching_lma->lma * opb;
7387 
7388 	  /* Offset the segment physical address from the lma
7389 	     to allow for space taken up by elf headers.  */
7390 	  if (map->includes_phdrs)
7391 	    {
7392 	      map->p_paddr -= iehdr->e_phnum * iehdr->e_phentsize;
7393 
7394 	      /* iehdr->e_phnum is just an estimate of the number
7395 		 of program headers that we will need.  Make a note
7396 		 here of the number we used and the segment we chose
7397 		 to hold these headers, so that we can adjust the
7398 		 offset when we know the correct value.  */
7399 	      phdr_adjust_num = iehdr->e_phnum;
7400 	      phdr_adjust_seg = map;
7401 	    }
7402 
7403 	  if (map->includes_filehdr)
7404 	    {
7405 	      bfd_vma align = (bfd_vma) 1 << matching_lma->alignment_power;
7406 	      map->p_paddr -= iehdr->e_ehsize;
7407 	      /* We've subtracted off the size of headers from the
7408 		 first section lma, but there may have been some
7409 		 alignment padding before that section too.  Try to
7410 		 account for that by adjusting the segment lma down to
7411 		 the same alignment.  */
7412 	      if (segment->p_align != 0 && segment->p_align < align)
7413 		align = segment->p_align;
7414 	      map->p_paddr &= -(align * opb);
7415 	    }
7416 	}
7417 
7418       /* Step Three: Loop over the sections again, this time assigning
7419 	 those that fit to the current segment and removing them from the
7420 	 sections array; but making sure not to leave large gaps.  Once all
7421 	 possible sections have been assigned to the current segment it is
7422 	 added to the list of built segments and if sections still remain
7423 	 to be assigned, a new segment is constructed before repeating
7424 	 the loop.  */
7425       isec = 0;
7426       do
7427 	{
7428 	  map->count = 0;
7429 	  suggested_lma = NULL;
7430 
7431 	  /* Fill the current segment with sections that fit.  */
7432 	  for (j = 0; j < section_count; j++)
7433 	    {
7434 	      section = sections[j];
7435 
7436 	      if (section == NULL)
7437 		continue;
7438 
7439 	      output_section = section->output_section;
7440 
7441 	      BFD_ASSERT (output_section != NULL);
7442 
7443 	      if (is_contained_by (output_section, segment, map->p_paddr,
7444 				   map->p_paddr + map->p_vaddr_offset, opb, bed)
7445 		  || is_note (section, segment))
7446 		{
7447 		  if (map->count == 0)
7448 		    {
7449 		      /* If the first section in a segment does not start at
7450 			 the beginning of the segment, then something is
7451 			 wrong.  */
7452 		      if (align_power (map->p_paddr
7453 				       + (map->includes_filehdr
7454 					  ? iehdr->e_ehsize : 0)
7455 				       + (map->includes_phdrs
7456 					  ? iehdr->e_phnum * iehdr->e_phentsize
7457 					  : 0),
7458 				       output_section->alignment_power * opb)
7459 			  != output_section->lma * opb)
7460 			goto sorry;
7461 		    }
7462 		  else
7463 		    {
7464 		      asection *prev_sec;
7465 
7466 		      prev_sec = map->sections[map->count - 1];
7467 
7468 		      /* If the gap between the end of the previous section
7469 			 and the start of this section is more than
7470 			 maxpagesize then we need to start a new segment.  */
7471 		      if ((BFD_ALIGN (prev_sec->lma + prev_sec->size,
7472 				      maxpagesize)
7473 			   < BFD_ALIGN (output_section->lma, maxpagesize))
7474 			  || (prev_sec->lma + prev_sec->size
7475 			      > output_section->lma))
7476 			{
7477 			  if (suggested_lma == NULL)
7478 			    suggested_lma = output_section;
7479 
7480 			  continue;
7481 			}
7482 		    }
7483 
7484 		  map->sections[map->count++] = output_section;
7485 		  ++isec;
7486 		  sections[j] = NULL;
7487 		  if (segment->p_type == PT_LOAD)
7488 		    section->segment_mark = true;
7489 		}
7490 	      else if (suggested_lma == NULL)
7491 		suggested_lma = output_section;
7492 	    }
7493 
7494 	  /* PR 23932.  A corrupt input file may contain sections that cannot
7495 	     be assigned to any segment - because for example they have a
7496 	     negative size - or segments that do not contain any sections.
7497 	     But there are also valid reasons why a segment can be empty.
7498 	     So allow a count of zero.  */
7499 
7500 	  /* Add the current segment to the list of built segments.  */
7501 	  *pointer_to_map = map;
7502 	  pointer_to_map = &map->next;
7503 
7504 	  if (isec < section_count)
7505 	    {
7506 	      /* We still have not allocated all of the sections to
7507 		 segments.  Create a new segment here, initialise it
7508 		 and carry on looping.  */
7509 	      amt = sizeof (struct elf_segment_map) - sizeof (asection *);
7510 	      amt += section_count * sizeof (asection *);
7511 	      map = (struct elf_segment_map *) bfd_zalloc (obfd, amt);
7512 	      if (map == NULL)
7513 		{
7514 		  free (sections);
7515 		  return false;
7516 		}
7517 
7518 	      /* Initialise the fields of the segment map.  Set the physical
7519 		 physical address to the LMA of the first section that has
7520 		 not yet been assigned.  */
7521 	      map->next = NULL;
7522 	      map->p_type = segment->p_type;
7523 	      map->p_flags = segment->p_flags;
7524 	      map->p_flags_valid = 1;
7525 	      map->p_paddr = suggested_lma->lma * opb;
7526 	      map->p_paddr_valid = p_paddr_valid;
7527 	      map->includes_filehdr = 0;
7528 	      map->includes_phdrs = 0;
7529 	    }
7530 
7531 	  continue;
7532 	sorry:
7533 	  bfd_set_error (bfd_error_sorry);
7534 	  free (sections);
7535 	  return false;
7536 	}
7537       while (isec < section_count);
7538 
7539       free (sections);
7540     }
7541 
7542   elf_seg_map (obfd) = map_first;
7543 
7544   /* If we had to estimate the number of program headers that were
7545      going to be needed, then check our estimate now and adjust
7546      the offset if necessary.  */
7547   if (phdr_adjust_seg != NULL)
7548     {
7549       unsigned int count;
7550 
7551       for (count = 0, map = map_first; map != NULL; map = map->next)
7552 	count++;
7553 
7554       if (count > phdr_adjust_num)
7555 	phdr_adjust_seg->p_paddr
7556 	  -= (count - phdr_adjust_num) * iehdr->e_phentsize;
7557 
7558       for (map = map_first; map != NULL; map = map->next)
7559 	if (map->p_type == PT_PHDR)
7560 	  {
7561 	    bfd_vma adjust
7562 	      = phdr_adjust_seg->includes_filehdr ? iehdr->e_ehsize : 0;
7563 	    map->p_paddr = phdr_adjust_seg->p_paddr + adjust;
7564 	    break;
7565 	  }
7566     }
7567 
7568 #undef IS_SOLARIS_PT_INTERP
7569 #undef IS_SECTION_IN_INPUT_SEGMENT
7570 #undef INCLUDE_SECTION_IN_SEGMENT
7571 #undef SEGMENT_AFTER_SEGMENT
7572 #undef SEGMENT_OVERLAPS
7573   return true;
7574 }
7575 
7576 /* Return true if p_align in the ELF program header in ABFD is valid.  */
7577 
7578 static bool
7579 elf_is_p_align_valid (bfd *abfd)
7580 {
7581   unsigned int i;
7582   Elf_Internal_Phdr *segment;
7583   unsigned int num_segments;
7584   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
7585   bfd_size_type maxpagesize = bed->maxpagesize;
7586   bfd_size_type p_align = bed->p_align;
7587 
7588   /* Return true if the default p_align value isn't set or the maximum
7589      page size is the same as the minimum page size.  */
7590   if (p_align == 0 || maxpagesize == bed->minpagesize)
7591     return true;
7592 
7593   /* When the default p_align value is set, p_align may be set to the
7594      default p_align value while segments are aligned to the maximum
7595      page size.  In this case, the input p_align will be ignored and
7596      the maximum page size will be used to align the output segments.  */
7597   segment = elf_tdata (abfd)->phdr;
7598   num_segments = elf_elfheader (abfd)->e_phnum;
7599   for (i = 0; i < num_segments; i++, segment++)
7600     if (segment->p_type == PT_LOAD
7601 	&& (segment->p_align != p_align
7602 	    || vma_page_aligned_bias (segment->p_vaddr,
7603 				      segment->p_offset,
7604 				      maxpagesize) != 0))
7605       return true;
7606 
7607   return false;
7608 }
7609 
7610 /* Copy ELF program header information.  */
7611 
7612 static bool
7613 copy_elf_program_header (bfd *ibfd, bfd *obfd)
7614 {
7615   Elf_Internal_Ehdr *iehdr;
7616   struct elf_segment_map *map;
7617   struct elf_segment_map *map_first;
7618   struct elf_segment_map **pointer_to_map;
7619   Elf_Internal_Phdr *segment;
7620   unsigned int i;
7621   unsigned int num_segments;
7622   bool phdr_included = false;
7623   bool p_paddr_valid;
7624   bool p_palign_valid;
7625   unsigned int opb = bfd_octets_per_byte (ibfd, NULL);
7626 
7627   iehdr = elf_elfheader (ibfd);
7628 
7629   map_first = NULL;
7630   pointer_to_map = &map_first;
7631 
7632   /* If all the segment p_paddr fields are zero, don't set
7633      map->p_paddr_valid.  */
7634   p_paddr_valid = false;
7635   num_segments = elf_elfheader (ibfd)->e_phnum;
7636   for (i = 0, segment = elf_tdata (ibfd)->phdr;
7637        i < num_segments;
7638        i++, segment++)
7639     if (segment->p_paddr != 0)
7640       {
7641 	p_paddr_valid = true;
7642 	break;
7643       }
7644 
7645   p_palign_valid = elf_is_p_align_valid (ibfd);
7646 
7647   for (i = 0, segment = elf_tdata (ibfd)->phdr;
7648        i < num_segments;
7649        i++, segment++)
7650     {
7651       asection *section;
7652       unsigned int section_count;
7653       size_t amt;
7654       Elf_Internal_Shdr *this_hdr;
7655       asection *first_section = NULL;
7656       asection *lowest_section;
7657 
7658       /* Compute how many sections are in this segment.  */
7659       for (section = ibfd->sections, section_count = 0;
7660 	   section != NULL;
7661 	   section = section->next)
7662 	{
7663 	  this_hdr = &(elf_section_data(section)->this_hdr);
7664 	  if (ELF_SECTION_IN_SEGMENT (this_hdr, segment))
7665 	    {
7666 	      if (first_section == NULL)
7667 		first_section = section;
7668 	      section_count++;
7669 	    }
7670 	}
7671 
7672       /* Allocate a segment map big enough to contain
7673 	 all of the sections we have selected.  */
7674       amt = sizeof (struct elf_segment_map) - sizeof (asection *);
7675       amt += section_count * sizeof (asection *);
7676       map = (struct elf_segment_map *) bfd_zalloc (obfd, amt);
7677       if (map == NULL)
7678 	return false;
7679 
7680       /* Initialize the fields of the output segment map with the
7681 	 input segment.  */
7682       map->next = NULL;
7683       map->p_type = segment->p_type;
7684       map->p_flags = segment->p_flags;
7685       map->p_flags_valid = 1;
7686       map->p_paddr = segment->p_paddr;
7687       map->p_paddr_valid = p_paddr_valid;
7688       map->p_align = segment->p_align;
7689       /* Keep p_align of PT_GNU_STACK for stack alignment.  */
7690       map->p_align_valid = (map->p_type == PT_GNU_STACK
7691 			    || p_palign_valid);
7692       map->p_vaddr_offset = 0;
7693 
7694       if (map->p_type == PT_GNU_RELRO
7695 	  || map->p_type == PT_GNU_STACK)
7696 	{
7697 	  /* The PT_GNU_RELRO segment may contain the first a few
7698 	     bytes in the .got.plt section even if the whole .got.plt
7699 	     section isn't in the PT_GNU_RELRO segment.  We won't
7700 	     change the size of the PT_GNU_RELRO segment.
7701 	     Similarly, PT_GNU_STACK size is significant on uclinux
7702 	     systems.    */
7703 	  map->p_size = segment->p_memsz;
7704 	  map->p_size_valid = 1;
7705 	}
7706 
7707       /* Determine if this segment contains the ELF file header
7708 	 and if it contains the program headers themselves.  */
7709       map->includes_filehdr = (segment->p_offset == 0
7710 			       && segment->p_filesz >= iehdr->e_ehsize);
7711 
7712       map->includes_phdrs = 0;
7713       if (! phdr_included || segment->p_type != PT_LOAD)
7714 	{
7715 	  map->includes_phdrs =
7716 	    (segment->p_offset <= (bfd_vma) iehdr->e_phoff
7717 	     && (segment->p_offset + segment->p_filesz
7718 		 >= ((bfd_vma) iehdr->e_phoff
7719 		     + iehdr->e_phnum * iehdr->e_phentsize)));
7720 
7721 	  if (segment->p_type == PT_LOAD && map->includes_phdrs)
7722 	    phdr_included = true;
7723 	}
7724 
7725       lowest_section = NULL;
7726       if (section_count != 0)
7727 	{
7728 	  unsigned int isec = 0;
7729 
7730 	  for (section = first_section;
7731 	       section != NULL;
7732 	       section = section->next)
7733 	    {
7734 	      this_hdr = &(elf_section_data(section)->this_hdr);
7735 	      if (ELF_SECTION_IN_SEGMENT (this_hdr, segment))
7736 		{
7737 		  map->sections[isec++] = section->output_section;
7738 		  if ((section->flags & SEC_ALLOC) != 0)
7739 		    {
7740 		      bfd_vma seg_off;
7741 
7742 		      if (lowest_section == NULL
7743 			  || section->lma < lowest_section->lma)
7744 			lowest_section = section;
7745 
7746 		      /* Section lmas are set up from PT_LOAD header
7747 			 p_paddr in _bfd_elf_make_section_from_shdr.
7748 			 If this header has a p_paddr that disagrees
7749 			 with the section lma, flag the p_paddr as
7750 			 invalid.  */
7751 		      if ((section->flags & SEC_LOAD) != 0)
7752 			seg_off = this_hdr->sh_offset - segment->p_offset;
7753 		      else
7754 			seg_off = this_hdr->sh_addr - segment->p_vaddr;
7755 		      if (section->lma * opb - segment->p_paddr != seg_off)
7756 			map->p_paddr_valid = false;
7757 		    }
7758 		  if (isec == section_count)
7759 		    break;
7760 		}
7761 	    }
7762 	}
7763 
7764       if (section_count == 0)
7765 	map->p_vaddr_offset = segment->p_vaddr / opb;
7766       else if (map->p_paddr_valid)
7767 	{
7768 	  /* Account for padding before the first section in the segment.  */
7769 	  bfd_vma hdr_size = 0;
7770 	  if (map->includes_filehdr)
7771 	    hdr_size = iehdr->e_ehsize;
7772 	  if (map->includes_phdrs)
7773 	    hdr_size += iehdr->e_phnum * iehdr->e_phentsize;
7774 
7775 	  map->p_vaddr_offset = ((map->p_paddr + hdr_size) / opb
7776 				 - (lowest_section ? lowest_section->lma : 0));
7777 	}
7778 
7779       map->count = section_count;
7780       *pointer_to_map = map;
7781       pointer_to_map = &map->next;
7782     }
7783 
7784   elf_seg_map (obfd) = map_first;
7785   return true;
7786 }
7787 
7788 /* Copy private BFD data.  This copies or rewrites ELF program header
7789    information.  */
7790 
7791 static bool
7792 copy_private_bfd_data (bfd *ibfd, bfd *obfd)
7793 {
7794   bfd_vma maxpagesize;
7795 
7796   if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
7797       || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
7798     return true;
7799 
7800   if (elf_tdata (ibfd)->phdr == NULL)
7801     return true;
7802 
7803   if (ibfd->xvec == obfd->xvec)
7804     {
7805       /* Check to see if any sections in the input BFD
7806 	 covered by ELF program header have changed.  */
7807       Elf_Internal_Phdr *segment;
7808       asection *section, *osec;
7809       unsigned int i, num_segments;
7810       Elf_Internal_Shdr *this_hdr;
7811       const struct elf_backend_data *bed;
7812 
7813       bed = get_elf_backend_data (ibfd);
7814 
7815       /* Regenerate the segment map if p_paddr is set to 0.  */
7816       if (bed->want_p_paddr_set_to_zero)
7817 	goto rewrite;
7818 
7819       /* Initialize the segment mark field.  */
7820       for (section = obfd->sections; section != NULL;
7821 	   section = section->next)
7822 	section->segment_mark = false;
7823 
7824       num_segments = elf_elfheader (ibfd)->e_phnum;
7825       for (i = 0, segment = elf_tdata (ibfd)->phdr;
7826 	   i < num_segments;
7827 	   i++, segment++)
7828 	{
7829 	  /* PR binutils/3535.  The Solaris linker always sets the p_paddr
7830 	     and p_memsz fields of special segments (DYNAMIC, INTERP) to 0
7831 	     which severly confuses things, so always regenerate the segment
7832 	     map in this case.  */
7833 	  if (segment->p_paddr == 0
7834 	      && segment->p_memsz == 0
7835 	      && (segment->p_type == PT_INTERP
7836 		  || segment->p_type == PT_DYNAMIC))
7837 	    goto rewrite;
7838 
7839 	  for (section = ibfd->sections;
7840 	       section != NULL; section = section->next)
7841 	    {
7842 	      /* We mark the output section so that we know it comes
7843 		 from the input BFD.  */
7844 	      osec = section->output_section;
7845 	      if (osec)
7846 		osec->segment_mark = true;
7847 
7848 	      /* Check if this section is covered by the segment.  */
7849 	      this_hdr = &(elf_section_data(section)->this_hdr);
7850 	      if (ELF_SECTION_IN_SEGMENT (this_hdr, segment))
7851 		{
7852 		  /* FIXME: Check if its output section is changed or
7853 		     removed.  What else do we need to check?  */
7854 		  if (osec == NULL
7855 		      || section->flags != osec->flags
7856 		      || section->lma != osec->lma
7857 		      || section->vma != osec->vma
7858 		      || section->size != osec->size
7859 		      || section->rawsize != osec->rawsize
7860 		      || section->alignment_power != osec->alignment_power)
7861 		    goto rewrite;
7862 		}
7863 	    }
7864 	}
7865 
7866       /* Check to see if any output section do not come from the
7867 	 input BFD.  */
7868       for (section = obfd->sections; section != NULL;
7869 	   section = section->next)
7870 	{
7871 	  if (!section->segment_mark)
7872 	    goto rewrite;
7873 	  else
7874 	    section->segment_mark = false;
7875 	}
7876 
7877       return copy_elf_program_header (ibfd, obfd);
7878     }
7879 
7880  rewrite:
7881   maxpagesize = 0;
7882   if (ibfd->xvec == obfd->xvec)
7883     {
7884       /* When rewriting program header, set the output maxpagesize to
7885 	 the maximum alignment of input PT_LOAD segments.  */
7886       Elf_Internal_Phdr *segment;
7887       unsigned int i;
7888       unsigned int num_segments = elf_elfheader (ibfd)->e_phnum;
7889 
7890       for (i = 0, segment = elf_tdata (ibfd)->phdr;
7891 	   i < num_segments;
7892 	   i++, segment++)
7893 	if (segment->p_type == PT_LOAD
7894 	    && maxpagesize < segment->p_align)
7895 	  {
7896 	    /* PR 17512: file: f17299af.  */
7897 	    if (segment->p_align > (bfd_vma) 1 << ((sizeof (bfd_vma) * 8) - 2))
7898 	      /* xgettext:c-format */
7899 	      _bfd_error_handler (_("%pB: warning: segment alignment of %#"
7900 				    PRIx64 " is too large"),
7901 				  ibfd, (uint64_t) segment->p_align);
7902 	    else
7903 	      maxpagesize = segment->p_align;
7904 	  }
7905     }
7906   if (maxpagesize == 0)
7907     maxpagesize = get_elf_backend_data (obfd)->maxpagesize;
7908 
7909   return rewrite_elf_program_header (ibfd, obfd, maxpagesize);
7910 }
7911 
7912 /* Initialize private output section information from input section.  */
7913 
7914 bool
7915 _bfd_elf_init_private_section_data (bfd *ibfd,
7916 				    asection *isec,
7917 				    bfd *obfd,
7918 				    asection *osec,
7919 				    struct bfd_link_info *link_info)
7920 
7921 {
7922   Elf_Internal_Shdr *ihdr, *ohdr;
7923   bool final_link = (link_info != NULL
7924 		     && !bfd_link_relocatable (link_info));
7925 
7926   if (ibfd->xvec->flavour != bfd_target_elf_flavour
7927       || obfd->xvec->flavour != bfd_target_elf_flavour)
7928     return true;
7929 
7930   BFD_ASSERT (elf_section_data (osec) != NULL);
7931 
7932   /* If this is a known ABI section, ELF section type and flags may
7933      have been set up when OSEC was created.  For normal sections we
7934      allow the user to override the type and flags other than
7935      SHF_MASKOS and SHF_MASKPROC.  */
7936   if (elf_section_type (osec) == SHT_PROGBITS
7937       || elf_section_type (osec) == SHT_NOTE
7938       || elf_section_type (osec) == SHT_NOBITS)
7939     elf_section_type (osec) = SHT_NULL;
7940   /* For objcopy and relocatable link, copy the ELF section type from
7941      the input file if the BFD section flags are the same.  (If they
7942      are different the user may be doing something like
7943      "objcopy --set-section-flags .text=alloc,data".)  For a final
7944      link allow some flags that the linker clears to differ.  */
7945   if (elf_section_type (osec) == SHT_NULL
7946       && (osec->flags == isec->flags
7947 	  || (final_link
7948 	      && ((osec->flags ^ isec->flags)
7949 		  & ~(SEC_LINK_ONCE | SEC_LINK_DUPLICATES | SEC_RELOC)) == 0)))
7950     elf_section_type (osec) = elf_section_type (isec);
7951 
7952   /* FIXME: Is this correct for all OS/PROC specific flags?  */
7953   elf_section_flags (osec) = (elf_section_flags (isec)
7954 			      & (SHF_MASKOS | SHF_MASKPROC));
7955 
7956   /* Copy sh_info from input for mbind section.  */
7957   if ((elf_tdata (ibfd)->has_gnu_osabi & elf_gnu_osabi_mbind) != 0
7958       && elf_section_flags (isec) & SHF_GNU_MBIND)
7959     elf_section_data (osec)->this_hdr.sh_info
7960       = elf_section_data (isec)->this_hdr.sh_info;
7961 
7962   /* Set things up for objcopy and relocatable link.  The output
7963      SHT_GROUP section will have its elf_next_in_group pointing back
7964      to the input group members.  Ignore linker created group section.
7965      See elfNN_ia64_object_p in elfxx-ia64.c.  */
7966   if ((link_info == NULL
7967        || !link_info->resolve_section_groups)
7968       && (elf_sec_group (isec) == NULL
7969 	  || (elf_sec_group (isec)->flags & SEC_LINKER_CREATED) == 0))
7970     {
7971       if (elf_section_flags (isec) & SHF_GROUP)
7972 	elf_section_flags (osec) |= SHF_GROUP;
7973       elf_next_in_group (osec) = elf_next_in_group (isec);
7974       elf_section_data (osec)->group = elf_section_data (isec)->group;
7975     }
7976 
7977   /* If not decompress, preserve SHF_COMPRESSED.  */
7978   if (!final_link && (ibfd->flags & BFD_DECOMPRESS) == 0)
7979     elf_section_flags (osec) |= (elf_section_flags (isec)
7980 				 & SHF_COMPRESSED);
7981 
7982   ihdr = &elf_section_data (isec)->this_hdr;
7983 
7984   /* We need to handle elf_linked_to_section for SHF_LINK_ORDER. We
7985      don't use the output section of the linked-to section since it
7986      may be NULL at this point.  */
7987   if ((ihdr->sh_flags & SHF_LINK_ORDER) != 0)
7988     {
7989       ohdr = &elf_section_data (osec)->this_hdr;
7990       ohdr->sh_flags |= SHF_LINK_ORDER;
7991       elf_linked_to_section (osec) = elf_linked_to_section (isec);
7992     }
7993 
7994   osec->use_rela_p = isec->use_rela_p;
7995 
7996   return true;
7997 }
7998 
7999 /* Copy private section information.  This copies over the entsize
8000    field, and sometimes the info field.  */
8001 
8002 bool
8003 _bfd_elf_copy_private_section_data (bfd *ibfd,
8004 				    asection *isec,
8005 				    bfd *obfd,
8006 				    asection *osec)
8007 {
8008   Elf_Internal_Shdr *ihdr, *ohdr;
8009 
8010   if (ibfd->xvec->flavour != bfd_target_elf_flavour
8011       || obfd->xvec->flavour != bfd_target_elf_flavour)
8012     return true;
8013 
8014   ihdr = &elf_section_data (isec)->this_hdr;
8015   ohdr = &elf_section_data (osec)->this_hdr;
8016 
8017   ohdr->sh_entsize = ihdr->sh_entsize;
8018 
8019   if (ihdr->sh_type == SHT_SYMTAB
8020       || ihdr->sh_type == SHT_DYNSYM
8021       || ihdr->sh_type == SHT_GNU_verneed
8022       || ihdr->sh_type == SHT_GNU_verdef)
8023     ohdr->sh_info = ihdr->sh_info;
8024 
8025   return _bfd_elf_init_private_section_data (ibfd, isec, obfd, osec,
8026 					     NULL);
8027 }
8028 
8029 /* Look at all the SHT_GROUP sections in IBFD, making any adjustments
8030    necessary if we are removing either the SHT_GROUP section or any of
8031    the group member sections.  DISCARDED is the value that a section's
8032    output_section has if the section will be discarded, NULL when this
8033    function is called from objcopy, bfd_abs_section_ptr when called
8034    from the linker.  */
8035 
8036 bool
8037 _bfd_elf_fixup_group_sections (bfd *ibfd, asection *discarded)
8038 {
8039   asection *isec;
8040 
8041   for (isec = ibfd->sections; isec != NULL; isec = isec->next)
8042     if (elf_section_type (isec) == SHT_GROUP)
8043       {
8044 	asection *first = elf_next_in_group (isec);
8045 	asection *s = first;
8046 	bfd_size_type removed = 0;
8047 
8048 	while (s != NULL)
8049 	  {
8050 	    /* If this member section is being output but the
8051 	       SHT_GROUP section is not, then clear the group info
8052 	       set up by _bfd_elf_copy_private_section_data.  */
8053 	    if (s->output_section != discarded
8054 		&& isec->output_section == discarded)
8055 	      {
8056 		elf_section_flags (s->output_section) &= ~SHF_GROUP;
8057 		elf_group_name (s->output_section) = NULL;
8058 	      }
8059 	    else
8060 	      {
8061 		struct bfd_elf_section_data *elf_sec = elf_section_data (s);
8062 		if (s->output_section == discarded
8063 		    && isec->output_section != discarded)
8064 		  {
8065 		    /* Conversely, if the member section is not being
8066 		       output but the SHT_GROUP section is, then adjust
8067 		       its size.  */
8068 		    removed += 4;
8069 		    if (elf_sec->rel.hdr != NULL
8070 			&& (elf_sec->rel.hdr->sh_flags & SHF_GROUP) != 0)
8071 		      removed += 4;
8072 		    if (elf_sec->rela.hdr != NULL
8073 			&& (elf_sec->rela.hdr->sh_flags & SHF_GROUP) != 0)
8074 		      removed += 4;
8075 		  }
8076 		else
8077 		  {
8078 		    /* Also adjust for zero-sized relocation member
8079 		       section.  */
8080 		    if (elf_sec->rel.hdr != NULL
8081 			&& elf_sec->rel.hdr->sh_size == 0)
8082 		      removed += 4;
8083 		    if (elf_sec->rela.hdr != NULL
8084 			&& elf_sec->rela.hdr->sh_size == 0)
8085 		      removed += 4;
8086 		  }
8087 	      }
8088 	    s = elf_next_in_group (s);
8089 	    if (s == first)
8090 	      break;
8091 	  }
8092 	if (removed != 0)
8093 	  {
8094 	    if (discarded != NULL)
8095 	      {
8096 		/* If we've been called for ld -r, then we need to
8097 		   adjust the input section size.  */
8098 		if (isec->rawsize == 0)
8099 		  isec->rawsize = isec->size;
8100 		isec->size = isec->rawsize - removed;
8101 		if (isec->size <= 4)
8102 		  {
8103 		    isec->size = 0;
8104 		    isec->flags |= SEC_EXCLUDE;
8105 		  }
8106 	      }
8107 	    else if (isec->output_section != NULL)
8108 	      {
8109 		/* Adjust the output section size when called from
8110 		   objcopy. */
8111 		isec->output_section->size -= removed;
8112 		if (isec->output_section->size <= 4)
8113 		  {
8114 		    isec->output_section->size = 0;
8115 		    isec->output_section->flags |= SEC_EXCLUDE;
8116 		  }
8117 	      }
8118 	  }
8119       }
8120 
8121   return true;
8122 }
8123 
8124 /* Copy private header information.  */
8125 
8126 bool
8127 _bfd_elf_copy_private_header_data (bfd *ibfd, bfd *obfd)
8128 {
8129   if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
8130       || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
8131     return true;
8132 
8133   /* Copy over private BFD data if it has not already been copied.
8134      This must be done here, rather than in the copy_private_bfd_data
8135      entry point, because the latter is called after the section
8136      contents have been set, which means that the program headers have
8137      already been worked out.  */
8138   if (elf_seg_map (obfd) == NULL && elf_tdata (ibfd)->phdr != NULL)
8139     {
8140       if (! copy_private_bfd_data (ibfd, obfd))
8141 	return false;
8142     }
8143 
8144   return _bfd_elf_fixup_group_sections (ibfd, NULL);
8145 }
8146 
8147 /* Copy private symbol information.  If this symbol is in a section
8148    which we did not map into a BFD section, try to map the section
8149    index correctly.  We use special macro definitions for the mapped
8150    section indices; these definitions are interpreted by the
8151    swap_out_syms function.  */
8152 
8153 #define MAP_ONESYMTAB (SHN_HIOS + 1)
8154 #define MAP_DYNSYMTAB (SHN_HIOS + 2)
8155 #define MAP_STRTAB    (SHN_HIOS + 3)
8156 #define MAP_SHSTRTAB  (SHN_HIOS + 4)
8157 #define MAP_SYM_SHNDX (SHN_HIOS + 5)
8158 
8159 bool
8160 _bfd_elf_copy_private_symbol_data (bfd *ibfd,
8161 				   asymbol *isymarg,
8162 				   bfd *obfd,
8163 				   asymbol *osymarg)
8164 {
8165   elf_symbol_type *isym, *osym;
8166 
8167   if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
8168       || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
8169     return true;
8170 
8171   isym = elf_symbol_from (isymarg);
8172   osym = elf_symbol_from (osymarg);
8173 
8174   if (isym != NULL
8175       && isym->internal_elf_sym.st_shndx != 0
8176       && osym != NULL
8177       && bfd_is_abs_section (isym->symbol.section))
8178     {
8179       unsigned int shndx;
8180 
8181       shndx = isym->internal_elf_sym.st_shndx;
8182       if (shndx == elf_onesymtab (ibfd))
8183 	shndx = MAP_ONESYMTAB;
8184       else if (shndx == elf_dynsymtab (ibfd))
8185 	shndx = MAP_DYNSYMTAB;
8186       else if (shndx == elf_strtab_sec (ibfd))
8187 	shndx = MAP_STRTAB;
8188       else if (shndx == elf_shstrtab_sec (ibfd))
8189 	shndx = MAP_SHSTRTAB;
8190       else if (find_section_in_list (shndx, elf_symtab_shndx_list (ibfd)))
8191 	shndx = MAP_SYM_SHNDX;
8192       osym->internal_elf_sym.st_shndx = shndx;
8193     }
8194 
8195   return true;
8196 }
8197 
8198 /* Swap out the symbols.  */
8199 
8200 static bool
8201 swap_out_syms (bfd *abfd,
8202 	       struct elf_strtab_hash **sttp,
8203 	       int relocatable_p,
8204 	       struct bfd_link_info *info)
8205 {
8206   const struct elf_backend_data *bed;
8207   unsigned int symcount;
8208   asymbol **syms;
8209   struct elf_strtab_hash *stt;
8210   Elf_Internal_Shdr *symtab_hdr;
8211   Elf_Internal_Shdr *symtab_shndx_hdr;
8212   Elf_Internal_Shdr *symstrtab_hdr;
8213   struct elf_sym_strtab *symstrtab;
8214   bfd_byte *outbound_syms;
8215   bfd_byte *outbound_shndx;
8216   unsigned long outbound_syms_index;
8217   unsigned int idx;
8218   unsigned int num_locals;
8219   size_t amt;
8220   bool name_local_sections;
8221 
8222   if (!elf_map_symbols (abfd, &num_locals))
8223     return false;
8224 
8225   /* Dump out the symtabs.  */
8226   stt = _bfd_elf_strtab_init ();
8227   if (stt == NULL)
8228     return false;
8229 
8230   bed = get_elf_backend_data (abfd);
8231   symcount = bfd_get_symcount (abfd);
8232   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
8233   symtab_hdr->sh_type = SHT_SYMTAB;
8234   symtab_hdr->sh_entsize = bed->s->sizeof_sym;
8235   symtab_hdr->sh_size = symtab_hdr->sh_entsize * (symcount + 1);
8236   symtab_hdr->sh_info = num_locals + 1;
8237   symtab_hdr->sh_addralign = (bfd_vma) 1 << bed->s->log_file_align;
8238 
8239   symstrtab_hdr = &elf_tdata (abfd)->strtab_hdr;
8240   symstrtab_hdr->sh_type = SHT_STRTAB;
8241 
8242   /* Allocate buffer to swap out the .strtab section.  */
8243   if (_bfd_mul_overflow (symcount + 1, sizeof (*symstrtab), &amt)
8244       || (symstrtab = (struct elf_sym_strtab *) bfd_malloc (amt)) == NULL)
8245     {
8246       bfd_set_error (bfd_error_no_memory);
8247       _bfd_elf_strtab_free (stt);
8248       return false;
8249     }
8250 
8251   if (_bfd_mul_overflow (symcount + 1, bed->s->sizeof_sym, &amt)
8252       || (outbound_syms = (bfd_byte *) bfd_alloc (abfd, amt)) == NULL)
8253     {
8254     error_no_mem:
8255       bfd_set_error (bfd_error_no_memory);
8256     error_return:
8257       free (symstrtab);
8258       _bfd_elf_strtab_free (stt);
8259       return false;
8260     }
8261   symtab_hdr->contents = outbound_syms;
8262   outbound_syms_index = 0;
8263 
8264   outbound_shndx = NULL;
8265 
8266   if (elf_symtab_shndx_list (abfd))
8267     {
8268       symtab_shndx_hdr = & elf_symtab_shndx_list (abfd)->hdr;
8269       if (symtab_shndx_hdr->sh_name != 0)
8270 	{
8271 	  if (_bfd_mul_overflow (symcount + 1,
8272 				 sizeof (Elf_External_Sym_Shndx), &amt))
8273 	    goto error_no_mem;
8274 	  outbound_shndx =  (bfd_byte *) bfd_zalloc (abfd, amt);
8275 	  if (outbound_shndx == NULL)
8276 	    goto error_return;
8277 
8278 	  symtab_shndx_hdr->contents = outbound_shndx;
8279 	  symtab_shndx_hdr->sh_type = SHT_SYMTAB_SHNDX;
8280 	  symtab_shndx_hdr->sh_size = amt;
8281 	  symtab_shndx_hdr->sh_addralign = sizeof (Elf_External_Sym_Shndx);
8282 	  symtab_shndx_hdr->sh_entsize = sizeof (Elf_External_Sym_Shndx);
8283 	}
8284       /* FIXME: What about any other headers in the list ?  */
8285     }
8286 
8287   /* Now generate the data (for "contents").  */
8288   {
8289     /* Fill in zeroth symbol and swap it out.  */
8290     Elf_Internal_Sym sym;
8291     sym.st_name = 0;
8292     sym.st_value = 0;
8293     sym.st_size = 0;
8294     sym.st_info = 0;
8295     sym.st_other = 0;
8296     sym.st_shndx = SHN_UNDEF;
8297     sym.st_target_internal = 0;
8298     symstrtab[0].sym = sym;
8299     symstrtab[0].dest_index = outbound_syms_index;
8300     outbound_syms_index++;
8301   }
8302 
8303   name_local_sections
8304     = (bed->elf_backend_name_local_section_symbols
8305        && bed->elf_backend_name_local_section_symbols (abfd));
8306 
8307   syms = bfd_get_outsymbols (abfd);
8308   for (idx = 0; idx < symcount;)
8309     {
8310       Elf_Internal_Sym sym;
8311       bfd_vma value = syms[idx]->value;
8312       elf_symbol_type *type_ptr;
8313       flagword flags = syms[idx]->flags;
8314       int type;
8315 
8316       if (!name_local_sections
8317 	  && (flags & (BSF_SECTION_SYM | BSF_GLOBAL)) == BSF_SECTION_SYM)
8318 	{
8319 	  /* Local section symbols have no name.  */
8320 	  sym.st_name = (unsigned long) -1;
8321 	}
8322       else
8323 	{
8324 	  /* Call _bfd_elf_strtab_offset after _bfd_elf_strtab_finalize
8325 	     to get the final offset for st_name.  */
8326 	  sym.st_name
8327 	    = (unsigned long) _bfd_elf_strtab_add (stt, syms[idx]->name,
8328 						   false);
8329 	  if (sym.st_name == (unsigned long) -1)
8330 	    goto error_return;
8331 	}
8332 
8333       type_ptr = elf_symbol_from (syms[idx]);
8334 
8335       if ((flags & BSF_SECTION_SYM) == 0
8336 	  && bfd_is_com_section (syms[idx]->section))
8337 	{
8338 	  /* ELF common symbols put the alignment into the `value' field,
8339 	     and the size into the `size' field.  This is backwards from
8340 	     how BFD handles it, so reverse it here.  */
8341 	  sym.st_size = value;
8342 	  if (type_ptr == NULL
8343 	      || type_ptr->internal_elf_sym.st_value == 0)
8344 	    sym.st_value = value >= 16 ? 16 : (1 << bfd_log2 (value));
8345 	  else
8346 	    sym.st_value = type_ptr->internal_elf_sym.st_value;
8347 	  sym.st_shndx = _bfd_elf_section_from_bfd_section
8348 	    (abfd, syms[idx]->section);
8349 	}
8350       else
8351 	{
8352 	  asection *sec = syms[idx]->section;
8353 	  unsigned int shndx;
8354 
8355 	  if (sec->output_section)
8356 	    {
8357 	      value += sec->output_offset;
8358 	      sec = sec->output_section;
8359 	    }
8360 
8361 	  /* Don't add in the section vma for relocatable output.  */
8362 	  if (! relocatable_p)
8363 	    value += sec->vma;
8364 	  sym.st_value = value;
8365 	  sym.st_size = type_ptr ? type_ptr->internal_elf_sym.st_size : 0;
8366 
8367 	  if (bfd_is_abs_section (sec)
8368 	      && type_ptr != NULL
8369 	      && type_ptr->internal_elf_sym.st_shndx != 0)
8370 	    {
8371 	      /* This symbol is in a real ELF section which we did
8372 		 not create as a BFD section.  Undo the mapping done
8373 		 by copy_private_symbol_data.  */
8374 	      shndx = type_ptr->internal_elf_sym.st_shndx;
8375 	      switch (shndx)
8376 		{
8377 		case MAP_ONESYMTAB:
8378 		  shndx = elf_onesymtab (abfd);
8379 		  break;
8380 		case MAP_DYNSYMTAB:
8381 		  shndx = elf_dynsymtab (abfd);
8382 		  break;
8383 		case MAP_STRTAB:
8384 		  shndx = elf_strtab_sec (abfd);
8385 		  break;
8386 		case MAP_SHSTRTAB:
8387 		  shndx = elf_shstrtab_sec (abfd);
8388 		  break;
8389 		case MAP_SYM_SHNDX:
8390 		  if (elf_symtab_shndx_list (abfd))
8391 		    shndx = elf_symtab_shndx_list (abfd)->ndx;
8392 		  break;
8393 		case SHN_COMMON:
8394 		case SHN_ABS:
8395 		  shndx = SHN_ABS;
8396 		  break;
8397 		default:
8398 		  if (shndx >= SHN_LOPROC && shndx <= SHN_HIOS)
8399 		    {
8400 		      if (bed->symbol_section_index)
8401 			shndx = bed->symbol_section_index (abfd, type_ptr);
8402 		      /* Otherwise just leave the index alone.  */
8403 		    }
8404 		  else
8405 		    {
8406 		      if (shndx > SHN_HIOS && shndx < SHN_HIRESERVE)
8407 			_bfd_error_handler (_("%pB: \
8408 Unable to handle section index %x in ELF symbol.  Using ABS instead."),
8409 					  abfd, shndx);
8410 		      shndx = SHN_ABS;
8411 		    }
8412 		  break;
8413 		}
8414 	    }
8415 	  else
8416 	    {
8417 	      shndx = _bfd_elf_section_from_bfd_section (abfd, sec);
8418 
8419 	      if (shndx == SHN_BAD)
8420 		{
8421 		  asection *sec2;
8422 
8423 		  /* Writing this would be a hell of a lot easier if
8424 		     we had some decent documentation on bfd, and
8425 		     knew what to expect of the library, and what to
8426 		     demand of applications.  For example, it
8427 		     appears that `objcopy' might not set the
8428 		     section of a symbol to be a section that is
8429 		     actually in the output file.  */
8430 		  sec2 = bfd_get_section_by_name (abfd, sec->name);
8431 		  if (sec2 != NULL)
8432 		    shndx = _bfd_elf_section_from_bfd_section (abfd, sec2);
8433 		  if (shndx == SHN_BAD)
8434 		    {
8435 		      /* xgettext:c-format */
8436 		      _bfd_error_handler
8437 			(_("unable to find equivalent output section"
8438 			   " for symbol '%s' from section '%s'"),
8439 			 syms[idx]->name ? syms[idx]->name : "<Local sym>",
8440 			 sec->name);
8441 		      bfd_set_error (bfd_error_invalid_operation);
8442 		      goto error_return;
8443 		    }
8444 		}
8445 	    }
8446 
8447 	  sym.st_shndx = shndx;
8448 	}
8449 
8450       if ((flags & BSF_THREAD_LOCAL) != 0)
8451 	type = STT_TLS;
8452       else if ((flags & BSF_GNU_INDIRECT_FUNCTION) != 0)
8453 	type = STT_GNU_IFUNC;
8454       else if ((flags & BSF_FUNCTION) != 0)
8455 	type = STT_FUNC;
8456       else if ((flags & BSF_OBJECT) != 0)
8457 	type = STT_OBJECT;
8458       else if ((flags & BSF_RELC) != 0)
8459 	type = STT_RELC;
8460       else if ((flags & BSF_SRELC) != 0)
8461 	type = STT_SRELC;
8462       else
8463 	type = STT_NOTYPE;
8464 
8465       if (syms[idx]->section->flags & SEC_THREAD_LOCAL)
8466 	type = STT_TLS;
8467 
8468       /* Processor-specific types.  */
8469       if (type_ptr != NULL
8470 	  && bed->elf_backend_get_symbol_type)
8471 	type = ((*bed->elf_backend_get_symbol_type)
8472 		(&type_ptr->internal_elf_sym, type));
8473 
8474       if (flags & BSF_SECTION_SYM)
8475 	{
8476 	  if (flags & BSF_GLOBAL)
8477 	    sym.st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
8478 	  else
8479 	    sym.st_info = ELF_ST_INFO (STB_LOCAL, STT_SECTION);
8480 	}
8481       else if (bfd_is_com_section (syms[idx]->section))
8482 	{
8483 	  if (type != STT_TLS)
8484 	    {
8485 	      if ((abfd->flags & BFD_CONVERT_ELF_COMMON))
8486 		type = ((abfd->flags & BFD_USE_ELF_STT_COMMON)
8487 			? STT_COMMON : STT_OBJECT);
8488 	      else
8489 		type = ((flags & BSF_ELF_COMMON) != 0
8490 			? STT_COMMON : STT_OBJECT);
8491 	    }
8492 	  sym.st_info = ELF_ST_INFO (STB_GLOBAL, type);
8493 	}
8494       else if (bfd_is_und_section (syms[idx]->section))
8495 	sym.st_info = ELF_ST_INFO (((flags & BSF_WEAK)
8496 				    ? STB_WEAK
8497 				    : STB_GLOBAL),
8498 				   type);
8499       else if (flags & BSF_FILE)
8500 	sym.st_info = ELF_ST_INFO (STB_LOCAL, STT_FILE);
8501       else
8502 	{
8503 	  int bind = STB_LOCAL;
8504 
8505 	  if (flags & BSF_LOCAL)
8506 	    bind = STB_LOCAL;
8507 	  else if (flags & BSF_GNU_UNIQUE)
8508 	    bind = STB_GNU_UNIQUE;
8509 	  else if (flags & BSF_WEAK)
8510 	    bind = STB_WEAK;
8511 	  else if (flags & BSF_GLOBAL)
8512 	    bind = STB_GLOBAL;
8513 
8514 	  sym.st_info = ELF_ST_INFO (bind, type);
8515 	}
8516 
8517       if (type_ptr != NULL)
8518 	{
8519 	  sym.st_other = type_ptr->internal_elf_sym.st_other;
8520 	  sym.st_target_internal
8521 	    = type_ptr->internal_elf_sym.st_target_internal;
8522 	}
8523       else
8524 	{
8525 	  sym.st_other = 0;
8526 	  sym.st_target_internal = 0;
8527 	}
8528 
8529       idx++;
8530       symstrtab[idx].sym = sym;
8531       symstrtab[idx].dest_index = outbound_syms_index;
8532 
8533       outbound_syms_index++;
8534     }
8535 
8536   /* Finalize the .strtab section.  */
8537   _bfd_elf_strtab_finalize (stt);
8538 
8539   /* Swap out the .strtab section.  */
8540   for (idx = 0; idx <= symcount; idx++)
8541     {
8542       struct elf_sym_strtab *elfsym = &symstrtab[idx];
8543       if (elfsym->sym.st_name == (unsigned long) -1)
8544 	elfsym->sym.st_name = 0;
8545       else
8546 	elfsym->sym.st_name = _bfd_elf_strtab_offset (stt,
8547 						      elfsym->sym.st_name);
8548       if (info && info->callbacks->ctf_new_symbol)
8549 	info->callbacks->ctf_new_symbol (elfsym->dest_index,
8550 					 &elfsym->sym);
8551 
8552       /* Inform the linker of the addition of this symbol.  */
8553 
8554       bed->s->swap_symbol_out (abfd, &elfsym->sym,
8555 			       (outbound_syms
8556 				+ (elfsym->dest_index
8557 				   * bed->s->sizeof_sym)),
8558 			       NPTR_ADD (outbound_shndx,
8559 					 (elfsym->dest_index
8560 					  * sizeof (Elf_External_Sym_Shndx))));
8561     }
8562   free (symstrtab);
8563 
8564   *sttp = stt;
8565   symstrtab_hdr->sh_size = _bfd_elf_strtab_size (stt);
8566   symstrtab_hdr->sh_type = SHT_STRTAB;
8567   symstrtab_hdr->sh_flags = bed->elf_strtab_flags;
8568   symstrtab_hdr->sh_addr = 0;
8569   symstrtab_hdr->sh_entsize = 0;
8570   symstrtab_hdr->sh_link = 0;
8571   symstrtab_hdr->sh_info = 0;
8572   symstrtab_hdr->sh_addralign = 1;
8573 
8574   return true;
8575 }
8576 
8577 /* Return the number of bytes required to hold the symtab vector.
8578 
8579    Note that we base it on the count plus 1, since we will null terminate
8580    the vector allocated based on this size.  However, the ELF symbol table
8581    always has a dummy entry as symbol #0, so it ends up even.  */
8582 
8583 long
8584 _bfd_elf_get_symtab_upper_bound (bfd *abfd)
8585 {
8586   bfd_size_type symcount;
8587   long symtab_size;
8588   Elf_Internal_Shdr *hdr = &elf_tdata (abfd)->symtab_hdr;
8589 
8590   symcount = hdr->sh_size / get_elf_backend_data (abfd)->s->sizeof_sym;
8591   if (symcount > LONG_MAX / sizeof (asymbol *))
8592     {
8593       bfd_set_error (bfd_error_file_too_big);
8594       return -1;
8595     }
8596   symtab_size = symcount * (sizeof (asymbol *));
8597   if (symcount == 0)
8598     symtab_size = sizeof (asymbol *);
8599   else if (!bfd_write_p (abfd))
8600     {
8601       ufile_ptr filesize = bfd_get_file_size (abfd);
8602 
8603       if (filesize != 0 && (unsigned long) symtab_size > filesize)
8604 	{
8605 	  bfd_set_error (bfd_error_file_truncated);
8606 	  return -1;
8607 	}
8608     }
8609 
8610   return symtab_size;
8611 }
8612 
8613 long
8614 _bfd_elf_get_dynamic_symtab_upper_bound (bfd *abfd)
8615 {
8616   bfd_size_type symcount;
8617   long symtab_size;
8618   Elf_Internal_Shdr *hdr = &elf_tdata (abfd)->dynsymtab_hdr;
8619 
8620   if (elf_dynsymtab (abfd) == 0)
8621     {
8622       bfd_set_error (bfd_error_invalid_operation);
8623       return -1;
8624     }
8625 
8626   symcount = hdr->sh_size / get_elf_backend_data (abfd)->s->sizeof_sym;
8627   if (symcount > LONG_MAX / sizeof (asymbol *))
8628     {
8629       bfd_set_error (bfd_error_file_too_big);
8630       return -1;
8631     }
8632   symtab_size = symcount * (sizeof (asymbol *));
8633   if (symcount == 0)
8634     symtab_size = sizeof (asymbol *);
8635   else if (!bfd_write_p (abfd))
8636     {
8637       ufile_ptr filesize = bfd_get_file_size (abfd);
8638 
8639       if (filesize != 0 && (unsigned long) symtab_size > filesize)
8640 	{
8641 	  bfd_set_error (bfd_error_file_truncated);
8642 	  return -1;
8643 	}
8644     }
8645 
8646   return symtab_size;
8647 }
8648 
8649 long
8650 _bfd_elf_get_reloc_upper_bound (bfd *abfd, sec_ptr asect)
8651 {
8652   if (asect->reloc_count != 0 && !bfd_write_p (abfd))
8653     {
8654       /* Sanity check reloc section size.  */
8655       ufile_ptr filesize = bfd_get_file_size (abfd);
8656 
8657       if (filesize != 0)
8658 	{
8659 	  struct bfd_elf_section_data *d = elf_section_data (asect);
8660 	  bfd_size_type rel_size = d->rel.hdr ? d->rel.hdr->sh_size : 0;
8661 	  bfd_size_type rela_size = d->rela.hdr ? d->rela.hdr->sh_size : 0;
8662 
8663 	  if (rel_size + rela_size > filesize
8664 	      || rel_size + rela_size < rel_size)
8665 	    {
8666 	      bfd_set_error (bfd_error_file_truncated);
8667 	      return -1;
8668 	    }
8669 	}
8670     }
8671 
8672 #if SIZEOF_LONG == SIZEOF_INT
8673   if (asect->reloc_count >= LONG_MAX / sizeof (arelent *))
8674     {
8675       bfd_set_error (bfd_error_file_too_big);
8676       return -1;
8677     }
8678 #endif
8679   return (asect->reloc_count + 1L) * sizeof (arelent *);
8680 }
8681 
8682 /* Canonicalize the relocs.  */
8683 
8684 long
8685 _bfd_elf_canonicalize_reloc (bfd *abfd,
8686 			     sec_ptr section,
8687 			     arelent **relptr,
8688 			     asymbol **symbols)
8689 {
8690   arelent *tblptr;
8691   unsigned int i;
8692   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
8693 
8694   if (! bed->s->slurp_reloc_table (abfd, section, symbols, false))
8695     return -1;
8696 
8697   tblptr = section->relocation;
8698   for (i = 0; i < section->reloc_count; i++)
8699     *relptr++ = tblptr++;
8700 
8701   *relptr = NULL;
8702 
8703   return section->reloc_count;
8704 }
8705 
8706 long
8707 _bfd_elf_canonicalize_symtab (bfd *abfd, asymbol **allocation)
8708 {
8709   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
8710   long symcount = bed->s->slurp_symbol_table (abfd, allocation, false);
8711 
8712   if (symcount >= 0)
8713     abfd->symcount = symcount;
8714   return symcount;
8715 }
8716 
8717 long
8718 _bfd_elf_canonicalize_dynamic_symtab (bfd *abfd,
8719 				      asymbol **allocation)
8720 {
8721   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
8722   long symcount = bed->s->slurp_symbol_table (abfd, allocation, true);
8723 
8724   if (symcount >= 0)
8725     abfd->dynsymcount = symcount;
8726   return symcount;
8727 }
8728 
8729 /* Return the size required for the dynamic reloc entries.  Any loadable
8730    section that was actually installed in the BFD, and has type SHT_REL
8731    or SHT_RELA, and uses the dynamic symbol table, is considered to be a
8732    dynamic reloc section.  */
8733 
8734 long
8735 _bfd_elf_get_dynamic_reloc_upper_bound (bfd *abfd)
8736 {
8737   bfd_size_type count, ext_rel_size;
8738   asection *s;
8739 
8740   if (elf_dynsymtab (abfd) == 0)
8741     {
8742       bfd_set_error (bfd_error_invalid_operation);
8743       return -1;
8744     }
8745 
8746   count = 1;
8747   ext_rel_size = 0;
8748   for (s = abfd->sections; s != NULL; s = s->next)
8749     if (elf_section_data (s)->this_hdr.sh_link == elf_dynsymtab (abfd)
8750 	&& (elf_section_data (s)->this_hdr.sh_type == SHT_REL
8751 	    || elf_section_data (s)->this_hdr.sh_type == SHT_RELA))
8752       {
8753 	ext_rel_size += s->size;
8754 	if (ext_rel_size < s->size)
8755 	  {
8756 	    bfd_set_error (bfd_error_file_truncated);
8757 	    return -1;
8758 	  }
8759 	count += s->size / elf_section_data (s)->this_hdr.sh_entsize;
8760 	if (count > LONG_MAX / sizeof (arelent *))
8761 	  {
8762 	    bfd_set_error (bfd_error_file_too_big);
8763 	    return -1;
8764 	  }
8765       }
8766   if (count > 1 && !bfd_write_p (abfd))
8767     {
8768       /* Sanity check reloc section sizes.  */
8769       ufile_ptr filesize = bfd_get_file_size (abfd);
8770       if (filesize != 0 && ext_rel_size > filesize)
8771 	{
8772 	  bfd_set_error (bfd_error_file_truncated);
8773 	  return -1;
8774 	}
8775     }
8776   return count * sizeof (arelent *);
8777 }
8778 
8779 /* Canonicalize the dynamic relocation entries.  Note that we return the
8780    dynamic relocations as a single block, although they are actually
8781    associated with particular sections; the interface, which was
8782    designed for SunOS style shared libraries, expects that there is only
8783    one set of dynamic relocs.  Any loadable section that was actually
8784    installed in the BFD, and has type SHT_REL or SHT_RELA, and uses the
8785    dynamic symbol table, is considered to be a dynamic reloc section.  */
8786 
8787 long
8788 _bfd_elf_canonicalize_dynamic_reloc (bfd *abfd,
8789 				     arelent **storage,
8790 				     asymbol **syms)
8791 {
8792   bool (*slurp_relocs) (bfd *, asection *, asymbol **, bool);
8793   asection *s;
8794   long ret;
8795 
8796   if (elf_dynsymtab (abfd) == 0)
8797     {
8798       bfd_set_error (bfd_error_invalid_operation);
8799       return -1;
8800     }
8801 
8802   slurp_relocs = get_elf_backend_data (abfd)->s->slurp_reloc_table;
8803   ret = 0;
8804   for (s = abfd->sections; s != NULL; s = s->next)
8805     {
8806       if (elf_section_data (s)->this_hdr.sh_link == elf_dynsymtab (abfd)
8807 	  && (elf_section_data (s)->this_hdr.sh_type == SHT_REL
8808 	      || elf_section_data (s)->this_hdr.sh_type == SHT_RELA))
8809 	{
8810 	  arelent *p;
8811 	  long count, i;
8812 
8813 	  if (! (*slurp_relocs) (abfd, s, syms, true))
8814 	    return -1;
8815 	  count = s->size / elf_section_data (s)->this_hdr.sh_entsize;
8816 	  p = s->relocation;
8817 	  for (i = 0; i < count; i++)
8818 	    *storage++ = p++;
8819 	  ret += count;
8820 	}
8821     }
8822 
8823   *storage = NULL;
8824 
8825   return ret;
8826 }
8827 
8828 /* Read in the version information.  */
8829 
8830 bool
8831 _bfd_elf_slurp_version_tables (bfd *abfd, bool default_imported_symver)
8832 {
8833   bfd_byte *contents = NULL;
8834   unsigned int freeidx = 0;
8835   size_t amt;
8836 
8837   if (elf_dynverref (abfd) != 0)
8838     {
8839       Elf_Internal_Shdr *hdr;
8840       Elf_External_Verneed *everneed;
8841       Elf_Internal_Verneed *iverneed;
8842       unsigned int i;
8843       bfd_byte *contents_end;
8844 
8845       hdr = &elf_tdata (abfd)->dynverref_hdr;
8846 
8847       if (hdr->sh_info > hdr->sh_size / sizeof (Elf_External_Verneed))
8848 	{
8849 	error_return_bad_verref:
8850 	  _bfd_error_handler
8851 	    (_("%pB: .gnu.version_r invalid entry"), abfd);
8852 	  bfd_set_error (bfd_error_bad_value);
8853 	error_return_verref:
8854 	  elf_tdata (abfd)->verref = NULL;
8855 	  elf_tdata (abfd)->cverrefs = 0;
8856 	  goto error_return;
8857 	}
8858 
8859       if (bfd_seek (abfd, hdr->sh_offset, SEEK_SET) != 0)
8860 	goto error_return_verref;
8861       contents = _bfd_malloc_and_read (abfd, hdr->sh_size, hdr->sh_size);
8862       if (contents == NULL)
8863 	goto error_return_verref;
8864 
8865       if (_bfd_mul_overflow (hdr->sh_info, sizeof (Elf_Internal_Verneed), &amt))
8866 	{
8867 	  bfd_set_error (bfd_error_file_too_big);
8868 	  goto error_return_verref;
8869 	}
8870       if (amt == 0)
8871 	goto error_return_verref;
8872       elf_tdata (abfd)->verref = (Elf_Internal_Verneed *) bfd_zalloc (abfd, amt);
8873       if (elf_tdata (abfd)->verref == NULL)
8874 	goto error_return_verref;
8875 
8876       BFD_ASSERT (sizeof (Elf_External_Verneed)
8877 		  == sizeof (Elf_External_Vernaux));
8878       contents_end = contents + hdr->sh_size - sizeof (Elf_External_Verneed);
8879       everneed = (Elf_External_Verneed *) contents;
8880       iverneed = elf_tdata (abfd)->verref;
8881       for (i = 0; i < hdr->sh_info; i++, iverneed++)
8882 	{
8883 	  Elf_External_Vernaux *evernaux;
8884 	  Elf_Internal_Vernaux *ivernaux;
8885 	  unsigned int j;
8886 
8887 	  _bfd_elf_swap_verneed_in (abfd, everneed, iverneed);
8888 
8889 	  iverneed->vn_bfd = abfd;
8890 
8891 	  iverneed->vn_filename =
8892 	    bfd_elf_string_from_elf_section (abfd, hdr->sh_link,
8893 					     iverneed->vn_file);
8894 	  if (iverneed->vn_filename == NULL)
8895 	    goto error_return_bad_verref;
8896 
8897 	  if (iverneed->vn_cnt == 0)
8898 	    iverneed->vn_auxptr = NULL;
8899 	  else
8900 	    {
8901 	      if (_bfd_mul_overflow (iverneed->vn_cnt,
8902 				     sizeof (Elf_Internal_Vernaux), &amt))
8903 		{
8904 		  bfd_set_error (bfd_error_file_too_big);
8905 		  goto error_return_verref;
8906 		}
8907 	      iverneed->vn_auxptr = (struct elf_internal_vernaux *)
8908 		bfd_alloc (abfd, amt);
8909 	      if (iverneed->vn_auxptr == NULL)
8910 		goto error_return_verref;
8911 	    }
8912 
8913 	  if (iverneed->vn_aux
8914 	      > (size_t) (contents_end - (bfd_byte *) everneed))
8915 	    goto error_return_bad_verref;
8916 
8917 	  evernaux = ((Elf_External_Vernaux *)
8918 		      ((bfd_byte *) everneed + iverneed->vn_aux));
8919 	  ivernaux = iverneed->vn_auxptr;
8920 	  for (j = 0; j < iverneed->vn_cnt; j++, ivernaux++)
8921 	    {
8922 	      _bfd_elf_swap_vernaux_in (abfd, evernaux, ivernaux);
8923 
8924 	      ivernaux->vna_nodename =
8925 		bfd_elf_string_from_elf_section (abfd, hdr->sh_link,
8926 						 ivernaux->vna_name);
8927 	      if (ivernaux->vna_nodename == NULL)
8928 		goto error_return_bad_verref;
8929 
8930 	      if (ivernaux->vna_other > freeidx)
8931 		freeidx = ivernaux->vna_other;
8932 
8933 	      ivernaux->vna_nextptr = NULL;
8934 	      if (ivernaux->vna_next == 0)
8935 		{
8936 		  iverneed->vn_cnt = j + 1;
8937 		  break;
8938 		}
8939 	      if (j + 1 < iverneed->vn_cnt)
8940 		ivernaux->vna_nextptr = ivernaux + 1;
8941 
8942 	      if (ivernaux->vna_next
8943 		  > (size_t) (contents_end - (bfd_byte *) evernaux))
8944 		goto error_return_bad_verref;
8945 
8946 	      evernaux = ((Elf_External_Vernaux *)
8947 			  ((bfd_byte *) evernaux + ivernaux->vna_next));
8948 	    }
8949 
8950 	  iverneed->vn_nextref = NULL;
8951 	  if (iverneed->vn_next == 0)
8952 	    break;
8953 	  if (i + 1 < hdr->sh_info)
8954 	    iverneed->vn_nextref = iverneed + 1;
8955 
8956 	  if (iverneed->vn_next
8957 	      > (size_t) (contents_end - (bfd_byte *) everneed))
8958 	    goto error_return_bad_verref;
8959 
8960 	  everneed = ((Elf_External_Verneed *)
8961 		      ((bfd_byte *) everneed + iverneed->vn_next));
8962 	}
8963       elf_tdata (abfd)->cverrefs = i;
8964 
8965       free (contents);
8966       contents = NULL;
8967     }
8968 
8969   if (elf_dynverdef (abfd) != 0)
8970     {
8971       Elf_Internal_Shdr *hdr;
8972       Elf_External_Verdef *everdef;
8973       Elf_Internal_Verdef *iverdef;
8974       Elf_Internal_Verdef *iverdefarr;
8975       Elf_Internal_Verdef iverdefmem;
8976       unsigned int i;
8977       unsigned int maxidx;
8978       bfd_byte *contents_end_def, *contents_end_aux;
8979 
8980       hdr = &elf_tdata (abfd)->dynverdef_hdr;
8981 
8982       if (hdr->sh_size < sizeof (Elf_External_Verdef))
8983 	{
8984 	error_return_bad_verdef:
8985 	  _bfd_error_handler
8986 	    (_("%pB: .gnu.version_d invalid entry"), abfd);
8987 	  bfd_set_error (bfd_error_bad_value);
8988 	error_return_verdef:
8989 	  elf_tdata (abfd)->verdef = NULL;
8990 	  elf_tdata (abfd)->cverdefs = 0;
8991 	  goto error_return;
8992 	}
8993 
8994       if (bfd_seek (abfd, hdr->sh_offset, SEEK_SET) != 0)
8995 	goto error_return_verdef;
8996       contents = _bfd_malloc_and_read (abfd, hdr->sh_size, hdr->sh_size);
8997       if (contents == NULL)
8998 	goto error_return_verdef;
8999 
9000       BFD_ASSERT (sizeof (Elf_External_Verdef)
9001 		  >= sizeof (Elf_External_Verdaux));
9002       contents_end_def = contents + hdr->sh_size
9003 			 - sizeof (Elf_External_Verdef);
9004       contents_end_aux = contents + hdr->sh_size
9005 			 - sizeof (Elf_External_Verdaux);
9006 
9007       /* We know the number of entries in the section but not the maximum
9008 	 index.  Therefore we have to run through all entries and find
9009 	 the maximum.  */
9010       everdef = (Elf_External_Verdef *) contents;
9011       maxidx = 0;
9012       for (i = 0; i < hdr->sh_info; ++i)
9013 	{
9014 	  _bfd_elf_swap_verdef_in (abfd, everdef, &iverdefmem);
9015 
9016 	  if ((iverdefmem.vd_ndx & ((unsigned) VERSYM_VERSION)) == 0)
9017 	    goto error_return_bad_verdef;
9018 	  if ((iverdefmem.vd_ndx & ((unsigned) VERSYM_VERSION)) > maxidx)
9019 	    maxidx = iverdefmem.vd_ndx & ((unsigned) VERSYM_VERSION);
9020 
9021 	  if (iverdefmem.vd_next == 0)
9022 	    break;
9023 
9024 	  if (iverdefmem.vd_next
9025 	      > (size_t) (contents_end_def - (bfd_byte *) everdef))
9026 	    goto error_return_bad_verdef;
9027 
9028 	  everdef = ((Elf_External_Verdef *)
9029 		     ((bfd_byte *) everdef + iverdefmem.vd_next));
9030 	}
9031 
9032       if (default_imported_symver)
9033 	{
9034 	  if (freeidx > maxidx)
9035 	    maxidx = ++freeidx;
9036 	  else
9037 	    freeidx = ++maxidx;
9038 	}
9039       if (_bfd_mul_overflow (maxidx, sizeof (Elf_Internal_Verdef), &amt))
9040 	{
9041 	  bfd_set_error (bfd_error_file_too_big);
9042 	  goto error_return_verdef;
9043 	}
9044       elf_tdata (abfd)->verdef = (Elf_Internal_Verdef *) bfd_zalloc (abfd, amt);
9045       if (elf_tdata (abfd)->verdef == NULL)
9046 	goto error_return_verdef;
9047 
9048       elf_tdata (abfd)->cverdefs = maxidx;
9049 
9050       everdef = (Elf_External_Verdef *) contents;
9051       iverdefarr = elf_tdata (abfd)->verdef;
9052       for (i = 0; i < hdr->sh_info; i++)
9053 	{
9054 	  Elf_External_Verdaux *everdaux;
9055 	  Elf_Internal_Verdaux *iverdaux;
9056 	  unsigned int j;
9057 
9058 	  _bfd_elf_swap_verdef_in (abfd, everdef, &iverdefmem);
9059 
9060 	  if ((iverdefmem.vd_ndx & VERSYM_VERSION) == 0)
9061 	    goto error_return_bad_verdef;
9062 
9063 	  iverdef = &iverdefarr[(iverdefmem.vd_ndx & VERSYM_VERSION) - 1];
9064 	  memcpy (iverdef, &iverdefmem, offsetof (Elf_Internal_Verdef, vd_bfd));
9065 
9066 	  iverdef->vd_bfd = abfd;
9067 
9068 	  if (iverdef->vd_cnt == 0)
9069 	    iverdef->vd_auxptr = NULL;
9070 	  else
9071 	    {
9072 	      if (_bfd_mul_overflow (iverdef->vd_cnt,
9073 				     sizeof (Elf_Internal_Verdaux), &amt))
9074 		{
9075 		  bfd_set_error (bfd_error_file_too_big);
9076 		  goto error_return_verdef;
9077 		}
9078 	      iverdef->vd_auxptr = (struct elf_internal_verdaux *)
9079 		bfd_alloc (abfd, amt);
9080 	      if (iverdef->vd_auxptr == NULL)
9081 		goto error_return_verdef;
9082 	    }
9083 
9084 	  if (iverdef->vd_aux
9085 	      > (size_t) (contents_end_aux - (bfd_byte *) everdef))
9086 	    goto error_return_bad_verdef;
9087 
9088 	  everdaux = ((Elf_External_Verdaux *)
9089 		      ((bfd_byte *) everdef + iverdef->vd_aux));
9090 	  iverdaux = iverdef->vd_auxptr;
9091 	  for (j = 0; j < iverdef->vd_cnt; j++, iverdaux++)
9092 	    {
9093 	      _bfd_elf_swap_verdaux_in (abfd, everdaux, iverdaux);
9094 
9095 	      iverdaux->vda_nodename =
9096 		bfd_elf_string_from_elf_section (abfd, hdr->sh_link,
9097 						 iverdaux->vda_name);
9098 	      if (iverdaux->vda_nodename == NULL)
9099 		goto error_return_bad_verdef;
9100 
9101 	      iverdaux->vda_nextptr = NULL;
9102 	      if (iverdaux->vda_next == 0)
9103 		{
9104 		  iverdef->vd_cnt = j + 1;
9105 		  break;
9106 		}
9107 	      if (j + 1 < iverdef->vd_cnt)
9108 		iverdaux->vda_nextptr = iverdaux + 1;
9109 
9110 	      if (iverdaux->vda_next
9111 		  > (size_t) (contents_end_aux - (bfd_byte *) everdaux))
9112 		goto error_return_bad_verdef;
9113 
9114 	      everdaux = ((Elf_External_Verdaux *)
9115 			  ((bfd_byte *) everdaux + iverdaux->vda_next));
9116 	    }
9117 
9118 	  iverdef->vd_nodename = NULL;
9119 	  if (iverdef->vd_cnt)
9120 	    iverdef->vd_nodename = iverdef->vd_auxptr->vda_nodename;
9121 
9122 	  iverdef->vd_nextdef = NULL;
9123 	  if (iverdef->vd_next == 0)
9124 	    break;
9125 	  if ((size_t) (iverdef - iverdefarr) + 1 < maxidx)
9126 	    iverdef->vd_nextdef = iverdef + 1;
9127 
9128 	  everdef = ((Elf_External_Verdef *)
9129 		     ((bfd_byte *) everdef + iverdef->vd_next));
9130 	}
9131 
9132       free (contents);
9133       contents = NULL;
9134     }
9135   else if (default_imported_symver)
9136     {
9137       if (freeidx < 3)
9138 	freeidx = 3;
9139       else
9140 	freeidx++;
9141 
9142       if (_bfd_mul_overflow (freeidx, sizeof (Elf_Internal_Verdef), &amt))
9143 	{
9144 	  bfd_set_error (bfd_error_file_too_big);
9145 	  goto error_return;
9146 	}
9147       elf_tdata (abfd)->verdef = (Elf_Internal_Verdef *) bfd_zalloc (abfd, amt);
9148       if (elf_tdata (abfd)->verdef == NULL)
9149 	goto error_return;
9150 
9151       elf_tdata (abfd)->cverdefs = freeidx;
9152     }
9153 
9154   /* Create a default version based on the soname.  */
9155   if (default_imported_symver)
9156     {
9157       Elf_Internal_Verdef *iverdef;
9158       Elf_Internal_Verdaux *iverdaux;
9159 
9160       iverdef = &elf_tdata (abfd)->verdef[freeidx - 1];
9161 
9162       iverdef->vd_version = VER_DEF_CURRENT;
9163       iverdef->vd_flags = 0;
9164       iverdef->vd_ndx = freeidx;
9165       iverdef->vd_cnt = 1;
9166 
9167       iverdef->vd_bfd = abfd;
9168 
9169       iverdef->vd_nodename = bfd_elf_get_dt_soname (abfd);
9170       if (iverdef->vd_nodename == NULL)
9171 	goto error_return_verdef;
9172       iverdef->vd_nextdef = NULL;
9173       iverdef->vd_auxptr = ((struct elf_internal_verdaux *)
9174 			    bfd_zalloc (abfd, sizeof (Elf_Internal_Verdaux)));
9175       if (iverdef->vd_auxptr == NULL)
9176 	goto error_return_verdef;
9177 
9178       iverdaux = iverdef->vd_auxptr;
9179       iverdaux->vda_nodename = iverdef->vd_nodename;
9180     }
9181 
9182   return true;
9183 
9184  error_return:
9185   free (contents);
9186   return false;
9187 }
9188 
9189 asymbol *
9190 _bfd_elf_make_empty_symbol (bfd *abfd)
9191 {
9192   elf_symbol_type *newsym;
9193 
9194   newsym = (elf_symbol_type *) bfd_zalloc (abfd, sizeof (*newsym));
9195   if (!newsym)
9196     return NULL;
9197   newsym->symbol.the_bfd = abfd;
9198   return &newsym->symbol;
9199 }
9200 
9201 void
9202 _bfd_elf_get_symbol_info (bfd *abfd ATTRIBUTE_UNUSED,
9203 			  asymbol *symbol,
9204 			  symbol_info *ret)
9205 {
9206   bfd_symbol_info (symbol, ret);
9207 }
9208 
9209 /* Return whether a symbol name implies a local symbol.  Most targets
9210    use this function for the is_local_label_name entry point, but some
9211    override it.  */
9212 
9213 bool
9214 _bfd_elf_is_local_label_name (bfd *abfd ATTRIBUTE_UNUSED,
9215 			      const char *name)
9216 {
9217   /* Normal local symbols start with ``.L''.  */
9218   if (name[0] == '.' && name[1] == 'L')
9219     return true;
9220 
9221   /* At least some SVR4 compilers (e.g., UnixWare 2.1 cc) generate
9222      DWARF debugging symbols starting with ``..''.  */
9223   if (name[0] == '.' && name[1] == '.')
9224     return true;
9225 
9226   /* gcc will sometimes generate symbols beginning with ``_.L_'' when
9227      emitting DWARF debugging output.  I suspect this is actually a
9228      small bug in gcc (it calls ASM_OUTPUT_LABEL when it should call
9229      ASM_GENERATE_INTERNAL_LABEL, and this causes the leading
9230      underscore to be emitted on some ELF targets).  For ease of use,
9231      we treat such symbols as local.  */
9232   if (name[0] == '_' && name[1] == '.' && name[2] == 'L' && name[3] == '_')
9233     return true;
9234 
9235   /* Treat assembler generated fake symbols, dollar local labels and
9236      forward-backward labels (aka local labels) as locals.
9237      These labels have the form:
9238 
9239        L0^A.*				       (fake symbols)
9240 
9241        [.]?L[0123456789]+{^A|^B}[0123456789]*  (local labels)
9242 
9243      Versions which start with .L will have already been matched above,
9244      so we only need to match the rest.  */
9245   if (name[0] == 'L' && ISDIGIT (name[1]))
9246     {
9247       bool ret = false;
9248       const char * p;
9249       char c;
9250 
9251       for (p = name + 2; (c = *p); p++)
9252 	{
9253 	  if (c == 1 || c == 2)
9254 	    {
9255 	      if (c == 1 && p == name + 2)
9256 		/* A fake symbol.  */
9257 		return true;
9258 
9259 	      /* FIXME: We are being paranoid here and treating symbols like
9260 		 L0^Bfoo as if there were non-local, on the grounds that the
9261 		 assembler will never generate them.  But can any symbol
9262 		 containing an ASCII value in the range 1-31 ever be anything
9263 		 other than some kind of local ?  */
9264 	      ret = true;
9265 	    }
9266 
9267 	  if (! ISDIGIT (c))
9268 	    {
9269 	      ret = false;
9270 	      break;
9271 	    }
9272 	}
9273       return ret;
9274     }
9275 
9276   return false;
9277 }
9278 
9279 alent *
9280 _bfd_elf_get_lineno (bfd *abfd ATTRIBUTE_UNUSED,
9281 		     asymbol *symbol ATTRIBUTE_UNUSED)
9282 {
9283   abort ();
9284   return NULL;
9285 }
9286 
9287 bool
9288 _bfd_elf_set_arch_mach (bfd *abfd,
9289 			enum bfd_architecture arch,
9290 			unsigned long machine)
9291 {
9292   /* If this isn't the right architecture for this backend, and this
9293      isn't the generic backend, fail.  */
9294   if (arch != get_elf_backend_data (abfd)->arch
9295       && arch != bfd_arch_unknown
9296       && get_elf_backend_data (abfd)->arch != bfd_arch_unknown)
9297     return false;
9298 
9299   return bfd_default_set_arch_mach (abfd, arch, machine);
9300 }
9301 
9302 /* Find the nearest line to a particular section and offset,
9303    for error reporting.  */
9304 
9305 bool
9306 _bfd_elf_find_nearest_line (bfd *abfd,
9307 			    asymbol **symbols,
9308 			    asection *section,
9309 			    bfd_vma offset,
9310 			    const char **filename_ptr,
9311 			    const char **functionname_ptr,
9312 			    unsigned int *line_ptr,
9313 			    unsigned int *discriminator_ptr)
9314 {
9315   return _bfd_elf_find_nearest_line_with_alt (abfd, NULL, symbols, section,
9316 					      offset, filename_ptr,
9317 					      functionname_ptr, line_ptr,
9318 					      discriminator_ptr);
9319 }
9320 
9321 /* Find the nearest line to a particular section and offset,
9322    for error reporting.  ALT_BFD representing a .gnu_debugaltlink file
9323    can be optionally specified.  */
9324 
9325 bool
9326 _bfd_elf_find_nearest_line_with_alt (bfd *abfd,
9327 				     const char *alt_filename,
9328 				     asymbol **symbols,
9329 				     asection *section,
9330 				     bfd_vma offset,
9331 				     const char **filename_ptr,
9332 				     const char **functionname_ptr,
9333 				     unsigned int *line_ptr,
9334 				     unsigned int *discriminator_ptr)
9335 {
9336   bool found;
9337 
9338   if (_bfd_dwarf2_find_nearest_line_with_alt (abfd, alt_filename, symbols, NULL,
9339 					      section, offset, filename_ptr,
9340 					      functionname_ptr, line_ptr,
9341 					      discriminator_ptr,
9342 					      dwarf_debug_sections,
9343 					      &elf_tdata (abfd)->dwarf2_find_line_info))
9344     return true;
9345 
9346   if (_bfd_dwarf1_find_nearest_line (abfd, symbols, section, offset,
9347 				     filename_ptr, functionname_ptr, line_ptr))
9348     {
9349       if (!*functionname_ptr)
9350 	_bfd_elf_find_function (abfd, symbols, section, offset,
9351 				*filename_ptr ? NULL : filename_ptr,
9352 				functionname_ptr);
9353       return true;
9354     }
9355 
9356   if (! _bfd_stab_section_find_nearest_line (abfd, symbols, section, offset,
9357 					     &found, filename_ptr,
9358 					     functionname_ptr, line_ptr,
9359 					     &elf_tdata (abfd)->line_info))
9360     return false;
9361   if (found && (*functionname_ptr || *line_ptr))
9362     return true;
9363 
9364   if (symbols == NULL)
9365     return false;
9366 
9367   if (! _bfd_elf_find_function (abfd, symbols, section, offset,
9368 				filename_ptr, functionname_ptr))
9369     return false;
9370 
9371   *line_ptr = 0;
9372   return true;
9373 }
9374 
9375 /* Find the line for a symbol.  */
9376 
9377 bool
9378 _bfd_elf_find_line (bfd *abfd, asymbol **symbols, asymbol *symbol,
9379 		    const char **filename_ptr, unsigned int *line_ptr)
9380 {
9381   struct elf_obj_tdata *tdata = elf_tdata (abfd);
9382   return _bfd_dwarf2_find_nearest_line (abfd, symbols, symbol, NULL, 0,
9383 					filename_ptr, NULL, line_ptr, NULL,
9384 					dwarf_debug_sections,
9385 					&tdata->dwarf2_find_line_info);
9386 }
9387 
9388 /* After a call to bfd_find_nearest_line, successive calls to
9389    bfd_find_inliner_info can be used to get source information about
9390    each level of function inlining that terminated at the address
9391    passed to bfd_find_nearest_line.  Currently this is only supported
9392    for DWARF2 with appropriate DWARF3 extensions. */
9393 
9394 bool
9395 _bfd_elf_find_inliner_info (bfd *abfd,
9396 			    const char **filename_ptr,
9397 			    const char **functionname_ptr,
9398 			    unsigned int *line_ptr)
9399 {
9400   struct elf_obj_tdata *tdata = elf_tdata (abfd);
9401   return _bfd_dwarf2_find_inliner_info (abfd, filename_ptr,
9402 					functionname_ptr, line_ptr,
9403 					&tdata->dwarf2_find_line_info);
9404 }
9405 
9406 int
9407 _bfd_elf_sizeof_headers (bfd *abfd, struct bfd_link_info *info)
9408 {
9409   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
9410   int ret = bed->s->sizeof_ehdr;
9411 
9412   if (!bfd_link_relocatable (info))
9413     {
9414       bfd_size_type phdr_size = elf_program_header_size (abfd);
9415 
9416       if (phdr_size == (bfd_size_type) -1)
9417 	{
9418 	  struct elf_segment_map *m;
9419 
9420 	  phdr_size = 0;
9421 	  for (m = elf_seg_map (abfd); m != NULL; m = m->next)
9422 	    phdr_size += bed->s->sizeof_phdr;
9423 
9424 	  if (phdr_size == 0)
9425 	    phdr_size = get_program_header_size (abfd, info);
9426 	}
9427 
9428       elf_program_header_size (abfd) = phdr_size;
9429       ret += phdr_size;
9430     }
9431 
9432   return ret;
9433 }
9434 
9435 bool
9436 _bfd_elf_set_section_contents (bfd *abfd,
9437 			       sec_ptr section,
9438 			       const void *location,
9439 			       file_ptr offset,
9440 			       bfd_size_type count)
9441 {
9442   Elf_Internal_Shdr *hdr;
9443 
9444   if (! abfd->output_has_begun
9445       && ! _bfd_elf_compute_section_file_positions (abfd, NULL))
9446     return false;
9447 
9448   if (!count)
9449     return true;
9450 
9451   hdr = &elf_section_data (section)->this_hdr;
9452   if (hdr->sh_offset == (file_ptr) -1)
9453     {
9454       unsigned char *contents;
9455 
9456       if (bfd_section_is_ctf (section))
9457 	/* Nothing to do with this section: the contents are generated
9458 	   later.  */
9459 	return true;
9460 
9461       if ((offset + count) > hdr->sh_size)
9462 	{
9463 	  _bfd_error_handler
9464 	    (_("%pB:%pA: error: attempting to write"
9465 	       " over the end of the section"),
9466 	     abfd, section);
9467 
9468 	  bfd_set_error (bfd_error_invalid_operation);
9469 	  return false;
9470 	}
9471 
9472       contents = hdr->contents;
9473       if (contents == NULL)
9474 	{
9475 	  _bfd_error_handler
9476 	    (_("%pB:%pA: error: attempting to write"
9477 	       " section into an empty buffer"),
9478 	     abfd, section);
9479 
9480 	  bfd_set_error (bfd_error_invalid_operation);
9481 	  return false;
9482 	}
9483 
9484       memcpy (contents + offset, location, count);
9485       return true;
9486     }
9487 
9488   return _bfd_generic_set_section_contents (abfd, section,
9489 					    location, offset, count);
9490 }
9491 
9492 bool
9493 _bfd_elf_no_info_to_howto (bfd *abfd ATTRIBUTE_UNUSED,
9494 			   arelent *cache_ptr ATTRIBUTE_UNUSED,
9495 			   Elf_Internal_Rela *dst ATTRIBUTE_UNUSED)
9496 {
9497   abort ();
9498   return false;
9499 }
9500 
9501 /* Try to convert a non-ELF reloc into an ELF one.  */
9502 
9503 bool
9504 _bfd_elf_validate_reloc (bfd *abfd, arelent *areloc)
9505 {
9506   /* Check whether we really have an ELF howto.  */
9507 
9508   if ((*areloc->sym_ptr_ptr)->the_bfd->xvec != abfd->xvec)
9509     {
9510       bfd_reloc_code_real_type code;
9511       reloc_howto_type *howto;
9512 
9513       /* Alien reloc: Try to determine its type to replace it with an
9514 	 equivalent ELF reloc.  */
9515 
9516       if (areloc->howto->pc_relative)
9517 	{
9518 	  switch (areloc->howto->bitsize)
9519 	    {
9520 	    case 8:
9521 	      code = BFD_RELOC_8_PCREL;
9522 	      break;
9523 	    case 12:
9524 	      code = BFD_RELOC_12_PCREL;
9525 	      break;
9526 	    case 16:
9527 	      code = BFD_RELOC_16_PCREL;
9528 	      break;
9529 	    case 24:
9530 	      code = BFD_RELOC_24_PCREL;
9531 	      break;
9532 	    case 32:
9533 	      code = BFD_RELOC_32_PCREL;
9534 	      break;
9535 	    case 64:
9536 	      code = BFD_RELOC_64_PCREL;
9537 	      break;
9538 	    default:
9539 	      goto fail;
9540 	    }
9541 
9542 	  howto = bfd_reloc_type_lookup (abfd, code);
9543 
9544 	  if (howto && areloc->howto->pcrel_offset != howto->pcrel_offset)
9545 	    {
9546 	      if (howto->pcrel_offset)
9547 		areloc->addend += areloc->address;
9548 	      else
9549 		areloc->addend -= areloc->address; /* addend is unsigned!! */
9550 	    }
9551 	}
9552       else
9553 	{
9554 	  switch (areloc->howto->bitsize)
9555 	    {
9556 	    case 8:
9557 	      code = BFD_RELOC_8;
9558 	      break;
9559 	    case 14:
9560 	      code = BFD_RELOC_14;
9561 	      break;
9562 	    case 16:
9563 	      code = BFD_RELOC_16;
9564 	      break;
9565 	    case 26:
9566 	      code = BFD_RELOC_26;
9567 	      break;
9568 	    case 32:
9569 	      code = BFD_RELOC_32;
9570 	      break;
9571 	    case 64:
9572 	      code = BFD_RELOC_64;
9573 	      break;
9574 	    default:
9575 	      goto fail;
9576 	    }
9577 
9578 	  howto = bfd_reloc_type_lookup (abfd, code);
9579 	}
9580 
9581       if (howto)
9582 	areloc->howto = howto;
9583       else
9584 	goto fail;
9585     }
9586 
9587   return true;
9588 
9589  fail:
9590   /* xgettext:c-format */
9591   _bfd_error_handler (_("%pB: %s unsupported"),
9592 		      abfd, areloc->howto->name);
9593   bfd_set_error (bfd_error_sorry);
9594   return false;
9595 }
9596 
9597 bool
9598 _bfd_elf_close_and_cleanup (bfd *abfd)
9599 {
9600   struct elf_obj_tdata *tdata = elf_tdata (abfd);
9601   if (tdata != NULL
9602       && (bfd_get_format (abfd) == bfd_object
9603 	  || bfd_get_format (abfd) == bfd_core))
9604     {
9605       if (elf_tdata (abfd)->o != NULL && elf_shstrtab (abfd) != NULL)
9606 	_bfd_elf_strtab_free (elf_shstrtab (abfd));
9607       _bfd_dwarf2_cleanup_debug_info (abfd, &tdata->dwarf2_find_line_info);
9608       _bfd_stab_cleanup (abfd, &tdata->line_info);
9609     }
9610 
9611   return _bfd_generic_close_and_cleanup (abfd);
9612 }
9613 
9614 /* For Rel targets, we encode meaningful data for BFD_RELOC_VTABLE_ENTRY
9615    in the relocation's offset.  Thus we cannot allow any sort of sanity
9616    range-checking to interfere.  There is nothing else to do in processing
9617    this reloc.  */
9618 
9619 bfd_reloc_status_type
9620 _bfd_elf_rel_vtable_reloc_fn
9621   (bfd *abfd ATTRIBUTE_UNUSED, arelent *re ATTRIBUTE_UNUSED,
9622    struct bfd_symbol *symbol ATTRIBUTE_UNUSED,
9623    void *data ATTRIBUTE_UNUSED, asection *is ATTRIBUTE_UNUSED,
9624    bfd *obfd ATTRIBUTE_UNUSED, char **errmsg ATTRIBUTE_UNUSED)
9625 {
9626   return bfd_reloc_ok;
9627 }
9628 
9629 /* Elf core file support.  Much of this only works on native
9630    toolchains, since we rely on knowing the
9631    machine-dependent procfs structure in order to pick
9632    out details about the corefile.  */
9633 
9634 #ifdef HAVE_SYS_PROCFS_H
9635 # include <sys/procfs.h>
9636 #endif
9637 
9638 /* Return a PID that identifies a "thread" for threaded cores, or the
9639    PID of the main process for non-threaded cores.  */
9640 
9641 static int
9642 elfcore_make_pid (bfd *abfd)
9643 {
9644   int pid;
9645 
9646   pid = elf_tdata (abfd)->core->lwpid;
9647   if (pid == 0)
9648     pid = elf_tdata (abfd)->core->pid;
9649 
9650   return pid;
9651 }
9652 
9653 /* If there isn't a section called NAME, make one, using data from
9654    SECT.  Note, this function will generate a reference to NAME, so
9655    you shouldn't deallocate or overwrite it.  */
9656 
9657 static bool
9658 elfcore_maybe_make_sect (bfd *abfd, char *name, asection *sect)
9659 {
9660   asection *sect2;
9661 
9662   if (bfd_get_section_by_name (abfd, name) != NULL)
9663     return true;
9664 
9665   sect2 = bfd_make_section_with_flags (abfd, name, sect->flags);
9666   if (sect2 == NULL)
9667     return false;
9668 
9669   sect2->size = sect->size;
9670   sect2->filepos = sect->filepos;
9671   sect2->alignment_power = sect->alignment_power;
9672   return true;
9673 }
9674 
9675 /* Create a pseudosection containing SIZE bytes at FILEPOS.  This
9676    actually creates up to two pseudosections:
9677    - For the single-threaded case, a section named NAME, unless
9678      such a section already exists.
9679    - For the multi-threaded case, a section named "NAME/PID", where
9680      PID is elfcore_make_pid (abfd).
9681    Both pseudosections have identical contents.  */
9682 bool
9683 _bfd_elfcore_make_pseudosection (bfd *abfd,
9684 				 char *name,
9685 				 size_t size,
9686 				 ufile_ptr filepos)
9687 {
9688   char buf[100];
9689   char *threaded_name;
9690   size_t len;
9691   asection *sect;
9692 
9693   /* Build the section name.  */
9694 
9695   sprintf (buf, "%s/%d", name, elfcore_make_pid (abfd));
9696   len = strlen (buf) + 1;
9697   threaded_name = (char *) bfd_alloc (abfd, len);
9698   if (threaded_name == NULL)
9699     return false;
9700   memcpy (threaded_name, buf, len);
9701 
9702   sect = bfd_make_section_anyway_with_flags (abfd, threaded_name,
9703 					     SEC_HAS_CONTENTS);
9704   if (sect == NULL)
9705     return false;
9706   sect->size = size;
9707   sect->filepos = filepos;
9708   sect->alignment_power = 2;
9709 
9710   return elfcore_maybe_make_sect (abfd, name, sect);
9711 }
9712 
9713 static bool
9714 elfcore_make_auxv_note_section (bfd *abfd, Elf_Internal_Note *note,
9715 				size_t offs)
9716 {
9717   asection *sect = bfd_make_section_anyway_with_flags (abfd, ".auxv",
9718 						       SEC_HAS_CONTENTS);
9719 
9720   if (sect == NULL)
9721     return false;
9722 
9723   sect->size = note->descsz - offs;
9724   sect->filepos = note->descpos + offs;
9725   sect->alignment_power = 1 + bfd_get_arch_size (abfd) / 32;
9726 
9727   return true;
9728 }
9729 
9730 /* prstatus_t exists on:
9731      solaris 2.5+
9732      linux 2.[01] + glibc
9733      unixware 4.2
9734 */
9735 
9736 #if defined (HAVE_PRSTATUS_T)
9737 
9738 static bool
9739 elfcore_grok_prstatus (bfd *abfd, Elf_Internal_Note *note)
9740 {
9741   size_t size;
9742   int offset;
9743 
9744   if (note->descsz == sizeof (prstatus_t))
9745     {
9746       prstatus_t prstat;
9747 
9748       size = sizeof (prstat.pr_reg);
9749       offset   = offsetof (prstatus_t, pr_reg);
9750       memcpy (&prstat, note->descdata, sizeof (prstat));
9751 
9752       /* Do not overwrite the core signal if it
9753 	 has already been set by another thread.  */
9754       if (elf_tdata (abfd)->core->signal == 0)
9755 	elf_tdata (abfd)->core->signal = prstat.pr_cursig;
9756       if (elf_tdata (abfd)->core->pid == 0)
9757 	elf_tdata (abfd)->core->pid = prstat.pr_pid;
9758 
9759       /* pr_who exists on:
9760 	 solaris 2.5+
9761 	 unixware 4.2
9762 	 pr_who doesn't exist on:
9763 	 linux 2.[01]
9764 	 */
9765 #if defined (HAVE_PRSTATUS_T_PR_WHO)
9766       elf_tdata (abfd)->core->lwpid = prstat.pr_who;
9767 #else
9768       elf_tdata (abfd)->core->lwpid = prstat.pr_pid;
9769 #endif
9770     }
9771 #if defined (HAVE_PRSTATUS32_T)
9772   else if (note->descsz == sizeof (prstatus32_t))
9773     {
9774       /* 64-bit host, 32-bit corefile */
9775       prstatus32_t prstat;
9776 
9777       size = sizeof (prstat.pr_reg);
9778       offset   = offsetof (prstatus32_t, pr_reg);
9779       memcpy (&prstat, note->descdata, sizeof (prstat));
9780 
9781       /* Do not overwrite the core signal if it
9782 	 has already been set by another thread.  */
9783       if (elf_tdata (abfd)->core->signal == 0)
9784 	elf_tdata (abfd)->core->signal = prstat.pr_cursig;
9785       if (elf_tdata (abfd)->core->pid == 0)
9786 	elf_tdata (abfd)->core->pid = prstat.pr_pid;
9787 
9788       /* pr_who exists on:
9789 	 solaris 2.5+
9790 	 unixware 4.2
9791 	 pr_who doesn't exist on:
9792 	 linux 2.[01]
9793 	 */
9794 #if defined (HAVE_PRSTATUS32_T_PR_WHO)
9795       elf_tdata (abfd)->core->lwpid = prstat.pr_who;
9796 #else
9797       elf_tdata (abfd)->core->lwpid = prstat.pr_pid;
9798 #endif
9799     }
9800 #endif /* HAVE_PRSTATUS32_T */
9801   else
9802     {
9803       /* Fail - we don't know how to handle any other
9804 	 note size (ie. data object type).  */
9805       return true;
9806     }
9807 
9808   /* Make a ".reg/999" section and a ".reg" section.  */
9809   return _bfd_elfcore_make_pseudosection (abfd, ".reg",
9810 					  size, note->descpos + offset);
9811 }
9812 #endif /* defined (HAVE_PRSTATUS_T) */
9813 
9814 /* Create a pseudosection containing the exact contents of NOTE.  */
9815 static bool
9816 elfcore_make_note_pseudosection (bfd *abfd,
9817 				 char *name,
9818 				 Elf_Internal_Note *note)
9819 {
9820   return _bfd_elfcore_make_pseudosection (abfd, name,
9821 					  note->descsz, note->descpos);
9822 }
9823 
9824 /* There isn't a consistent prfpregset_t across platforms,
9825    but it doesn't matter, because we don't have to pick this
9826    data structure apart.  */
9827 
9828 static bool
9829 elfcore_grok_prfpreg (bfd *abfd, Elf_Internal_Note *note)
9830 {
9831   return elfcore_make_note_pseudosection (abfd, ".reg2", note);
9832 }
9833 
9834 /* Linux dumps the Intel SSE regs in a note named "LINUX" with a note
9835    type of NT_PRXFPREG.  Just include the whole note's contents
9836    literally.  */
9837 
9838 static bool
9839 elfcore_grok_prxfpreg (bfd *abfd, Elf_Internal_Note *note)
9840 {
9841   return elfcore_make_note_pseudosection (abfd, ".reg-xfp", note);
9842 }
9843 
9844 /* Linux dumps the Intel XSAVE extended state in a note named "LINUX"
9845    with a note type of NT_X86_XSTATE.  Just include the whole note's
9846    contents literally.  */
9847 
9848 static bool
9849 elfcore_grok_xstatereg (bfd *abfd, Elf_Internal_Note *note)
9850 {
9851   return elfcore_make_note_pseudosection (abfd, ".reg-xstate", note);
9852 }
9853 
9854 static bool
9855 elfcore_grok_ppc_vmx (bfd *abfd, Elf_Internal_Note *note)
9856 {
9857   return elfcore_make_note_pseudosection (abfd, ".reg-ppc-vmx", note);
9858 }
9859 
9860 static bool
9861 elfcore_grok_ppc_vsx (bfd *abfd, Elf_Internal_Note *note)
9862 {
9863   return elfcore_make_note_pseudosection (abfd, ".reg-ppc-vsx", note);
9864 }
9865 
9866 static bool
9867 elfcore_grok_ppc_tar (bfd *abfd, Elf_Internal_Note *note)
9868 {
9869   return elfcore_make_note_pseudosection (abfd, ".reg-ppc-tar", note);
9870 }
9871 
9872 static bool
9873 elfcore_grok_ppc_ppr (bfd *abfd, Elf_Internal_Note *note)
9874 {
9875   return elfcore_make_note_pseudosection (abfd, ".reg-ppc-ppr", note);
9876 }
9877 
9878 static bool
9879 elfcore_grok_ppc_dscr (bfd *abfd, Elf_Internal_Note *note)
9880 {
9881   return elfcore_make_note_pseudosection (abfd, ".reg-ppc-dscr", note);
9882 }
9883 
9884 static bool
9885 elfcore_grok_ppc_ebb (bfd *abfd, Elf_Internal_Note *note)
9886 {
9887   return elfcore_make_note_pseudosection (abfd, ".reg-ppc-ebb", note);
9888 }
9889 
9890 static bool
9891 elfcore_grok_ppc_pmu (bfd *abfd, Elf_Internal_Note *note)
9892 {
9893   return elfcore_make_note_pseudosection (abfd, ".reg-ppc-pmu", note);
9894 }
9895 
9896 static bool
9897 elfcore_grok_ppc_tm_cgpr (bfd *abfd, Elf_Internal_Note *note)
9898 {
9899   return elfcore_make_note_pseudosection (abfd, ".reg-ppc-tm-cgpr", note);
9900 }
9901 
9902 static bool
9903 elfcore_grok_ppc_tm_cfpr (bfd *abfd, Elf_Internal_Note *note)
9904 {
9905   return elfcore_make_note_pseudosection (abfd, ".reg-ppc-tm-cfpr", note);
9906 }
9907 
9908 static bool
9909 elfcore_grok_ppc_tm_cvmx (bfd *abfd, Elf_Internal_Note *note)
9910 {
9911   return elfcore_make_note_pseudosection (abfd, ".reg-ppc-tm-cvmx", note);
9912 }
9913 
9914 static bool
9915 elfcore_grok_ppc_tm_cvsx (bfd *abfd, Elf_Internal_Note *note)
9916 {
9917   return elfcore_make_note_pseudosection (abfd, ".reg-ppc-tm-cvsx", note);
9918 }
9919 
9920 static bool
9921 elfcore_grok_ppc_tm_spr (bfd *abfd, Elf_Internal_Note *note)
9922 {
9923   return elfcore_make_note_pseudosection (abfd, ".reg-ppc-tm-spr", note);
9924 }
9925 
9926 static bool
9927 elfcore_grok_ppc_tm_ctar (bfd *abfd, Elf_Internal_Note *note)
9928 {
9929   return elfcore_make_note_pseudosection (abfd, ".reg-ppc-tm-ctar", note);
9930 }
9931 
9932 static bool
9933 elfcore_grok_ppc_tm_cppr (bfd *abfd, Elf_Internal_Note *note)
9934 {
9935   return elfcore_make_note_pseudosection (abfd, ".reg-ppc-tm-cppr", note);
9936 }
9937 
9938 static bool
9939 elfcore_grok_ppc_tm_cdscr (bfd *abfd, Elf_Internal_Note *note)
9940 {
9941   return elfcore_make_note_pseudosection (abfd, ".reg-ppc-tm-cdscr", note);
9942 }
9943 
9944 static bool
9945 elfcore_grok_s390_high_gprs (bfd *abfd, Elf_Internal_Note *note)
9946 {
9947   return elfcore_make_note_pseudosection (abfd, ".reg-s390-high-gprs", note);
9948 }
9949 
9950 static bool
9951 elfcore_grok_s390_timer (bfd *abfd, Elf_Internal_Note *note)
9952 {
9953   return elfcore_make_note_pseudosection (abfd, ".reg-s390-timer", note);
9954 }
9955 
9956 static bool
9957 elfcore_grok_s390_todcmp (bfd *abfd, Elf_Internal_Note *note)
9958 {
9959   return elfcore_make_note_pseudosection (abfd, ".reg-s390-todcmp", note);
9960 }
9961 
9962 static bool
9963 elfcore_grok_s390_todpreg (bfd *abfd, Elf_Internal_Note *note)
9964 {
9965   return elfcore_make_note_pseudosection (abfd, ".reg-s390-todpreg", note);
9966 }
9967 
9968 static bool
9969 elfcore_grok_s390_ctrs (bfd *abfd, Elf_Internal_Note *note)
9970 {
9971   return elfcore_make_note_pseudosection (abfd, ".reg-s390-ctrs", note);
9972 }
9973 
9974 static bool
9975 elfcore_grok_s390_prefix (bfd *abfd, Elf_Internal_Note *note)
9976 {
9977   return elfcore_make_note_pseudosection (abfd, ".reg-s390-prefix", note);
9978 }
9979 
9980 static bool
9981 elfcore_grok_s390_last_break (bfd *abfd, Elf_Internal_Note *note)
9982 {
9983   return elfcore_make_note_pseudosection (abfd, ".reg-s390-last-break", note);
9984 }
9985 
9986 static bool
9987 elfcore_grok_s390_system_call (bfd *abfd, Elf_Internal_Note *note)
9988 {
9989   return elfcore_make_note_pseudosection (abfd, ".reg-s390-system-call", note);
9990 }
9991 
9992 static bool
9993 elfcore_grok_s390_tdb (bfd *abfd, Elf_Internal_Note *note)
9994 {
9995   return elfcore_make_note_pseudosection (abfd, ".reg-s390-tdb", note);
9996 }
9997 
9998 static bool
9999 elfcore_grok_s390_vxrs_low (bfd *abfd, Elf_Internal_Note *note)
10000 {
10001   return elfcore_make_note_pseudosection (abfd, ".reg-s390-vxrs-low", note);
10002 }
10003 
10004 static bool
10005 elfcore_grok_s390_vxrs_high (bfd *abfd, Elf_Internal_Note *note)
10006 {
10007   return elfcore_make_note_pseudosection (abfd, ".reg-s390-vxrs-high", note);
10008 }
10009 
10010 static bool
10011 elfcore_grok_s390_gs_cb (bfd *abfd, Elf_Internal_Note *note)
10012 {
10013   return elfcore_make_note_pseudosection (abfd, ".reg-s390-gs-cb", note);
10014 }
10015 
10016 static bool
10017 elfcore_grok_s390_gs_bc (bfd *abfd, Elf_Internal_Note *note)
10018 {
10019   return elfcore_make_note_pseudosection (abfd, ".reg-s390-gs-bc", note);
10020 }
10021 
10022 static bool
10023 elfcore_grok_arm_vfp (bfd *abfd, Elf_Internal_Note *note)
10024 {
10025   return elfcore_make_note_pseudosection (abfd, ".reg-arm-vfp", note);
10026 }
10027 
10028 static bool
10029 elfcore_grok_aarch_tls (bfd *abfd, Elf_Internal_Note *note)
10030 {
10031   return elfcore_make_note_pseudosection (abfd, ".reg-aarch-tls", note);
10032 }
10033 
10034 static bool
10035 elfcore_grok_aarch_hw_break (bfd *abfd, Elf_Internal_Note *note)
10036 {
10037   return elfcore_make_note_pseudosection (abfd, ".reg-aarch-hw-break", note);
10038 }
10039 
10040 static bool
10041 elfcore_grok_aarch_hw_watch (bfd *abfd, Elf_Internal_Note *note)
10042 {
10043   return elfcore_make_note_pseudosection (abfd, ".reg-aarch-hw-watch", note);
10044 }
10045 
10046 static bool
10047 elfcore_grok_aarch_sve (bfd *abfd, Elf_Internal_Note *note)
10048 {
10049   return elfcore_make_note_pseudosection (abfd, ".reg-aarch-sve", note);
10050 }
10051 
10052 static bool
10053 elfcore_grok_aarch_pauth (bfd *abfd, Elf_Internal_Note *note)
10054 {
10055   return elfcore_make_note_pseudosection (abfd, ".reg-aarch-pauth", note);
10056 }
10057 
10058 static bool
10059 elfcore_grok_aarch_mte (bfd *abfd, Elf_Internal_Note *note)
10060 {
10061   return elfcore_make_note_pseudosection (abfd, ".reg-aarch-mte",
10062 					  note);
10063 }
10064 
10065 static bool
10066 elfcore_grok_arc_v2 (bfd *abfd, Elf_Internal_Note *note)
10067 {
10068   return elfcore_make_note_pseudosection (abfd, ".reg-arc-v2", note);
10069 }
10070 
10071 /* Convert NOTE into a bfd_section called ".reg-riscv-csr".  Return TRUE if
10072    successful otherwise, return FALSE.  */
10073 
10074 static bool
10075 elfcore_grok_riscv_csr (bfd *abfd, Elf_Internal_Note *note)
10076 {
10077   return elfcore_make_note_pseudosection (abfd, ".reg-riscv-csr", note);
10078 }
10079 
10080 /* Convert NOTE into a bfd_section called ".gdb-tdesc".  Return TRUE if
10081    successful otherwise, return FALSE.  */
10082 
10083 static bool
10084 elfcore_grok_gdb_tdesc (bfd *abfd, Elf_Internal_Note *note)
10085 {
10086   return elfcore_make_note_pseudosection (abfd, ".gdb-tdesc", note);
10087 }
10088 
10089 static bool
10090 elfcore_grok_loongarch_cpucfg (bfd *abfd, Elf_Internal_Note *note)
10091 {
10092   return elfcore_make_note_pseudosection (abfd, ".reg-loongarch-cpucfg", note);
10093 }
10094 
10095 static bool
10096 elfcore_grok_loongarch_lbt (bfd *abfd, Elf_Internal_Note *note)
10097 {
10098   return elfcore_make_note_pseudosection (abfd, ".reg-loongarch-lbt", note);
10099 }
10100 
10101 static bool
10102 elfcore_grok_loongarch_lsx (bfd *abfd, Elf_Internal_Note *note)
10103 {
10104   return elfcore_make_note_pseudosection (abfd, ".reg-loongarch-lsx", note);
10105 }
10106 
10107 static bool
10108 elfcore_grok_loongarch_lasx (bfd *abfd, Elf_Internal_Note *note)
10109 {
10110   return elfcore_make_note_pseudosection (abfd, ".reg-loongarch-lasx", note);
10111 }
10112 
10113 #if defined (HAVE_PRPSINFO_T)
10114 typedef prpsinfo_t   elfcore_psinfo_t;
10115 #if defined (HAVE_PRPSINFO32_T)		/* Sparc64 cross Sparc32 */
10116 typedef prpsinfo32_t elfcore_psinfo32_t;
10117 #endif
10118 #endif
10119 
10120 #if defined (HAVE_PSINFO_T)
10121 typedef psinfo_t   elfcore_psinfo_t;
10122 #if defined (HAVE_PSINFO32_T)		/* Sparc64 cross Sparc32 */
10123 typedef psinfo32_t elfcore_psinfo32_t;
10124 #endif
10125 #endif
10126 
10127 /* return a malloc'ed copy of a string at START which is at
10128    most MAX bytes long, possibly without a terminating '\0'.
10129    the copy will always have a terminating '\0'.  */
10130 
10131 char *
10132 _bfd_elfcore_strndup (bfd *abfd, char *start, size_t max)
10133 {
10134   char *dups;
10135   char *end = (char *) memchr (start, '\0', max);
10136   size_t len;
10137 
10138   if (end == NULL)
10139     len = max;
10140   else
10141     len = end - start;
10142 
10143   dups = (char *) bfd_alloc (abfd, len + 1);
10144   if (dups == NULL)
10145     return NULL;
10146 
10147   memcpy (dups, start, len);
10148   dups[len] = '\0';
10149 
10150   return dups;
10151 }
10152 
10153 #if defined (HAVE_PRPSINFO_T) || defined (HAVE_PSINFO_T)
10154 static bool
10155 elfcore_grok_psinfo (bfd *abfd, Elf_Internal_Note *note)
10156 {
10157   if (note->descsz == sizeof (elfcore_psinfo_t))
10158     {
10159       elfcore_psinfo_t psinfo;
10160 
10161       memcpy (&psinfo, note->descdata, sizeof (psinfo));
10162 
10163 #if defined (HAVE_PSINFO_T_PR_PID) || defined (HAVE_PRPSINFO_T_PR_PID)
10164       elf_tdata (abfd)->core->pid = psinfo.pr_pid;
10165 #endif
10166       elf_tdata (abfd)->core->program
10167 	= _bfd_elfcore_strndup (abfd, psinfo.pr_fname,
10168 				sizeof (psinfo.pr_fname));
10169 
10170       elf_tdata (abfd)->core->command
10171 	= _bfd_elfcore_strndup (abfd, psinfo.pr_psargs,
10172 				sizeof (psinfo.pr_psargs));
10173     }
10174 #if defined (HAVE_PRPSINFO32_T) || defined (HAVE_PSINFO32_T)
10175   else if (note->descsz == sizeof (elfcore_psinfo32_t))
10176     {
10177       /* 64-bit host, 32-bit corefile */
10178       elfcore_psinfo32_t psinfo;
10179 
10180       memcpy (&psinfo, note->descdata, sizeof (psinfo));
10181 
10182 #if defined (HAVE_PSINFO32_T_PR_PID) || defined (HAVE_PRPSINFO32_T_PR_PID)
10183       elf_tdata (abfd)->core->pid = psinfo.pr_pid;
10184 #endif
10185       elf_tdata (abfd)->core->program
10186 	= _bfd_elfcore_strndup (abfd, psinfo.pr_fname,
10187 				sizeof (psinfo.pr_fname));
10188 
10189       elf_tdata (abfd)->core->command
10190 	= _bfd_elfcore_strndup (abfd, psinfo.pr_psargs,
10191 				sizeof (psinfo.pr_psargs));
10192     }
10193 #endif
10194 
10195   else
10196     {
10197       /* Fail - we don't know how to handle any other
10198 	 note size (ie. data object type).  */
10199       return true;
10200     }
10201 
10202   /* Note that for some reason, a spurious space is tacked
10203      onto the end of the args in some (at least one anyway)
10204      implementations, so strip it off if it exists.  */
10205 
10206   {
10207     char *command = elf_tdata (abfd)->core->command;
10208     int n = strlen (command);
10209 
10210     if (0 < n && command[n - 1] == ' ')
10211       command[n - 1] = '\0';
10212   }
10213 
10214   return true;
10215 }
10216 #endif /* defined (HAVE_PRPSINFO_T) || defined (HAVE_PSINFO_T) */
10217 
10218 #if defined (HAVE_PSTATUS_T)
10219 static bool
10220 elfcore_grok_pstatus (bfd *abfd, Elf_Internal_Note *note)
10221 {
10222   if (note->descsz == sizeof (pstatus_t)
10223 #if defined (HAVE_PXSTATUS_T)
10224       || note->descsz == sizeof (pxstatus_t)
10225 #endif
10226       )
10227     {
10228       pstatus_t pstat;
10229 
10230       memcpy (&pstat, note->descdata, sizeof (pstat));
10231 
10232       elf_tdata (abfd)->core->pid = pstat.pr_pid;
10233     }
10234 #if defined (HAVE_PSTATUS32_T)
10235   else if (note->descsz == sizeof (pstatus32_t))
10236     {
10237       /* 64-bit host, 32-bit corefile */
10238       pstatus32_t pstat;
10239 
10240       memcpy (&pstat, note->descdata, sizeof (pstat));
10241 
10242       elf_tdata (abfd)->core->pid = pstat.pr_pid;
10243     }
10244 #endif
10245   /* Could grab some more details from the "representative"
10246      lwpstatus_t in pstat.pr_lwp, but we'll catch it all in an
10247      NT_LWPSTATUS note, presumably.  */
10248 
10249   return true;
10250 }
10251 #endif /* defined (HAVE_PSTATUS_T) */
10252 
10253 #if defined (HAVE_LWPSTATUS_T)
10254 static bool
10255 elfcore_grok_lwpstatus (bfd *abfd, Elf_Internal_Note *note)
10256 {
10257   lwpstatus_t lwpstat;
10258   char buf[100];
10259   char *name;
10260   size_t len;
10261   asection *sect;
10262 
10263   if (note->descsz != sizeof (lwpstat)
10264 #if defined (HAVE_LWPXSTATUS_T)
10265       && note->descsz != sizeof (lwpxstatus_t)
10266 #endif
10267       )
10268     return true;
10269 
10270   memcpy (&lwpstat, note->descdata, sizeof (lwpstat));
10271 
10272   elf_tdata (abfd)->core->lwpid = lwpstat.pr_lwpid;
10273   /* Do not overwrite the core signal if it has already been set by
10274      another thread.  */
10275   if (elf_tdata (abfd)->core->signal == 0)
10276     elf_tdata (abfd)->core->signal = lwpstat.pr_cursig;
10277 
10278   /* Make a ".reg/999" section.  */
10279 
10280   sprintf (buf, ".reg/%d", elfcore_make_pid (abfd));
10281   len = strlen (buf) + 1;
10282   name = bfd_alloc (abfd, len);
10283   if (name == NULL)
10284     return false;
10285   memcpy (name, buf, len);
10286 
10287   sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS);
10288   if (sect == NULL)
10289     return false;
10290 
10291 #if defined (HAVE_LWPSTATUS_T_PR_CONTEXT)
10292   sect->size = sizeof (lwpstat.pr_context.uc_mcontext.gregs);
10293   sect->filepos = note->descpos
10294     + offsetof (lwpstatus_t, pr_context.uc_mcontext.gregs);
10295 #endif
10296 
10297 #if defined (HAVE_LWPSTATUS_T_PR_REG)
10298   sect->size = sizeof (lwpstat.pr_reg);
10299   sect->filepos = note->descpos + offsetof (lwpstatus_t, pr_reg);
10300 #endif
10301 
10302   sect->alignment_power = 2;
10303 
10304   if (!elfcore_maybe_make_sect (abfd, ".reg", sect))
10305     return false;
10306 
10307   /* Make a ".reg2/999" section */
10308 
10309   sprintf (buf, ".reg2/%d", elfcore_make_pid (abfd));
10310   len = strlen (buf) + 1;
10311   name = bfd_alloc (abfd, len);
10312   if (name == NULL)
10313     return false;
10314   memcpy (name, buf, len);
10315 
10316   sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS);
10317   if (sect == NULL)
10318     return false;
10319 
10320 #if defined (HAVE_LWPSTATUS_T_PR_CONTEXT)
10321   sect->size = sizeof (lwpstat.pr_context.uc_mcontext.fpregs);
10322   sect->filepos = note->descpos
10323     + offsetof (lwpstatus_t, pr_context.uc_mcontext.fpregs);
10324 #endif
10325 
10326 #if defined (HAVE_LWPSTATUS_T_PR_FPREG)
10327   sect->size = sizeof (lwpstat.pr_fpreg);
10328   sect->filepos = note->descpos + offsetof (lwpstatus_t, pr_fpreg);
10329 #endif
10330 
10331   sect->alignment_power = 2;
10332 
10333   return elfcore_maybe_make_sect (abfd, ".reg2", sect);
10334 }
10335 #endif /* defined (HAVE_LWPSTATUS_T) */
10336 
10337 /* These constants, and the structure offsets used below, are defined by
10338    Cygwin's core_dump.h */
10339 #define NOTE_INFO_PROCESS  1
10340 #define NOTE_INFO_THREAD   2
10341 #define NOTE_INFO_MODULE   3
10342 #define NOTE_INFO_MODULE64 4
10343 
10344 static bool
10345 elfcore_grok_win32pstatus (bfd *abfd, Elf_Internal_Note *note)
10346 {
10347   char buf[30];
10348   char *name;
10349   size_t len;
10350   unsigned int name_size;
10351   asection *sect;
10352   unsigned int type;
10353   int is_active_thread;
10354   bfd_vma base_addr;
10355 
10356   if (note->descsz < 4)
10357     return true;
10358 
10359   if (! startswith (note->namedata, "win32"))
10360     return true;
10361 
10362   type = bfd_get_32 (abfd, note->descdata);
10363 
10364   struct
10365   {
10366     const char *type_name;
10367     unsigned long min_size;
10368   } size_check[] =
10369       {
10370        { "NOTE_INFO_PROCESS", 12 },
10371        { "NOTE_INFO_THREAD", 12 },
10372        { "NOTE_INFO_MODULE", 12 },
10373        { "NOTE_INFO_MODULE64", 16 },
10374       };
10375 
10376   if (type == 0 || type > (sizeof(size_check)/sizeof(size_check[0])))
10377       return true;
10378 
10379   if (note->descsz < size_check[type - 1].min_size)
10380     {
10381       _bfd_error_handler (_("%pB: warning: win32pstatus %s of size %lu bytes"
10382 			    " is too small"),
10383 			  abfd, size_check[type - 1].type_name, note->descsz);
10384       return true;
10385     }
10386 
10387   switch (type)
10388     {
10389     case NOTE_INFO_PROCESS:
10390       /* FIXME: need to add ->core->command.  */
10391       elf_tdata (abfd)->core->pid = bfd_get_32 (abfd, note->descdata + 4);
10392       elf_tdata (abfd)->core->signal = bfd_get_32 (abfd, note->descdata + 8);
10393       break;
10394 
10395     case NOTE_INFO_THREAD:
10396       /* Make a ".reg/<tid>" section containing the Win32 API thread CONTEXT
10397 	 structure. */
10398       /* thread_info.tid */
10399       sprintf (buf, ".reg/%ld", (long) bfd_get_32 (abfd, note->descdata + 4));
10400 
10401       len = strlen (buf) + 1;
10402       name = (char *) bfd_alloc (abfd, len);
10403       if (name == NULL)
10404 	return false;
10405 
10406       memcpy (name, buf, len);
10407 
10408       sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS);
10409       if (sect == NULL)
10410 	return false;
10411 
10412       /* sizeof (thread_info.thread_context) */
10413       sect->size = note->descsz - 12;
10414       /* offsetof (thread_info.thread_context) */
10415       sect->filepos = note->descpos + 12;
10416       sect->alignment_power = 2;
10417 
10418       /* thread_info.is_active_thread */
10419       is_active_thread = bfd_get_32 (abfd, note->descdata + 8);
10420 
10421       if (is_active_thread)
10422 	if (! elfcore_maybe_make_sect (abfd, ".reg", sect))
10423 	  return false;
10424       break;
10425 
10426     case NOTE_INFO_MODULE:
10427     case NOTE_INFO_MODULE64:
10428       /* Make a ".module/xxxxxxxx" section.  */
10429       if (type == NOTE_INFO_MODULE)
10430 	{
10431 	  /* module_info.base_address */
10432 	  base_addr = bfd_get_32 (abfd, note->descdata + 4);
10433 	  sprintf (buf, ".module/%08lx", (unsigned long) base_addr);
10434 	  /* module_info.module_name_size */
10435 	  name_size = bfd_get_32 (abfd, note->descdata + 8);
10436 	}
10437       else /* NOTE_INFO_MODULE64 */
10438 	{
10439 	  /* module_info.base_address */
10440 	  base_addr = bfd_get_64 (abfd, note->descdata + 4);
10441 	  sprintf (buf, ".module/%016lx", (unsigned long) base_addr);
10442 	  /* module_info.module_name_size */
10443 	  name_size = bfd_get_32 (abfd, note->descdata + 12);
10444 	}
10445 
10446       len = strlen (buf) + 1;
10447       name = (char *) bfd_alloc (abfd, len);
10448       if (name == NULL)
10449 	return false;
10450 
10451       memcpy (name, buf, len);
10452 
10453       sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS);
10454 
10455       if (sect == NULL)
10456 	return false;
10457 
10458       if (note->descsz < 12 + name_size)
10459 	{
10460 	  _bfd_error_handler (_("%pB: win32pstatus NOTE_INFO_MODULE of size %lu"
10461 				" is too small to contain a name of size %u"),
10462 			      abfd, note->descsz, name_size);
10463 	  return true;
10464 	}
10465 
10466       sect->size = note->descsz;
10467       sect->filepos = note->descpos;
10468       sect->alignment_power = 2;
10469       break;
10470 
10471     default:
10472       return true;
10473     }
10474 
10475   return true;
10476 }
10477 
10478 static bool
10479 elfcore_grok_note (bfd *abfd, Elf_Internal_Note *note)
10480 {
10481   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
10482 
10483   switch (note->type)
10484     {
10485     default:
10486       return true;
10487 
10488     case NT_PRSTATUS:
10489       if (bed->elf_backend_grok_prstatus)
10490 	if ((*bed->elf_backend_grok_prstatus) (abfd, note))
10491 	  return true;
10492 #if defined (HAVE_PRSTATUS_T)
10493       return elfcore_grok_prstatus (abfd, note);
10494 #else
10495       return true;
10496 #endif
10497 
10498 #if defined (HAVE_PSTATUS_T)
10499     case NT_PSTATUS:
10500       return elfcore_grok_pstatus (abfd, note);
10501 #endif
10502 
10503 #if defined (HAVE_LWPSTATUS_T)
10504     case NT_LWPSTATUS:
10505       return elfcore_grok_lwpstatus (abfd, note);
10506 #endif
10507 
10508     case NT_FPREGSET:		/* FIXME: rename to NT_PRFPREG */
10509       return elfcore_grok_prfpreg (abfd, note);
10510 
10511     case NT_WIN32PSTATUS:
10512       return elfcore_grok_win32pstatus (abfd, note);
10513 
10514     case NT_PRXFPREG:		/* Linux SSE extension */
10515       if (note->namesz == 6
10516 	  && strcmp (note->namedata, "LINUX") == 0)
10517 	return elfcore_grok_prxfpreg (abfd, note);
10518       else
10519 	return true;
10520 
10521     case NT_X86_XSTATE:		/* Linux XSAVE extension */
10522       if (note->namesz == 6
10523 	  && strcmp (note->namedata, "LINUX") == 0)
10524 	return elfcore_grok_xstatereg (abfd, note);
10525       else
10526 	return true;
10527 
10528     case NT_PPC_VMX:
10529       if (note->namesz == 6
10530 	  && strcmp (note->namedata, "LINUX") == 0)
10531 	return elfcore_grok_ppc_vmx (abfd, note);
10532       else
10533 	return true;
10534 
10535     case NT_PPC_VSX:
10536       if (note->namesz == 6
10537 	  && strcmp (note->namedata, "LINUX") == 0)
10538 	return elfcore_grok_ppc_vsx (abfd, note);
10539       else
10540 	return true;
10541 
10542     case NT_PPC_TAR:
10543       if (note->namesz == 6
10544 	  && strcmp (note->namedata, "LINUX") == 0)
10545 	return elfcore_grok_ppc_tar (abfd, note);
10546       else
10547 	return true;
10548 
10549     case NT_PPC_PPR:
10550       if (note->namesz == 6
10551 	  && strcmp (note->namedata, "LINUX") == 0)
10552 	return elfcore_grok_ppc_ppr (abfd, note);
10553       else
10554 	return true;
10555 
10556     case NT_PPC_DSCR:
10557       if (note->namesz == 6
10558 	  && strcmp (note->namedata, "LINUX") == 0)
10559 	return elfcore_grok_ppc_dscr (abfd, note);
10560       else
10561 	return true;
10562 
10563     case NT_PPC_EBB:
10564       if (note->namesz == 6
10565 	  && strcmp (note->namedata, "LINUX") == 0)
10566 	return elfcore_grok_ppc_ebb (abfd, note);
10567       else
10568 	return true;
10569 
10570     case NT_PPC_PMU:
10571       if (note->namesz == 6
10572 	  && strcmp (note->namedata, "LINUX") == 0)
10573 	return elfcore_grok_ppc_pmu (abfd, note);
10574       else
10575 	return true;
10576 
10577     case NT_PPC_TM_CGPR:
10578       if (note->namesz == 6
10579 	  && strcmp (note->namedata, "LINUX") == 0)
10580 	return elfcore_grok_ppc_tm_cgpr (abfd, note);
10581       else
10582 	return true;
10583 
10584     case NT_PPC_TM_CFPR:
10585       if (note->namesz == 6
10586 	  && strcmp (note->namedata, "LINUX") == 0)
10587 	return elfcore_grok_ppc_tm_cfpr (abfd, note);
10588       else
10589 	return true;
10590 
10591     case NT_PPC_TM_CVMX:
10592       if (note->namesz == 6
10593 	  && strcmp (note->namedata, "LINUX") == 0)
10594 	return elfcore_grok_ppc_tm_cvmx (abfd, note);
10595       else
10596 	return true;
10597 
10598     case NT_PPC_TM_CVSX:
10599       if (note->namesz == 6
10600 	  && strcmp (note->namedata, "LINUX") == 0)
10601 	return elfcore_grok_ppc_tm_cvsx (abfd, note);
10602       else
10603 	return true;
10604 
10605     case NT_PPC_TM_SPR:
10606       if (note->namesz == 6
10607 	  && strcmp (note->namedata, "LINUX") == 0)
10608 	return elfcore_grok_ppc_tm_spr (abfd, note);
10609       else
10610 	return true;
10611 
10612     case NT_PPC_TM_CTAR:
10613       if (note->namesz == 6
10614 	  && strcmp (note->namedata, "LINUX") == 0)
10615 	return elfcore_grok_ppc_tm_ctar (abfd, note);
10616       else
10617 	return true;
10618 
10619     case NT_PPC_TM_CPPR:
10620       if (note->namesz == 6
10621 	  && strcmp (note->namedata, "LINUX") == 0)
10622 	return elfcore_grok_ppc_tm_cppr (abfd, note);
10623       else
10624 	return true;
10625 
10626     case NT_PPC_TM_CDSCR:
10627       if (note->namesz == 6
10628 	  && strcmp (note->namedata, "LINUX") == 0)
10629 	return elfcore_grok_ppc_tm_cdscr (abfd, note);
10630       else
10631 	return true;
10632 
10633     case NT_S390_HIGH_GPRS:
10634       if (note->namesz == 6
10635 	  && strcmp (note->namedata, "LINUX") == 0)
10636 	return elfcore_grok_s390_high_gprs (abfd, note);
10637       else
10638 	return true;
10639 
10640     case NT_S390_TIMER:
10641       if (note->namesz == 6
10642 	  && strcmp (note->namedata, "LINUX") == 0)
10643 	return elfcore_grok_s390_timer (abfd, note);
10644       else
10645 	return true;
10646 
10647     case NT_S390_TODCMP:
10648       if (note->namesz == 6
10649 	  && strcmp (note->namedata, "LINUX") == 0)
10650 	return elfcore_grok_s390_todcmp (abfd, note);
10651       else
10652 	return true;
10653 
10654     case NT_S390_TODPREG:
10655       if (note->namesz == 6
10656 	  && strcmp (note->namedata, "LINUX") == 0)
10657 	return elfcore_grok_s390_todpreg (abfd, note);
10658       else
10659 	return true;
10660 
10661     case NT_S390_CTRS:
10662       if (note->namesz == 6
10663 	  && strcmp (note->namedata, "LINUX") == 0)
10664 	return elfcore_grok_s390_ctrs (abfd, note);
10665       else
10666 	return true;
10667 
10668     case NT_S390_PREFIX:
10669       if (note->namesz == 6
10670 	  && strcmp (note->namedata, "LINUX") == 0)
10671 	return elfcore_grok_s390_prefix (abfd, note);
10672       else
10673 	return true;
10674 
10675     case NT_S390_LAST_BREAK:
10676       if (note->namesz == 6
10677 	  && strcmp (note->namedata, "LINUX") == 0)
10678 	return elfcore_grok_s390_last_break (abfd, note);
10679       else
10680 	return true;
10681 
10682     case NT_S390_SYSTEM_CALL:
10683       if (note->namesz == 6
10684 	  && strcmp (note->namedata, "LINUX") == 0)
10685 	return elfcore_grok_s390_system_call (abfd, note);
10686       else
10687 	return true;
10688 
10689     case NT_S390_TDB:
10690       if (note->namesz == 6
10691 	  && strcmp (note->namedata, "LINUX") == 0)
10692 	return elfcore_grok_s390_tdb (abfd, note);
10693       else
10694 	return true;
10695 
10696     case NT_S390_VXRS_LOW:
10697       if (note->namesz == 6
10698 	  && strcmp (note->namedata, "LINUX") == 0)
10699 	return elfcore_grok_s390_vxrs_low (abfd, note);
10700       else
10701 	return true;
10702 
10703     case NT_S390_VXRS_HIGH:
10704       if (note->namesz == 6
10705 	  && strcmp (note->namedata, "LINUX") == 0)
10706 	return elfcore_grok_s390_vxrs_high (abfd, note);
10707       else
10708 	return true;
10709 
10710     case NT_S390_GS_CB:
10711       if (note->namesz == 6
10712 	  && strcmp (note->namedata, "LINUX") == 0)
10713 	return elfcore_grok_s390_gs_cb (abfd, note);
10714       else
10715 	return true;
10716 
10717     case NT_S390_GS_BC:
10718       if (note->namesz == 6
10719 	  && strcmp (note->namedata, "LINUX") == 0)
10720 	return elfcore_grok_s390_gs_bc (abfd, note);
10721       else
10722 	return true;
10723 
10724     case NT_ARC_V2:
10725       if (note->namesz == 6
10726 	  && strcmp (note->namedata, "LINUX") == 0)
10727 	return elfcore_grok_arc_v2 (abfd, note);
10728       else
10729 	return true;
10730 
10731     case NT_ARM_VFP:
10732       if (note->namesz == 6
10733 	  && strcmp (note->namedata, "LINUX") == 0)
10734 	return elfcore_grok_arm_vfp (abfd, note);
10735       else
10736 	return true;
10737 
10738     case NT_ARM_TLS:
10739       if (note->namesz == 6
10740 	  && strcmp (note->namedata, "LINUX") == 0)
10741 	return elfcore_grok_aarch_tls (abfd, note);
10742       else
10743 	return true;
10744 
10745     case NT_ARM_HW_BREAK:
10746       if (note->namesz == 6
10747 	  && strcmp (note->namedata, "LINUX") == 0)
10748 	return elfcore_grok_aarch_hw_break (abfd, note);
10749       else
10750 	return true;
10751 
10752     case NT_ARM_HW_WATCH:
10753       if (note->namesz == 6
10754 	  && strcmp (note->namedata, "LINUX") == 0)
10755 	return elfcore_grok_aarch_hw_watch (abfd, note);
10756       else
10757 	return true;
10758 
10759     case NT_ARM_SVE:
10760       if (note->namesz == 6
10761 	  && strcmp (note->namedata, "LINUX") == 0)
10762 	return elfcore_grok_aarch_sve (abfd, note);
10763       else
10764 	return true;
10765 
10766     case NT_ARM_PAC_MASK:
10767       if (note->namesz == 6
10768 	  && strcmp (note->namedata, "LINUX") == 0)
10769 	return elfcore_grok_aarch_pauth (abfd, note);
10770       else
10771 	return true;
10772 
10773     case NT_ARM_TAGGED_ADDR_CTRL:
10774       if (note->namesz == 6
10775 	  && strcmp (note->namedata, "LINUX") == 0)
10776 	return elfcore_grok_aarch_mte (abfd, note);
10777       else
10778 	return true;
10779 
10780     case NT_GDB_TDESC:
10781       if (note->namesz == 4
10782 	  && strcmp (note->namedata, "GDB") == 0)
10783 	return elfcore_grok_gdb_tdesc (abfd, note);
10784       else
10785 	return true;
10786 
10787     case NT_RISCV_CSR:
10788       if (note->namesz == 4
10789 	  && strcmp (note->namedata, "GDB") == 0)
10790 	return elfcore_grok_riscv_csr (abfd, note);
10791       else
10792 	return true;
10793 
10794     case NT_LARCH_CPUCFG:
10795       if (note->namesz == 6
10796 	  && strcmp (note->namedata, "LINUX") == 0)
10797 	return elfcore_grok_loongarch_cpucfg (abfd, note);
10798       else
10799 	return true;
10800 
10801     case NT_LARCH_LBT:
10802       if (note->namesz == 6
10803 	  && strcmp (note->namedata, "LINUX") == 0)
10804 	return elfcore_grok_loongarch_lbt (abfd, note);
10805       else
10806 	return true;
10807 
10808     case NT_LARCH_LSX:
10809       if (note->namesz == 6
10810 	  && strcmp (note->namedata, "LINUX") == 0)
10811 	return elfcore_grok_loongarch_lsx (abfd, note);
10812       else
10813 	return true;
10814 
10815     case NT_LARCH_LASX:
10816       if (note->namesz == 6
10817 	  && strcmp (note->namedata, "LINUX") == 0)
10818 	return elfcore_grok_loongarch_lasx (abfd, note);
10819       else
10820 	return true;
10821 
10822     case NT_PRPSINFO:
10823     case NT_PSINFO:
10824       if (bed->elf_backend_grok_psinfo)
10825 	if ((*bed->elf_backend_grok_psinfo) (abfd, note))
10826 	  return true;
10827 #if defined (HAVE_PRPSINFO_T) || defined (HAVE_PSINFO_T)
10828       return elfcore_grok_psinfo (abfd, note);
10829 #else
10830       return true;
10831 #endif
10832 
10833     case NT_AUXV:
10834       return elfcore_make_auxv_note_section (abfd, note, 0);
10835 
10836     case NT_FILE:
10837       return elfcore_make_note_pseudosection (abfd, ".note.linuxcore.file",
10838 					      note);
10839 
10840     case NT_SIGINFO:
10841       return elfcore_make_note_pseudosection (abfd, ".note.linuxcore.siginfo",
10842 					      note);
10843 
10844     }
10845 }
10846 
10847 static bool
10848 elfobj_grok_gnu_build_id (bfd *abfd, Elf_Internal_Note *note)
10849 {
10850   struct bfd_build_id* build_id;
10851 
10852   if (note->descsz == 0)
10853     return false;
10854 
10855   build_id = bfd_alloc (abfd, sizeof (struct bfd_build_id) - 1 + note->descsz);
10856   if (build_id == NULL)
10857     return false;
10858 
10859   build_id->size = note->descsz;
10860   memcpy (build_id->data, note->descdata, note->descsz);
10861   abfd->build_id = build_id;
10862 
10863   return true;
10864 }
10865 
10866 static bool
10867 elfobj_grok_gnu_note (bfd *abfd, Elf_Internal_Note *note)
10868 {
10869   switch (note->type)
10870     {
10871     default:
10872       return true;
10873 
10874     case NT_GNU_PROPERTY_TYPE_0:
10875       return _bfd_elf_parse_gnu_properties (abfd, note);
10876 
10877     case NT_GNU_BUILD_ID:
10878       return elfobj_grok_gnu_build_id (abfd, note);
10879     }
10880 }
10881 
10882 static bool
10883 elfobj_grok_stapsdt_note_1 (bfd *abfd, Elf_Internal_Note *note)
10884 {
10885   struct sdt_note *cur =
10886     (struct sdt_note *) bfd_alloc (abfd,
10887 				   sizeof (struct sdt_note) + note->descsz);
10888 
10889   cur->next = (struct sdt_note *) (elf_tdata (abfd))->sdt_note_head;
10890   cur->size = (bfd_size_type) note->descsz;
10891   memcpy (cur->data, note->descdata, note->descsz);
10892 
10893   elf_tdata (abfd)->sdt_note_head = cur;
10894 
10895   return true;
10896 }
10897 
10898 static bool
10899 elfobj_grok_stapsdt_note (bfd *abfd, Elf_Internal_Note *note)
10900 {
10901   switch (note->type)
10902     {
10903     case NT_STAPSDT:
10904       return elfobj_grok_stapsdt_note_1 (abfd, note);
10905 
10906     default:
10907       return true;
10908     }
10909 }
10910 
10911 static bool
10912 elfcore_grok_freebsd_psinfo (bfd *abfd, Elf_Internal_Note *note)
10913 {
10914   size_t offset;
10915 
10916   switch (elf_elfheader (abfd)->e_ident[EI_CLASS])
10917     {
10918     case ELFCLASS32:
10919       if (note->descsz < 108)
10920 	return false;
10921       break;
10922 
10923     case ELFCLASS64:
10924       if (note->descsz < 120)
10925 	return false;
10926       break;
10927 
10928     default:
10929       return false;
10930     }
10931 
10932   /* Check for version 1 in pr_version.  */
10933   if (bfd_h_get_32 (abfd, (bfd_byte *) note->descdata) != 1)
10934     return false;
10935 
10936   offset = 4;
10937 
10938   /* Skip over pr_psinfosz. */
10939   if (elf_elfheader (abfd)->e_ident[EI_CLASS] == ELFCLASS32)
10940     offset += 4;
10941   else
10942     {
10943       offset += 4;	/* Padding before pr_psinfosz. */
10944       offset += 8;
10945     }
10946 
10947   /* pr_fname is PRFNAMESZ (16) + 1 bytes in size.  */
10948   elf_tdata (abfd)->core->program
10949     = _bfd_elfcore_strndup (abfd, note->descdata + offset, 17);
10950   offset += 17;
10951 
10952   /* pr_psargs is PRARGSZ (80) + 1 bytes in size.  */
10953   elf_tdata (abfd)->core->command
10954     = _bfd_elfcore_strndup (abfd, note->descdata + offset, 81);
10955   offset += 81;
10956 
10957   /* Padding before pr_pid.  */
10958   offset += 2;
10959 
10960   /* The pr_pid field was added in version "1a".  */
10961   if (note->descsz < offset + 4)
10962     return true;
10963 
10964   elf_tdata (abfd)->core->pid
10965     = bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + offset);
10966 
10967   return true;
10968 }
10969 
10970 static bool
10971 elfcore_grok_freebsd_prstatus (bfd *abfd, Elf_Internal_Note *note)
10972 {
10973   size_t offset;
10974   size_t size;
10975   size_t min_size;
10976 
10977   /* Compute offset of pr_getregsz, skipping over pr_statussz.
10978      Also compute minimum size of this note.  */
10979   switch (elf_elfheader (abfd)->e_ident[EI_CLASS])
10980     {
10981     case ELFCLASS32:
10982       offset = 4 + 4;
10983       min_size = offset + (4 * 2) + 4 + 4 + 4;
10984       break;
10985 
10986     case ELFCLASS64:
10987       offset = 4 + 4 + 8;	/* Includes padding before pr_statussz.  */
10988       min_size = offset + (8 * 2) + 4 + 4 + 4 + 4;
10989       break;
10990 
10991     default:
10992       return false;
10993     }
10994 
10995   if (note->descsz < min_size)
10996     return false;
10997 
10998   /* Check for version 1 in pr_version.  */
10999   if (bfd_h_get_32 (abfd, (bfd_byte *) note->descdata) != 1)
11000     return false;
11001 
11002   /* Extract size of pr_reg from pr_gregsetsz.  */
11003   /* Skip over pr_gregsetsz and pr_fpregsetsz.  */
11004   if (elf_elfheader (abfd)->e_ident[EI_CLASS] == ELFCLASS32)
11005     {
11006       size = bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + offset);
11007       offset += 4 * 2;
11008     }
11009   else
11010     {
11011       size = bfd_h_get_64 (abfd, (bfd_byte *) note->descdata + offset);
11012       offset += 8 * 2;
11013     }
11014 
11015   /* Skip over pr_osreldate.  */
11016   offset += 4;
11017 
11018   /* Read signal from pr_cursig.  */
11019   if (elf_tdata (abfd)->core->signal == 0)
11020     elf_tdata (abfd)->core->signal
11021       = bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + offset);
11022   offset += 4;
11023 
11024   /* Read TID from pr_pid.  */
11025   elf_tdata (abfd)->core->lwpid
11026       = bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + offset);
11027   offset += 4;
11028 
11029   /* Padding before pr_reg.  */
11030   if (elf_elfheader (abfd)->e_ident[EI_CLASS] == ELFCLASS64)
11031     offset += 4;
11032 
11033   /* Make sure that there is enough data remaining in the note.  */
11034   if ((note->descsz - offset) < size)
11035     return false;
11036 
11037   /* Make a ".reg/999" section and a ".reg" section.  */
11038   return _bfd_elfcore_make_pseudosection (abfd, ".reg",
11039 					  size, note->descpos + offset);
11040 }
11041 
11042 static bool
11043 elfcore_grok_freebsd_note (bfd *abfd, Elf_Internal_Note *note)
11044 {
11045   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
11046 
11047   switch (note->type)
11048     {
11049     case NT_PRSTATUS:
11050       if (bed->elf_backend_grok_freebsd_prstatus)
11051 	if ((*bed->elf_backend_grok_freebsd_prstatus) (abfd, note))
11052 	  return true;
11053       return elfcore_grok_freebsd_prstatus (abfd, note);
11054 
11055     case NT_FPREGSET:
11056       return elfcore_grok_prfpreg (abfd, note);
11057 
11058     case NT_PRPSINFO:
11059       return elfcore_grok_freebsd_psinfo (abfd, note);
11060 
11061     case NT_FREEBSD_THRMISC:
11062       return elfcore_make_note_pseudosection (abfd, ".thrmisc", note);
11063 
11064     case NT_FREEBSD_PROCSTAT_PROC:
11065       return elfcore_make_note_pseudosection (abfd, ".note.freebsdcore.proc",
11066 					      note);
11067 
11068     case NT_FREEBSD_PROCSTAT_FILES:
11069       return elfcore_make_note_pseudosection (abfd, ".note.freebsdcore.files",
11070 					      note);
11071 
11072     case NT_FREEBSD_PROCSTAT_VMMAP:
11073       return elfcore_make_note_pseudosection (abfd, ".note.freebsdcore.vmmap",
11074 					      note);
11075 
11076     case NT_FREEBSD_PROCSTAT_AUXV:
11077       return elfcore_make_auxv_note_section (abfd, note, 4);
11078 
11079     case NT_FREEBSD_X86_SEGBASES:
11080       return elfcore_make_note_pseudosection (abfd, ".reg-x86-segbases", note);
11081 
11082     case NT_X86_XSTATE:
11083       return elfcore_grok_xstatereg (abfd, note);
11084 
11085     case NT_FREEBSD_PTLWPINFO:
11086       return elfcore_make_note_pseudosection (abfd, ".note.freebsdcore.lwpinfo",
11087 					      note);
11088 
11089     case NT_ARM_TLS:
11090       return elfcore_grok_aarch_tls (abfd, note);
11091 
11092     case NT_ARM_VFP:
11093       return elfcore_grok_arm_vfp (abfd, note);
11094 
11095     default:
11096       return true;
11097     }
11098 }
11099 
11100 static bool
11101 elfcore_netbsd_get_lwpid (Elf_Internal_Note *note, int *lwpidp)
11102 {
11103   char *cp;
11104 
11105   cp = strchr (note->namedata, '@');
11106   if (cp != NULL)
11107     {
11108       *lwpidp = atoi(cp + 1);
11109       return true;
11110     }
11111   return false;
11112 }
11113 
11114 static bool
11115 elfcore_grok_netbsd_procinfo (bfd *abfd, Elf_Internal_Note *note)
11116 {
11117   if (note->descsz <= 0x7c + 31)
11118     return false;
11119 
11120   /* Signal number at offset 0x08. */
11121   elf_tdata (abfd)->core->signal
11122     = bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + 0x08);
11123 
11124   /* Process ID at offset 0x50. */
11125   elf_tdata (abfd)->core->pid
11126     = bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + 0x50);
11127 
11128   /* Command name at 0x7c (max 32 bytes, including nul). */
11129   elf_tdata (abfd)->core->command
11130     = _bfd_elfcore_strndup (abfd, note->descdata + 0x7c, 31);
11131 
11132   return elfcore_make_note_pseudosection (abfd, ".note.netbsdcore.procinfo",
11133 					  note);
11134 }
11135 
11136 static bool
11137 elfcore_grok_netbsd_note (bfd *abfd, Elf_Internal_Note *note)
11138 {
11139   int lwp;
11140 
11141   if (elfcore_netbsd_get_lwpid (note, &lwp))
11142     elf_tdata (abfd)->core->lwpid = lwp;
11143 
11144   switch (note->type)
11145     {
11146     case NT_NETBSDCORE_PROCINFO:
11147       /* NetBSD-specific core "procinfo".  Note that we expect to
11148 	 find this note before any of the others, which is fine,
11149 	 since the kernel writes this note out first when it
11150 	 creates a core file.  */
11151       return elfcore_grok_netbsd_procinfo (abfd, note);
11152     case NT_NETBSDCORE_AUXV:
11153       /* NetBSD-specific Elf Auxiliary Vector data. */
11154       return elfcore_make_auxv_note_section (abfd, note, 0);
11155     case NT_NETBSDCORE_LWPSTATUS:
11156       return elfcore_make_note_pseudosection (abfd,
11157 					      ".note.netbsdcore.lwpstatus",
11158 					      note);
11159     default:
11160       break;
11161     }
11162 
11163   if (note->type == NT_NETBSDCORE_AUXV)
11164     {
11165       asection *sect = bfd_make_section_anyway_with_flags (abfd, ".auxv",
11166 							   SEC_HAS_CONTENTS);
11167 
11168       if (sect == NULL)
11169 	return false;
11170       sect->size = note->descsz;
11171       sect->filepos = note->descpos;
11172       sect->alignment_power = 1 + bfd_get_arch_size (abfd) / 32;
11173 
11174       return true;
11175     }
11176 
11177   /* As of March 2020 there are no other machine-independent notes
11178      defined for NetBSD core files.  If the note type is less
11179      than the start of the machine-dependent note types, we don't
11180      understand it.  */
11181 
11182   if (note->type < NT_NETBSDCORE_FIRSTMACH)
11183     return true;
11184 
11185 
11186   switch (bfd_get_arch (abfd))
11187     {
11188       /* On the Alpha, SPARC (32-bit and 64-bit), PT_GETREGS == mach+0 and
11189 	 PT_GETFPREGS == mach+2.  */
11190 
11191     case bfd_arch_aarch64:
11192     case bfd_arch_alpha:
11193     case bfd_arch_riscv:
11194     case bfd_arch_sparc:
11195       switch (note->type)
11196 	{
11197 	case NT_NETBSDCORE_FIRSTMACH+0:
11198 	  return elfcore_make_note_pseudosection (abfd, ".reg", note);
11199 
11200 	case NT_NETBSDCORE_FIRSTMACH+2:
11201 	  return elfcore_make_note_pseudosection (abfd, ".reg2", note);
11202 
11203 	default:
11204 	  return true;
11205 	}
11206 
11207       /* On SuperH, PT_GETREGS == mach+3 and PT_GETFPREGS == mach+5.
11208 	 There's also old PT___GETREGS40 == mach + 1 for old reg
11209 	 structure which lacks GBR.  */
11210 
11211     case bfd_arch_sh:
11212       switch (note->type)
11213 	{
11214 	case NT_NETBSDCORE_FIRSTMACH+3:
11215 	  return elfcore_make_note_pseudosection (abfd, ".reg", note);
11216 
11217 	case NT_NETBSDCORE_FIRSTMACH+5:
11218 	  return elfcore_make_note_pseudosection (abfd, ".reg2", note);
11219 
11220 	default:
11221 	  return true;
11222 	}
11223 
11224       /* On all other arch's, PT_GETREGS == mach+1 and
11225 	 PT_GETFPREGS == mach+3.  */
11226 
11227     default:
11228       switch (note->type)
11229 	{
11230 	case NT_NETBSDCORE_FIRSTMACH+1:
11231 	  return elfcore_make_note_pseudosection (abfd, ".reg", note);
11232 
11233 	case NT_NETBSDCORE_FIRSTMACH+3:
11234 	  return elfcore_make_note_pseudosection (abfd, ".reg2", note);
11235 
11236 	default:
11237 	  return true;
11238 	}
11239     }
11240     /* NOTREACHED */
11241 }
11242 
11243 static bool
11244 elfcore_grok_openbsd_procinfo (bfd *abfd, Elf_Internal_Note *note)
11245 {
11246   if (note->descsz <= 0x48 + 31)
11247     return false;
11248 
11249   /* Signal number at offset 0x08. */
11250   elf_tdata (abfd)->core->signal
11251     = bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + 0x08);
11252 
11253   /* Process ID at offset 0x20. */
11254   elf_tdata (abfd)->core->pid
11255     = bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + 0x20);
11256 
11257   /* Command name at 0x48 (max 32 bytes, including nul). */
11258   elf_tdata (abfd)->core->command
11259     = _bfd_elfcore_strndup (abfd, note->descdata + 0x48, 31);
11260 
11261   return true;
11262 }
11263 
11264 /* Processes Solaris's process status note.
11265    sig_off ~ offsetof(prstatus_t, pr_cursig)
11266    pid_off ~ offsetof(prstatus_t, pr_pid)
11267    lwpid_off ~ offsetof(prstatus_t, pr_who)
11268    gregset_size ~ sizeof(gregset_t)
11269    gregset_offset ~ offsetof(prstatus_t, pr_reg)  */
11270 
11271 static bool
11272 elfcore_grok_solaris_prstatus (bfd *abfd, Elf_Internal_Note* note, int sig_off,
11273 			       int pid_off, int lwpid_off, size_t gregset_size,
11274 			       size_t gregset_offset)
11275 {
11276   asection *sect = NULL;
11277   elf_tdata (abfd)->core->signal
11278     = bfd_get_16 (abfd, note->descdata + sig_off);
11279   elf_tdata (abfd)->core->pid
11280     = bfd_get_32 (abfd, note->descdata + pid_off);
11281   elf_tdata (abfd)->core->lwpid
11282     = bfd_get_32 (abfd, note->descdata + lwpid_off);
11283 
11284   sect = bfd_get_section_by_name (abfd, ".reg");
11285   if (sect != NULL)
11286     sect->size = gregset_size;
11287 
11288   return _bfd_elfcore_make_pseudosection (abfd, ".reg", gregset_size,
11289 					  note->descpos + gregset_offset);
11290 }
11291 
11292 /* Gets program and arguments from a core.
11293    prog_off ~ offsetof(prpsinfo | psinfo_t, pr_fname)
11294    comm_off ~ offsetof(prpsinfo | psinfo_t, pr_psargs)  */
11295 
11296 static bool
11297 elfcore_grok_solaris_info(bfd *abfd, Elf_Internal_Note* note,
11298 			  int prog_off, int comm_off)
11299 {
11300   elf_tdata (abfd)->core->program
11301     = _bfd_elfcore_strndup (abfd, note->descdata + prog_off, 16);
11302   elf_tdata (abfd)->core->command
11303     = _bfd_elfcore_strndup (abfd, note->descdata + comm_off, 80);
11304 
11305   return true;
11306 }
11307 
11308 /* Processes Solaris's LWP status note.
11309    gregset_size ~ sizeof(gregset_t)
11310    gregset_off ~ offsetof(lwpstatus_t, pr_reg)
11311    fpregset_size ~ sizeof(fpregset_t)
11312    fpregset_off ~ offsetof(lwpstatus_t, pr_fpreg)  */
11313 
11314 static bool
11315 elfcore_grok_solaris_lwpstatus (bfd *abfd, Elf_Internal_Note* note,
11316 				size_t gregset_size, int gregset_off,
11317 				size_t fpregset_size, int fpregset_off)
11318 {
11319   asection *sect = NULL;
11320   char reg2_section_name[16] = { 0 };
11321 
11322   (void) snprintf (reg2_section_name, 16, "%s/%i", ".reg2",
11323 		   elf_tdata (abfd)->core->lwpid);
11324 
11325   /* offsetof(lwpstatus_t, pr_lwpid) */
11326   elf_tdata (abfd)->core->lwpid
11327     = bfd_get_32 (abfd, note->descdata + 4);
11328   /* offsetof(lwpstatus_t, pr_cursig) */
11329   elf_tdata (abfd)->core->signal
11330     = bfd_get_16 (abfd, note->descdata + 12);
11331 
11332   sect = bfd_get_section_by_name (abfd, ".reg");
11333   if (sect != NULL)
11334     sect->size = gregset_size;
11335   else if (!_bfd_elfcore_make_pseudosection (abfd, ".reg", gregset_size,
11336 					     note->descpos + gregset_off))
11337     return false;
11338 
11339   sect = bfd_get_section_by_name (abfd, reg2_section_name);
11340   if (sect != NULL)
11341     {
11342       sect->size = fpregset_size;
11343       sect->filepos = note->descpos + fpregset_off;
11344       sect->alignment_power = 2;
11345     }
11346   else if (!_bfd_elfcore_make_pseudosection (abfd, ".reg2", fpregset_size,
11347 					     note->descpos + fpregset_off))
11348     return false;
11349 
11350   return true;
11351 }
11352 
11353 static bool
11354 elfcore_grok_solaris_note_impl (bfd *abfd, Elf_Internal_Note *note)
11355 {
11356   if (note == NULL)
11357     return false;
11358 
11359   /* core files are identified as 32- or 64-bit, SPARC or x86,
11360      by the size of the descsz which matches the sizeof()
11361      the type appropriate for that note type (e.g., prstatus_t for
11362      SOLARIS_NT_PRSTATUS) for the corresponding architecture
11363      on Solaris. The core file bitness may differ from the bitness of
11364      gdb itself, so fixed values are used instead of sizeof().
11365      Appropriate fixed offsets are also used to obtain data from
11366      the note.  */
11367 
11368   switch ((int) note->type)
11369     {
11370     case SOLARIS_NT_PRSTATUS:
11371       switch (note->descsz)
11372 	{
11373 	case 508: /* sizeof(prstatus_t) SPARC 32-bit */
11374 	  return elfcore_grok_solaris_prstatus(abfd, note,
11375 					       136, 216, 308, 152, 356);
11376 	case 904: /* sizeof(prstatus_t) SPARC 64-bit */
11377 	  return elfcore_grok_solaris_prstatus(abfd, note,
11378 					       264, 360, 520, 304, 600);
11379 	case 432: /* sizeof(prstatus_t) Intel 32-bit */
11380 	  return elfcore_grok_solaris_prstatus(abfd, note,
11381 					       136, 216, 308, 76, 356);
11382 	case 824: /* sizeof(prstatus_t) Intel 64-bit */
11383 	  return elfcore_grok_solaris_prstatus(abfd, note,
11384 					       264, 360, 520, 224, 600);
11385 	default:
11386 	  return true;
11387 	}
11388 
11389     case SOLARIS_NT_PSINFO:
11390     case SOLARIS_NT_PRPSINFO:
11391       switch (note->descsz)
11392 	{
11393 	case 260: /* sizeof(prpsinfo_t) SPARC and Intel 32-bit */
11394 	  return elfcore_grok_solaris_info(abfd, note, 84, 100);
11395 	case 328: /* sizeof(prpsinfo_t) SPARC and Intel 64-bit */
11396 	  return elfcore_grok_solaris_info(abfd, note, 120, 136);
11397 	case 360: /* sizeof(psinfo_t) SPARC and Intel 32-bit */
11398 	  return elfcore_grok_solaris_info(abfd, note, 88, 104);
11399 	case 440: /* sizeof(psinfo_t) SPARC and Intel 64-bit */
11400 	  return elfcore_grok_solaris_info(abfd, note, 136, 152);
11401 	default:
11402 	  return true;
11403 	}
11404 
11405     case SOLARIS_NT_LWPSTATUS:
11406       switch (note->descsz)
11407 	{
11408 	case 896: /* sizeof(lwpstatus_t) SPARC 32-bit */
11409 	  return elfcore_grok_solaris_lwpstatus(abfd, note,
11410 						152, 344, 400, 496);
11411 	case 1392: /* sizeof(lwpstatus_t) SPARC 64-bit */
11412 	  return elfcore_grok_solaris_lwpstatus(abfd, note,
11413 						304, 544, 544, 848);
11414 	case 800: /* sizeof(lwpstatus_t) Intel 32-bit */
11415 	  return elfcore_grok_solaris_lwpstatus(abfd, note,
11416 						76, 344, 380, 420);
11417 	case 1296: /* sizeof(lwpstatus_t) Intel 64-bit */
11418 	  return elfcore_grok_solaris_lwpstatus(abfd, note,
11419 						224, 544, 528, 768);
11420 	default:
11421 	  return true;
11422 	}
11423 
11424     case SOLARIS_NT_LWPSINFO:
11425       /* sizeof(lwpsinfo_t) on 32- and 64-bit, respectively */
11426       if (note->descsz == 128 || note->descsz == 152)
11427 	elf_tdata (abfd)->core->lwpid =
11428 	  bfd_get_32 (abfd, note->descdata + 4);
11429       break;
11430 
11431     default:
11432       break;
11433     }
11434 
11435   return true;
11436 }
11437 
11438 /* For name starting with "CORE" this may be either a Solaris
11439    core file or a gdb-generated core file.  Do Solaris-specific
11440    processing on selected note types first with
11441    elfcore_grok_solaris_note(), then process the note
11442    in elfcore_grok_note().  */
11443 
11444 static bool
11445 elfcore_grok_solaris_note (bfd *abfd, Elf_Internal_Note *note)
11446 {
11447   if (!elfcore_grok_solaris_note_impl (abfd, note))
11448     return false;
11449 
11450   return elfcore_grok_note (abfd, note);
11451 }
11452 
11453 static bool
11454 elfcore_grok_openbsd_note (bfd *abfd, Elf_Internal_Note *note)
11455 {
11456   if (note->type == NT_OPENBSD_PROCINFO)
11457     return elfcore_grok_openbsd_procinfo (abfd, note);
11458 
11459   if (note->type == NT_OPENBSD_REGS)
11460     return elfcore_make_note_pseudosection (abfd, ".reg", note);
11461 
11462   if (note->type == NT_OPENBSD_FPREGS)
11463     return elfcore_make_note_pseudosection (abfd, ".reg2", note);
11464 
11465   if (note->type == NT_OPENBSD_XFPREGS)
11466     return elfcore_make_note_pseudosection (abfd, ".reg-xfp", note);
11467 
11468   if (note->type == NT_OPENBSD_AUXV)
11469     return elfcore_make_auxv_note_section (abfd, note, 0);
11470 
11471   if (note->type == NT_OPENBSD_WCOOKIE)
11472     {
11473       asection *sect = bfd_make_section_anyway_with_flags (abfd, ".wcookie",
11474 							   SEC_HAS_CONTENTS);
11475 
11476       if (sect == NULL)
11477 	return false;
11478       sect->size = note->descsz;
11479       sect->filepos = note->descpos;
11480       sect->alignment_power = 1 + bfd_get_arch_size (abfd) / 32;
11481 
11482       return true;
11483     }
11484 
11485   return true;
11486 }
11487 
11488 static bool
11489 elfcore_grok_nto_status (bfd *abfd, Elf_Internal_Note *note, long *tid)
11490 {
11491   void *ddata = note->descdata;
11492   char buf[100];
11493   char *name;
11494   asection *sect;
11495   short sig;
11496   unsigned flags;
11497 
11498   if (note->descsz < 16)
11499     return false;
11500 
11501   /* nto_procfs_status 'pid' field is at offset 0.  */
11502   elf_tdata (abfd)->core->pid = bfd_get_32 (abfd, (bfd_byte *) ddata);
11503 
11504   /* nto_procfs_status 'tid' field is at offset 4.  Pass it back.  */
11505   *tid = bfd_get_32 (abfd, (bfd_byte *) ddata + 4);
11506 
11507   /* nto_procfs_status 'flags' field is at offset 8.  */
11508   flags = bfd_get_32 (abfd, (bfd_byte *) ddata + 8);
11509 
11510   /* nto_procfs_status 'what' field is at offset 14.  */
11511   if ((sig = bfd_get_16 (abfd, (bfd_byte *) ddata + 14)) > 0)
11512     {
11513       elf_tdata (abfd)->core->signal = sig;
11514       elf_tdata (abfd)->core->lwpid = *tid;
11515     }
11516 
11517   /* _DEBUG_FLAG_CURTID (current thread) is 0x80.  Some cores
11518      do not come from signals so we make sure we set the current
11519      thread just in case.  */
11520   if (flags & 0x00000080)
11521     elf_tdata (abfd)->core->lwpid = *tid;
11522 
11523   /* Make a ".qnx_core_status/%d" section.  */
11524   sprintf (buf, ".qnx_core_status/%ld", *tid);
11525 
11526   name = (char *) bfd_alloc (abfd, strlen (buf) + 1);
11527   if (name == NULL)
11528     return false;
11529   strcpy (name, buf);
11530 
11531   sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS);
11532   if (sect == NULL)
11533     return false;
11534 
11535   sect->size		= note->descsz;
11536   sect->filepos		= note->descpos;
11537   sect->alignment_power = 2;
11538 
11539   return (elfcore_maybe_make_sect (abfd, ".qnx_core_status", sect));
11540 }
11541 
11542 static bool
11543 elfcore_grok_nto_regs (bfd *abfd,
11544 		       Elf_Internal_Note *note,
11545 		       long tid,
11546 		       char *base)
11547 {
11548   char buf[100];
11549   char *name;
11550   asection *sect;
11551 
11552   /* Make a "(base)/%d" section.  */
11553   sprintf (buf, "%s/%ld", base, tid);
11554 
11555   name = (char *) bfd_alloc (abfd, strlen (buf) + 1);
11556   if (name == NULL)
11557     return false;
11558   strcpy (name, buf);
11559 
11560   sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS);
11561   if (sect == NULL)
11562     return false;
11563 
11564   sect->size		= note->descsz;
11565   sect->filepos		= note->descpos;
11566   sect->alignment_power = 2;
11567 
11568   /* This is the current thread.  */
11569   if (elf_tdata (abfd)->core->lwpid == tid)
11570     return elfcore_maybe_make_sect (abfd, base, sect);
11571 
11572   return true;
11573 }
11574 
11575 #define BFD_QNT_CORE_INFO	7
11576 #define BFD_QNT_CORE_STATUS	8
11577 #define BFD_QNT_CORE_GREG	9
11578 #define BFD_QNT_CORE_FPREG	10
11579 
11580 static bool
11581 elfcore_grok_nto_note (bfd *abfd, Elf_Internal_Note *note)
11582 {
11583   /* Every GREG section has a STATUS section before it.  Store the
11584      tid from the previous call to pass down to the next gregs
11585      function.  */
11586   static long tid = 1;
11587 
11588   switch (note->type)
11589     {
11590     case BFD_QNT_CORE_INFO:
11591       return elfcore_make_note_pseudosection (abfd, ".qnx_core_info", note);
11592     case BFD_QNT_CORE_STATUS:
11593       return elfcore_grok_nto_status (abfd, note, &tid);
11594     case BFD_QNT_CORE_GREG:
11595       return elfcore_grok_nto_regs (abfd, note, tid, ".reg");
11596     case BFD_QNT_CORE_FPREG:
11597       return elfcore_grok_nto_regs (abfd, note, tid, ".reg2");
11598     default:
11599       return true;
11600     }
11601 }
11602 
11603 static bool
11604 elfcore_grok_spu_note (bfd *abfd, Elf_Internal_Note *note)
11605 {
11606   char *name;
11607   asection *sect;
11608   size_t len;
11609 
11610   /* Use note name as section name.  */
11611   len = note->namesz;
11612   name = (char *) bfd_alloc (abfd, len);
11613   if (name == NULL)
11614     return false;
11615   memcpy (name, note->namedata, len);
11616   name[len - 1] = '\0';
11617 
11618   sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS);
11619   if (sect == NULL)
11620     return false;
11621 
11622   sect->size		= note->descsz;
11623   sect->filepos		= note->descpos;
11624   sect->alignment_power = 1;
11625 
11626   return true;
11627 }
11628 
11629 /* Function: elfcore_write_note
11630 
11631    Inputs:
11632      buffer to hold note, and current size of buffer
11633      name of note
11634      type of note
11635      data for note
11636      size of data for note
11637 
11638    Writes note to end of buffer.  ELF64 notes are written exactly as
11639    for ELF32, despite the current (as of 2006) ELF gabi specifying
11640    that they ought to have 8-byte namesz and descsz field, and have
11641    8-byte alignment.  Other writers, eg. Linux kernel, do the same.
11642 
11643    Return:
11644    Pointer to realloc'd buffer, *BUFSIZ updated.  */
11645 
11646 char *
11647 elfcore_write_note (bfd *abfd,
11648 		    char *buf,
11649 		    int *bufsiz,
11650 		    const char *name,
11651 		    int type,
11652 		    const void *input,
11653 		    int size)
11654 {
11655   Elf_External_Note *xnp;
11656   size_t namesz;
11657   size_t newspace;
11658   char *dest;
11659 
11660   namesz = 0;
11661   if (name != NULL)
11662     namesz = strlen (name) + 1;
11663 
11664   newspace = 12 + ((namesz + 3) & -4) + ((size + 3) & -4);
11665 
11666   buf = (char *) realloc (buf, *bufsiz + newspace);
11667   if (buf == NULL)
11668     return buf;
11669   dest = buf + *bufsiz;
11670   *bufsiz += newspace;
11671   xnp = (Elf_External_Note *) dest;
11672   H_PUT_32 (abfd, namesz, xnp->namesz);
11673   H_PUT_32 (abfd, size, xnp->descsz);
11674   H_PUT_32 (abfd, type, xnp->type);
11675   dest = xnp->name;
11676   if (name != NULL)
11677     {
11678       memcpy (dest, name, namesz);
11679       dest += namesz;
11680       while (namesz & 3)
11681 	{
11682 	  *dest++ = '\0';
11683 	  ++namesz;
11684 	}
11685     }
11686   memcpy (dest, input, size);
11687   dest += size;
11688   while (size & 3)
11689     {
11690       *dest++ = '\0';
11691       ++size;
11692     }
11693   return buf;
11694 }
11695 
11696 /* gcc-8 warns (*) on all the strncpy calls in this function about
11697    possible string truncation.  The "truncation" is not a bug.  We
11698    have an external representation of structs with fields that are not
11699    necessarily NULL terminated and corresponding internal
11700    representation fields that are one larger so that they can always
11701    be NULL terminated.
11702    gcc versions between 4.2 and 4.6 do not allow pragma control of
11703    diagnostics inside functions, giving a hard error if you try to use
11704    the finer control available with later versions.
11705    gcc prior to 4.2 warns about diagnostic push and pop.
11706    gcc-5, gcc-6 and gcc-7 warn that -Wstringop-truncation is unknown,
11707    unless you also add #pragma GCC diagnostic ignored "-Wpragma".
11708    (*) Depending on your system header files!  */
11709 #if GCC_VERSION >= 8000
11710 # pragma GCC diagnostic push
11711 # pragma GCC diagnostic ignored "-Wstringop-truncation"
11712 #endif
11713 char *
11714 elfcore_write_prpsinfo (bfd  *abfd,
11715 			char *buf,
11716 			int  *bufsiz,
11717 			const char *fname,
11718 			const char *psargs)
11719 {
11720   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
11721 
11722   if (bed->elf_backend_write_core_note != NULL)
11723     {
11724       char *ret;
11725       ret = (*bed->elf_backend_write_core_note) (abfd, buf, bufsiz,
11726 						 NT_PRPSINFO, fname, psargs);
11727       if (ret != NULL)
11728 	return ret;
11729     }
11730 
11731 #if defined (HAVE_PRPSINFO_T) || defined (HAVE_PSINFO_T)
11732 # if defined (HAVE_PRPSINFO32_T) || defined (HAVE_PSINFO32_T)
11733   if (bed->s->elfclass == ELFCLASS32)
11734     {
11735 #  if defined (HAVE_PSINFO32_T)
11736       psinfo32_t data;
11737       int note_type = NT_PSINFO;
11738 #  else
11739       prpsinfo32_t data;
11740       int note_type = NT_PRPSINFO;
11741 #  endif
11742 
11743       memset (&data, 0, sizeof (data));
11744       strncpy (data.pr_fname, fname, sizeof (data.pr_fname));
11745       strncpy (data.pr_psargs, psargs, sizeof (data.pr_psargs));
11746       return elfcore_write_note (abfd, buf, bufsiz,
11747 				 "CORE", note_type, &data, sizeof (data));
11748     }
11749   else
11750 # endif
11751     {
11752 # if defined (HAVE_PSINFO_T)
11753       psinfo_t data;
11754       int note_type = NT_PSINFO;
11755 # else
11756       prpsinfo_t data;
11757       int note_type = NT_PRPSINFO;
11758 # endif
11759 
11760       memset (&data, 0, sizeof (data));
11761       strncpy (data.pr_fname, fname, sizeof (data.pr_fname));
11762       strncpy (data.pr_psargs, psargs, sizeof (data.pr_psargs));
11763       return elfcore_write_note (abfd, buf, bufsiz,
11764 				 "CORE", note_type, &data, sizeof (data));
11765     }
11766 #endif	/* PSINFO_T or PRPSINFO_T */
11767 
11768   free (buf);
11769   return NULL;
11770 }
11771 #if GCC_VERSION >= 8000
11772 # pragma GCC diagnostic pop
11773 #endif
11774 
11775 char *
11776 elfcore_write_linux_prpsinfo32
11777   (bfd *abfd, char *buf, int *bufsiz,
11778    const struct elf_internal_linux_prpsinfo *prpsinfo)
11779 {
11780   if (get_elf_backend_data (abfd)->linux_prpsinfo32_ugid16)
11781     {
11782       struct elf_external_linux_prpsinfo32_ugid16 data;
11783 
11784       swap_linux_prpsinfo32_ugid16_out (abfd, prpsinfo, &data);
11785       return elfcore_write_note (abfd, buf, bufsiz, "CORE", NT_PRPSINFO,
11786 				 &data, sizeof (data));
11787     }
11788   else
11789     {
11790       struct elf_external_linux_prpsinfo32_ugid32 data;
11791 
11792       swap_linux_prpsinfo32_ugid32_out (abfd, prpsinfo, &data);
11793       return elfcore_write_note (abfd, buf, bufsiz, "CORE", NT_PRPSINFO,
11794 				 &data, sizeof (data));
11795     }
11796 }
11797 
11798 char *
11799 elfcore_write_linux_prpsinfo64
11800   (bfd *abfd, char *buf, int *bufsiz,
11801    const struct elf_internal_linux_prpsinfo *prpsinfo)
11802 {
11803   if (get_elf_backend_data (abfd)->linux_prpsinfo64_ugid16)
11804     {
11805       struct elf_external_linux_prpsinfo64_ugid16 data;
11806 
11807       swap_linux_prpsinfo64_ugid16_out (abfd, prpsinfo, &data);
11808       return elfcore_write_note (abfd, buf, bufsiz,
11809 				 "CORE", NT_PRPSINFO, &data, sizeof (data));
11810     }
11811   else
11812     {
11813       struct elf_external_linux_prpsinfo64_ugid32 data;
11814 
11815       swap_linux_prpsinfo64_ugid32_out (abfd, prpsinfo, &data);
11816       return elfcore_write_note (abfd, buf, bufsiz,
11817 				 "CORE", NT_PRPSINFO, &data, sizeof (data));
11818     }
11819 }
11820 
11821 char *
11822 elfcore_write_prstatus (bfd *abfd,
11823 			char *buf,
11824 			int *bufsiz,
11825 			long pid,
11826 			int cursig,
11827 			const void *gregs)
11828 {
11829   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
11830 
11831   if (bed->elf_backend_write_core_note != NULL)
11832     {
11833       char *ret;
11834       ret = (*bed->elf_backend_write_core_note) (abfd, buf, bufsiz,
11835 						 NT_PRSTATUS,
11836 						 pid, cursig, gregs);
11837       if (ret != NULL)
11838 	return ret;
11839     }
11840 
11841 #if defined (HAVE_PRSTATUS_T)
11842 #if defined (HAVE_PRSTATUS32_T)
11843   if (bed->s->elfclass == ELFCLASS32)
11844     {
11845       prstatus32_t prstat;
11846 
11847       memset (&prstat, 0, sizeof (prstat));
11848       prstat.pr_pid = pid;
11849       prstat.pr_cursig = cursig;
11850       memcpy (&prstat.pr_reg, gregs, sizeof (prstat.pr_reg));
11851       return elfcore_write_note (abfd, buf, bufsiz, "CORE",
11852 				 NT_PRSTATUS, &prstat, sizeof (prstat));
11853     }
11854   else
11855 #endif
11856     {
11857       prstatus_t prstat;
11858 
11859       memset (&prstat, 0, sizeof (prstat));
11860       prstat.pr_pid = pid;
11861       prstat.pr_cursig = cursig;
11862       memcpy (&prstat.pr_reg, gregs, sizeof (prstat.pr_reg));
11863       return elfcore_write_note (abfd, buf, bufsiz, "CORE",
11864 				 NT_PRSTATUS, &prstat, sizeof (prstat));
11865     }
11866 #endif /* HAVE_PRSTATUS_T */
11867 
11868   free (buf);
11869   return NULL;
11870 }
11871 
11872 #if defined (HAVE_LWPSTATUS_T)
11873 char *
11874 elfcore_write_lwpstatus (bfd *abfd,
11875 			 char *buf,
11876 			 int *bufsiz,
11877 			 long pid,
11878 			 int cursig,
11879 			 const void *gregs)
11880 {
11881   lwpstatus_t lwpstat;
11882   const char *note_name = "CORE";
11883 
11884   memset (&lwpstat, 0, sizeof (lwpstat));
11885   lwpstat.pr_lwpid  = pid >> 16;
11886   lwpstat.pr_cursig = cursig;
11887 #if defined (HAVE_LWPSTATUS_T_PR_REG)
11888   memcpy (&lwpstat.pr_reg, gregs, sizeof (lwpstat.pr_reg));
11889 #elif defined (HAVE_LWPSTATUS_T_PR_CONTEXT)
11890 #if !defined(gregs)
11891   memcpy (lwpstat.pr_context.uc_mcontext.gregs,
11892 	  gregs, sizeof (lwpstat.pr_context.uc_mcontext.gregs));
11893 #else
11894   memcpy (lwpstat.pr_context.uc_mcontext.__gregs,
11895 	  gregs, sizeof (lwpstat.pr_context.uc_mcontext.__gregs));
11896 #endif
11897 #endif
11898   return elfcore_write_note (abfd, buf, bufsiz, note_name,
11899 			     NT_LWPSTATUS, &lwpstat, sizeof (lwpstat));
11900 }
11901 #endif /* HAVE_LWPSTATUS_T */
11902 
11903 #if defined (HAVE_PSTATUS_T)
11904 char *
11905 elfcore_write_pstatus (bfd *abfd,
11906 		       char *buf,
11907 		       int *bufsiz,
11908 		       long pid,
11909 		       int cursig ATTRIBUTE_UNUSED,
11910 		       const void *gregs ATTRIBUTE_UNUSED)
11911 {
11912   const char *note_name = "CORE";
11913 #if defined (HAVE_PSTATUS32_T)
11914   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
11915 
11916   if (bed->s->elfclass == ELFCLASS32)
11917     {
11918       pstatus32_t pstat;
11919 
11920       memset (&pstat, 0, sizeof (pstat));
11921       pstat.pr_pid = pid & 0xffff;
11922       buf = elfcore_write_note (abfd, buf, bufsiz, note_name,
11923 				NT_PSTATUS, &pstat, sizeof (pstat));
11924       return buf;
11925     }
11926   else
11927 #endif
11928     {
11929       pstatus_t pstat;
11930 
11931       memset (&pstat, 0, sizeof (pstat));
11932       pstat.pr_pid = pid & 0xffff;
11933       buf = elfcore_write_note (abfd, buf, bufsiz, note_name,
11934 				NT_PSTATUS, &pstat, sizeof (pstat));
11935       return buf;
11936     }
11937 }
11938 #endif /* HAVE_PSTATUS_T */
11939 
11940 char *
11941 elfcore_write_prfpreg (bfd *abfd,
11942 		       char *buf,
11943 		       int *bufsiz,
11944 		       const void *fpregs,
11945 		       int size)
11946 {
11947   const char *note_name = "CORE";
11948   return elfcore_write_note (abfd, buf, bufsiz,
11949 			     note_name, NT_FPREGSET, fpregs, size);
11950 }
11951 
11952 char *
11953 elfcore_write_prxfpreg (bfd *abfd,
11954 			char *buf,
11955 			int *bufsiz,
11956 			const void *xfpregs,
11957 			int size)
11958 {
11959   char *note_name = "LINUX";
11960   return elfcore_write_note (abfd, buf, bufsiz,
11961 			     note_name, NT_PRXFPREG, xfpregs, size);
11962 }
11963 
11964 char *
11965 elfcore_write_xstatereg (bfd *abfd, char *buf, int *bufsiz,
11966 			 const void *xfpregs, int size)
11967 {
11968   char *note_name;
11969   if (get_elf_backend_data (abfd)->elf_osabi == ELFOSABI_FREEBSD)
11970     note_name = "FreeBSD";
11971   else
11972     note_name = "LINUX";
11973   return elfcore_write_note (abfd, buf, bufsiz,
11974 			     note_name, NT_X86_XSTATE, xfpregs, size);
11975 }
11976 
11977 char *
11978 elfcore_write_x86_segbases (bfd *abfd, char *buf, int *bufsiz,
11979 			    const void *regs, int size)
11980 {
11981   char *note_name = "FreeBSD";
11982   return elfcore_write_note (abfd, buf, bufsiz,
11983 			     note_name, NT_FREEBSD_X86_SEGBASES, regs, size);
11984 }
11985 
11986 char *
11987 elfcore_write_ppc_vmx (bfd *abfd,
11988 		       char *buf,
11989 		       int *bufsiz,
11990 		       const void *ppc_vmx,
11991 		       int size)
11992 {
11993   char *note_name = "LINUX";
11994   return elfcore_write_note (abfd, buf, bufsiz,
11995 			     note_name, NT_PPC_VMX, ppc_vmx, size);
11996 }
11997 
11998 char *
11999 elfcore_write_ppc_vsx (bfd *abfd,
12000 		       char *buf,
12001 		       int *bufsiz,
12002 		       const void *ppc_vsx,
12003 		       int size)
12004 {
12005   char *note_name = "LINUX";
12006   return elfcore_write_note (abfd, buf, bufsiz,
12007 			     note_name, NT_PPC_VSX, ppc_vsx, size);
12008 }
12009 
12010 char *
12011 elfcore_write_ppc_tar (bfd *abfd,
12012 		       char *buf,
12013 		       int *bufsiz,
12014 		       const void *ppc_tar,
12015 		       int size)
12016 {
12017   char *note_name = "LINUX";
12018   return elfcore_write_note (abfd, buf, bufsiz,
12019 			     note_name, NT_PPC_TAR, ppc_tar, size);
12020 }
12021 
12022 char *
12023 elfcore_write_ppc_ppr (bfd *abfd,
12024 		       char *buf,
12025 		       int *bufsiz,
12026 		       const void *ppc_ppr,
12027 		       int size)
12028 {
12029   char *note_name = "LINUX";
12030   return elfcore_write_note (abfd, buf, bufsiz,
12031 			     note_name, NT_PPC_PPR, ppc_ppr, size);
12032 }
12033 
12034 char *
12035 elfcore_write_ppc_dscr (bfd *abfd,
12036 			char *buf,
12037 			int *bufsiz,
12038 			const void *ppc_dscr,
12039 			int size)
12040 {
12041   char *note_name = "LINUX";
12042   return elfcore_write_note (abfd, buf, bufsiz,
12043 			     note_name, NT_PPC_DSCR, ppc_dscr, size);
12044 }
12045 
12046 char *
12047 elfcore_write_ppc_ebb (bfd *abfd,
12048 		       char *buf,
12049 		       int *bufsiz,
12050 		       const void *ppc_ebb,
12051 		       int size)
12052 {
12053   char *note_name = "LINUX";
12054   return elfcore_write_note (abfd, buf, bufsiz,
12055 			     note_name, NT_PPC_EBB, ppc_ebb, size);
12056 }
12057 
12058 char *
12059 elfcore_write_ppc_pmu (bfd *abfd,
12060 		       char *buf,
12061 		       int *bufsiz,
12062 		       const void *ppc_pmu,
12063 		       int size)
12064 {
12065   char *note_name = "LINUX";
12066   return elfcore_write_note (abfd, buf, bufsiz,
12067 			     note_name, NT_PPC_PMU, ppc_pmu, size);
12068 }
12069 
12070 char *
12071 elfcore_write_ppc_tm_cgpr (bfd *abfd,
12072 			   char *buf,
12073 			   int *bufsiz,
12074 			   const void *ppc_tm_cgpr,
12075 			   int size)
12076 {
12077   char *note_name = "LINUX";
12078   return elfcore_write_note (abfd, buf, bufsiz,
12079 			     note_name, NT_PPC_TM_CGPR, ppc_tm_cgpr, size);
12080 }
12081 
12082 char *
12083 elfcore_write_ppc_tm_cfpr (bfd *abfd,
12084 			   char *buf,
12085 			   int *bufsiz,
12086 			   const void *ppc_tm_cfpr,
12087 			   int size)
12088 {
12089   char *note_name = "LINUX";
12090   return elfcore_write_note (abfd, buf, bufsiz,
12091 			     note_name, NT_PPC_TM_CFPR, ppc_tm_cfpr, size);
12092 }
12093 
12094 char *
12095 elfcore_write_ppc_tm_cvmx (bfd *abfd,
12096 			   char *buf,
12097 			   int *bufsiz,
12098 			   const void *ppc_tm_cvmx,
12099 			   int size)
12100 {
12101   char *note_name = "LINUX";
12102   return elfcore_write_note (abfd, buf, bufsiz,
12103 			     note_name, NT_PPC_TM_CVMX, ppc_tm_cvmx, size);
12104 }
12105 
12106 char *
12107 elfcore_write_ppc_tm_cvsx (bfd *abfd,
12108 			   char *buf,
12109 			   int *bufsiz,
12110 			   const void *ppc_tm_cvsx,
12111 			   int size)
12112 {
12113   char *note_name = "LINUX";
12114   return elfcore_write_note (abfd, buf, bufsiz,
12115 			     note_name, NT_PPC_TM_CVSX, ppc_tm_cvsx, size);
12116 }
12117 
12118 char *
12119 elfcore_write_ppc_tm_spr (bfd *abfd,
12120 			  char *buf,
12121 			  int *bufsiz,
12122 			  const void *ppc_tm_spr,
12123 			  int size)
12124 {
12125   char *note_name = "LINUX";
12126   return elfcore_write_note (abfd, buf, bufsiz,
12127 			     note_name, NT_PPC_TM_SPR, ppc_tm_spr, size);
12128 }
12129 
12130 char *
12131 elfcore_write_ppc_tm_ctar (bfd *abfd,
12132 			   char *buf,
12133 			   int *bufsiz,
12134 			   const void *ppc_tm_ctar,
12135 			   int size)
12136 {
12137   char *note_name = "LINUX";
12138   return elfcore_write_note (abfd, buf, bufsiz,
12139 			     note_name, NT_PPC_TM_CTAR, ppc_tm_ctar, size);
12140 }
12141 
12142 char *
12143 elfcore_write_ppc_tm_cppr (bfd *abfd,
12144 			   char *buf,
12145 			   int *bufsiz,
12146 			   const void *ppc_tm_cppr,
12147 			   int size)
12148 {
12149   char *note_name = "LINUX";
12150   return elfcore_write_note (abfd, buf, bufsiz,
12151 			     note_name, NT_PPC_TM_CPPR, ppc_tm_cppr, size);
12152 }
12153 
12154 char *
12155 elfcore_write_ppc_tm_cdscr (bfd *abfd,
12156 			    char *buf,
12157 			    int *bufsiz,
12158 			    const void *ppc_tm_cdscr,
12159 			    int size)
12160 {
12161   char *note_name = "LINUX";
12162   return elfcore_write_note (abfd, buf, bufsiz,
12163 			     note_name, NT_PPC_TM_CDSCR, ppc_tm_cdscr, size);
12164 }
12165 
12166 static char *
12167 elfcore_write_s390_high_gprs (bfd *abfd,
12168 			      char *buf,
12169 			      int *bufsiz,
12170 			      const void *s390_high_gprs,
12171 			      int size)
12172 {
12173   char *note_name = "LINUX";
12174   return elfcore_write_note (abfd, buf, bufsiz,
12175 			     note_name, NT_S390_HIGH_GPRS,
12176 			     s390_high_gprs, size);
12177 }
12178 
12179 char *
12180 elfcore_write_s390_timer (bfd *abfd,
12181 			  char *buf,
12182 			  int *bufsiz,
12183 			  const void *s390_timer,
12184 			  int size)
12185 {
12186   char *note_name = "LINUX";
12187   return elfcore_write_note (abfd, buf, bufsiz,
12188 			     note_name, NT_S390_TIMER, s390_timer, size);
12189 }
12190 
12191 char *
12192 elfcore_write_s390_todcmp (bfd *abfd,
12193 			   char *buf,
12194 			   int *bufsiz,
12195 			   const void *s390_todcmp,
12196 			   int size)
12197 {
12198   char *note_name = "LINUX";
12199   return elfcore_write_note (abfd, buf, bufsiz,
12200 			     note_name, NT_S390_TODCMP, s390_todcmp, size);
12201 }
12202 
12203 char *
12204 elfcore_write_s390_todpreg (bfd *abfd,
12205 			    char *buf,
12206 			    int *bufsiz,
12207 			    const void *s390_todpreg,
12208 			    int size)
12209 {
12210   char *note_name = "LINUX";
12211   return elfcore_write_note (abfd, buf, bufsiz,
12212 			     note_name, NT_S390_TODPREG, s390_todpreg, size);
12213 }
12214 
12215 char *
12216 elfcore_write_s390_ctrs (bfd *abfd,
12217 			 char *buf,
12218 			 int *bufsiz,
12219 			 const void *s390_ctrs,
12220 			 int size)
12221 {
12222   char *note_name = "LINUX";
12223   return elfcore_write_note (abfd, buf, bufsiz,
12224 			     note_name, NT_S390_CTRS, s390_ctrs, size);
12225 }
12226 
12227 char *
12228 elfcore_write_s390_prefix (bfd *abfd,
12229 			   char *buf,
12230 			   int *bufsiz,
12231 			   const void *s390_prefix,
12232 			   int size)
12233 {
12234   char *note_name = "LINUX";
12235   return elfcore_write_note (abfd, buf, bufsiz,
12236 			     note_name, NT_S390_PREFIX, s390_prefix, size);
12237 }
12238 
12239 char *
12240 elfcore_write_s390_last_break (bfd *abfd,
12241 			       char *buf,
12242 			       int *bufsiz,
12243 			       const void *s390_last_break,
12244 			       int size)
12245 {
12246   char *note_name = "LINUX";
12247   return elfcore_write_note (abfd, buf, bufsiz,
12248 			     note_name, NT_S390_LAST_BREAK,
12249 			     s390_last_break, size);
12250 }
12251 
12252 char *
12253 elfcore_write_s390_system_call (bfd *abfd,
12254 				char *buf,
12255 				int *bufsiz,
12256 				const void *s390_system_call,
12257 				int size)
12258 {
12259   char *note_name = "LINUX";
12260   return elfcore_write_note (abfd, buf, bufsiz,
12261 			     note_name, NT_S390_SYSTEM_CALL,
12262 			     s390_system_call, size);
12263 }
12264 
12265 char *
12266 elfcore_write_s390_tdb (bfd *abfd,
12267 			char *buf,
12268 			int *bufsiz,
12269 			const void *s390_tdb,
12270 			int size)
12271 {
12272   char *note_name = "LINUX";
12273   return elfcore_write_note (abfd, buf, bufsiz,
12274 			     note_name, NT_S390_TDB, s390_tdb, size);
12275 }
12276 
12277 char *
12278 elfcore_write_s390_vxrs_low (bfd *abfd,
12279 			     char *buf,
12280 			     int *bufsiz,
12281 			     const void *s390_vxrs_low,
12282 			     int size)
12283 {
12284   char *note_name = "LINUX";
12285   return elfcore_write_note (abfd, buf, bufsiz,
12286 			     note_name, NT_S390_VXRS_LOW, s390_vxrs_low, size);
12287 }
12288 
12289 char *
12290 elfcore_write_s390_vxrs_high (bfd *abfd,
12291 			     char *buf,
12292 			     int *bufsiz,
12293 			     const void *s390_vxrs_high,
12294 			     int size)
12295 {
12296   char *note_name = "LINUX";
12297   return elfcore_write_note (abfd, buf, bufsiz,
12298 			     note_name, NT_S390_VXRS_HIGH,
12299 			     s390_vxrs_high, size);
12300 }
12301 
12302 char *
12303 elfcore_write_s390_gs_cb (bfd *abfd,
12304 			  char *buf,
12305 			  int *bufsiz,
12306 			  const void *s390_gs_cb,
12307 			  int size)
12308 {
12309   char *note_name = "LINUX";
12310   return elfcore_write_note (abfd, buf, bufsiz,
12311 			     note_name, NT_S390_GS_CB,
12312 			     s390_gs_cb, size);
12313 }
12314 
12315 char *
12316 elfcore_write_s390_gs_bc (bfd *abfd,
12317 			  char *buf,
12318 			  int *bufsiz,
12319 			  const void *s390_gs_bc,
12320 			  int size)
12321 {
12322   char *note_name = "LINUX";
12323   return elfcore_write_note (abfd, buf, bufsiz,
12324 			     note_name, NT_S390_GS_BC,
12325 			     s390_gs_bc, size);
12326 }
12327 
12328 char *
12329 elfcore_write_arm_vfp (bfd *abfd,
12330 		       char *buf,
12331 		       int *bufsiz,
12332 		       const void *arm_vfp,
12333 		       int size)
12334 {
12335   char *note_name = "LINUX";
12336   return elfcore_write_note (abfd, buf, bufsiz,
12337 			     note_name, NT_ARM_VFP, arm_vfp, size);
12338 }
12339 
12340 char *
12341 elfcore_write_aarch_tls (bfd *abfd,
12342 		       char *buf,
12343 		       int *bufsiz,
12344 		       const void *aarch_tls,
12345 		       int size)
12346 {
12347   char *note_name = "LINUX";
12348   return elfcore_write_note (abfd, buf, bufsiz,
12349 			     note_name, NT_ARM_TLS, aarch_tls, size);
12350 }
12351 
12352 char *
12353 elfcore_write_aarch_hw_break (bfd *abfd,
12354 			    char *buf,
12355 			    int *bufsiz,
12356 			    const void *aarch_hw_break,
12357 			    int size)
12358 {
12359   char *note_name = "LINUX";
12360   return elfcore_write_note (abfd, buf, bufsiz,
12361 			     note_name, NT_ARM_HW_BREAK, aarch_hw_break, size);
12362 }
12363 
12364 char *
12365 elfcore_write_aarch_hw_watch (bfd *abfd,
12366 			    char *buf,
12367 			    int *bufsiz,
12368 			    const void *aarch_hw_watch,
12369 			    int size)
12370 {
12371   char *note_name = "LINUX";
12372   return elfcore_write_note (abfd, buf, bufsiz,
12373 			     note_name, NT_ARM_HW_WATCH, aarch_hw_watch, size);
12374 }
12375 
12376 char *
12377 elfcore_write_aarch_sve (bfd *abfd,
12378 			 char *buf,
12379 			 int *bufsiz,
12380 			 const void *aarch_sve,
12381 			 int size)
12382 {
12383   char *note_name = "LINUX";
12384   return elfcore_write_note (abfd, buf, bufsiz,
12385 			     note_name, NT_ARM_SVE, aarch_sve, size);
12386 }
12387 
12388 char *
12389 elfcore_write_aarch_pauth (bfd *abfd,
12390 			   char *buf,
12391 			   int *bufsiz,
12392 			   const void *aarch_pauth,
12393 			   int size)
12394 {
12395   char *note_name = "LINUX";
12396   return elfcore_write_note (abfd, buf, bufsiz,
12397 			     note_name, NT_ARM_PAC_MASK, aarch_pauth, size);
12398 }
12399 
12400 char *
12401 elfcore_write_aarch_mte (bfd *abfd,
12402 				      char *buf,
12403 				      int *bufsiz,
12404 				      const void *aarch_mte,
12405 				      int size)
12406 {
12407   char *note_name = "LINUX";
12408   return elfcore_write_note (abfd, buf, bufsiz,
12409 			     note_name, NT_ARM_TAGGED_ADDR_CTRL,
12410 			     aarch_mte,
12411 			     size);
12412 }
12413 
12414 char *
12415 elfcore_write_arc_v2 (bfd *abfd,
12416 		      char *buf,
12417 		      int *bufsiz,
12418 		      const void *arc_v2,
12419 		      int size)
12420 {
12421   char *note_name = "LINUX";
12422   return elfcore_write_note (abfd, buf, bufsiz,
12423 			     note_name, NT_ARC_V2, arc_v2, size);
12424 }
12425 
12426 char *
12427 elfcore_write_loongarch_cpucfg (bfd *abfd,
12428 				char *buf,
12429 				int *bufsiz,
12430 				const void *loongarch_cpucfg,
12431 				int size)
12432 {
12433   char *note_name = "LINUX";
12434   return elfcore_write_note (abfd, buf, bufsiz,
12435 			     note_name, NT_LARCH_CPUCFG,
12436 			     loongarch_cpucfg, size);
12437 }
12438 
12439 char *
12440 elfcore_write_loongarch_lbt (bfd *abfd,
12441 			     char *buf,
12442 			     int *bufsiz,
12443 			     const void *loongarch_lbt,
12444 			     int size)
12445 {
12446   char *note_name = "LINUX";
12447   return elfcore_write_note (abfd, buf, bufsiz,
12448 			     note_name, NT_LARCH_LBT, loongarch_lbt, size);
12449 }
12450 
12451 char *
12452 elfcore_write_loongarch_lsx (bfd *abfd,
12453 			     char *buf,
12454 			     int *bufsiz,
12455 			     const void *loongarch_lsx,
12456 			     int size)
12457 {
12458   char *note_name = "LINUX";
12459   return elfcore_write_note (abfd, buf, bufsiz,
12460 			     note_name, NT_LARCH_LSX, loongarch_lsx, size);
12461 }
12462 
12463 char *
12464 elfcore_write_loongarch_lasx (bfd *abfd,
12465 			      char *buf,
12466 			      int *bufsiz,
12467 			      const void *loongarch_lasx,
12468 			      int size)
12469 {
12470   char *note_name = "LINUX";
12471   return elfcore_write_note (abfd, buf, bufsiz,
12472 			     note_name, NT_LARCH_LASX, loongarch_lasx, size);
12473 }
12474 
12475 /* Write the buffer of csr values in CSRS (length SIZE) into the note
12476    buffer BUF and update *BUFSIZ.  ABFD is the bfd the note is being
12477    written into.  Return a pointer to the new start of the note buffer, to
12478    replace BUF which may no longer be valid.  */
12479 
12480 char *
12481 elfcore_write_riscv_csr (bfd *abfd,
12482 			 char *buf,
12483 			 int *bufsiz,
12484 			 const void *csrs,
12485 			 int size)
12486 {
12487   const char *note_name = "GDB";
12488   return elfcore_write_note (abfd, buf, bufsiz,
12489 			     note_name, NT_RISCV_CSR, csrs, size);
12490 }
12491 
12492 /* Write the target description (a string) pointed to by TDESC, length
12493    SIZE, into the note buffer BUF, and update *BUFSIZ.  ABFD is the bfd the
12494    note is being written into.  Return a pointer to the new start of the
12495    note buffer, to replace BUF which may no longer be valid.  */
12496 
12497 char *
12498 elfcore_write_gdb_tdesc (bfd *abfd,
12499 			 char *buf,
12500 			 int *bufsiz,
12501 			 const void *tdesc,
12502 			 int size)
12503 {
12504   const char *note_name = "GDB";
12505   return elfcore_write_note (abfd, buf, bufsiz,
12506 			     note_name, NT_GDB_TDESC, tdesc, size);
12507 }
12508 
12509 char *
12510 elfcore_write_register_note (bfd *abfd,
12511 			     char *buf,
12512 			     int *bufsiz,
12513 			     const char *section,
12514 			     const void *data,
12515 			     int size)
12516 {
12517   if (strcmp (section, ".reg2") == 0)
12518     return elfcore_write_prfpreg (abfd, buf, bufsiz, data, size);
12519   if (strcmp (section, ".reg-xfp") == 0)
12520     return elfcore_write_prxfpreg (abfd, buf, bufsiz, data, size);
12521   if (strcmp (section, ".reg-xstate") == 0)
12522     return elfcore_write_xstatereg (abfd, buf, bufsiz, data, size);
12523   if (strcmp (section, ".reg-x86-segbases") == 0)
12524     return elfcore_write_x86_segbases (abfd, buf, bufsiz, data, size);
12525   if (strcmp (section, ".reg-ppc-vmx") == 0)
12526     return elfcore_write_ppc_vmx (abfd, buf, bufsiz, data, size);
12527   if (strcmp (section, ".reg-ppc-vsx") == 0)
12528     return elfcore_write_ppc_vsx (abfd, buf, bufsiz, data, size);
12529   if (strcmp (section, ".reg-ppc-tar") == 0)
12530     return elfcore_write_ppc_tar (abfd, buf, bufsiz, data, size);
12531   if (strcmp (section, ".reg-ppc-ppr") == 0)
12532     return elfcore_write_ppc_ppr (abfd, buf, bufsiz, data, size);
12533   if (strcmp (section, ".reg-ppc-dscr") == 0)
12534     return elfcore_write_ppc_dscr (abfd, buf, bufsiz, data, size);
12535   if (strcmp (section, ".reg-ppc-ebb") == 0)
12536     return elfcore_write_ppc_ebb (abfd, buf, bufsiz, data, size);
12537   if (strcmp (section, ".reg-ppc-pmu") == 0)
12538     return elfcore_write_ppc_pmu (abfd, buf, bufsiz, data, size);
12539   if (strcmp (section, ".reg-ppc-tm-cgpr") == 0)
12540     return elfcore_write_ppc_tm_cgpr (abfd, buf, bufsiz, data, size);
12541   if (strcmp (section, ".reg-ppc-tm-cfpr") == 0)
12542     return elfcore_write_ppc_tm_cfpr (abfd, buf, bufsiz, data, size);
12543   if (strcmp (section, ".reg-ppc-tm-cvmx") == 0)
12544     return elfcore_write_ppc_tm_cvmx (abfd, buf, bufsiz, data, size);
12545   if (strcmp (section, ".reg-ppc-tm-cvsx") == 0)
12546     return elfcore_write_ppc_tm_cvsx (abfd, buf, bufsiz, data, size);
12547   if (strcmp (section, ".reg-ppc-tm-spr") == 0)
12548     return elfcore_write_ppc_tm_spr (abfd, buf, bufsiz, data, size);
12549   if (strcmp (section, ".reg-ppc-tm-ctar") == 0)
12550     return elfcore_write_ppc_tm_ctar (abfd, buf, bufsiz, data, size);
12551   if (strcmp (section, ".reg-ppc-tm-cppr") == 0)
12552     return elfcore_write_ppc_tm_cppr (abfd, buf, bufsiz, data, size);
12553   if (strcmp (section, ".reg-ppc-tm-cdscr") == 0)
12554     return elfcore_write_ppc_tm_cdscr (abfd, buf, bufsiz, data, size);
12555   if (strcmp (section, ".reg-s390-high-gprs") == 0)
12556     return elfcore_write_s390_high_gprs (abfd, buf, bufsiz, data, size);
12557   if (strcmp (section, ".reg-s390-timer") == 0)
12558     return elfcore_write_s390_timer (abfd, buf, bufsiz, data, size);
12559   if (strcmp (section, ".reg-s390-todcmp") == 0)
12560     return elfcore_write_s390_todcmp (abfd, buf, bufsiz, data, size);
12561   if (strcmp (section, ".reg-s390-todpreg") == 0)
12562     return elfcore_write_s390_todpreg (abfd, buf, bufsiz, data, size);
12563   if (strcmp (section, ".reg-s390-ctrs") == 0)
12564     return elfcore_write_s390_ctrs (abfd, buf, bufsiz, data, size);
12565   if (strcmp (section, ".reg-s390-prefix") == 0)
12566     return elfcore_write_s390_prefix (abfd, buf, bufsiz, data, size);
12567   if (strcmp (section, ".reg-s390-last-break") == 0)
12568     return elfcore_write_s390_last_break (abfd, buf, bufsiz, data, size);
12569   if (strcmp (section, ".reg-s390-system-call") == 0)
12570     return elfcore_write_s390_system_call (abfd, buf, bufsiz, data, size);
12571   if (strcmp (section, ".reg-s390-tdb") == 0)
12572     return elfcore_write_s390_tdb (abfd, buf, bufsiz, data, size);
12573   if (strcmp (section, ".reg-s390-vxrs-low") == 0)
12574     return elfcore_write_s390_vxrs_low (abfd, buf, bufsiz, data, size);
12575   if (strcmp (section, ".reg-s390-vxrs-high") == 0)
12576     return elfcore_write_s390_vxrs_high (abfd, buf, bufsiz, data, size);
12577   if (strcmp (section, ".reg-s390-gs-cb") == 0)
12578     return elfcore_write_s390_gs_cb (abfd, buf, bufsiz, data, size);
12579   if (strcmp (section, ".reg-s390-gs-bc") == 0)
12580     return elfcore_write_s390_gs_bc (abfd, buf, bufsiz, data, size);
12581   if (strcmp (section, ".reg-arm-vfp") == 0)
12582     return elfcore_write_arm_vfp (abfd, buf, bufsiz, data, size);
12583   if (strcmp (section, ".reg-aarch-tls") == 0)
12584     return elfcore_write_aarch_tls (abfd, buf, bufsiz, data, size);
12585   if (strcmp (section, ".reg-aarch-hw-break") == 0)
12586     return elfcore_write_aarch_hw_break (abfd, buf, bufsiz, data, size);
12587   if (strcmp (section, ".reg-aarch-hw-watch") == 0)
12588     return elfcore_write_aarch_hw_watch (abfd, buf, bufsiz, data, size);
12589   if (strcmp (section, ".reg-aarch-sve") == 0)
12590     return elfcore_write_aarch_sve (abfd, buf, bufsiz, data, size);
12591   if (strcmp (section, ".reg-aarch-pauth") == 0)
12592     return elfcore_write_aarch_pauth (abfd, buf, bufsiz, data, size);
12593   if (strcmp (section, ".reg-aarch-mte") == 0)
12594     return elfcore_write_aarch_mte (abfd, buf, bufsiz, data, size);
12595   if (strcmp (section, ".reg-arc-v2") == 0)
12596     return elfcore_write_arc_v2 (abfd, buf, bufsiz, data, size);
12597   if (strcmp (section, ".gdb-tdesc") == 0)
12598     return elfcore_write_gdb_tdesc (abfd, buf, bufsiz, data, size);
12599   if (strcmp (section, ".reg-riscv-csr") == 0)
12600     return elfcore_write_riscv_csr (abfd, buf, bufsiz, data, size);
12601   if (strcmp (section, ".reg-loongarch-cpucfg") == 0)
12602     return elfcore_write_loongarch_cpucfg (abfd, buf, bufsiz, data, size);
12603   if (strcmp (section, ".reg-loongarch-lbt") == 0)
12604     return elfcore_write_loongarch_lbt (abfd, buf, bufsiz, data, size);
12605   if (strcmp (section, ".reg-loongarch-lsx") == 0)
12606     return elfcore_write_loongarch_lsx (abfd, buf, bufsiz, data, size);
12607   if (strcmp (section, ".reg-loongarch-lasx") == 0)
12608     return elfcore_write_loongarch_lasx (abfd, buf, bufsiz, data, size);
12609   return NULL;
12610 }
12611 
12612 char *
12613 elfcore_write_file_note (bfd *obfd, char *note_data, int *note_size,
12614 			 const void *buf, int bufsiz)
12615 {
12616   return elfcore_write_note (obfd, note_data, note_size,
12617 			     "CORE", NT_FILE, buf, bufsiz);
12618 }
12619 
12620 static bool
12621 elf_parse_notes (bfd *abfd, char *buf, size_t size, file_ptr offset,
12622 		 size_t align)
12623 {
12624   char *p;
12625 
12626   /* NB: CORE PT_NOTE segments may have p_align values of 0 or 1.
12627      gABI specifies that PT_NOTE alignment should be aligned to 4
12628      bytes for 32-bit objects and to 8 bytes for 64-bit objects.  If
12629      align is less than 4, we use 4 byte alignment.   */
12630   if (align < 4)
12631     align = 4;
12632   if (align != 4 && align != 8)
12633     return false;
12634 
12635   p = buf;
12636   while (p < buf + size)
12637     {
12638       Elf_External_Note *xnp = (Elf_External_Note *) p;
12639       Elf_Internal_Note in;
12640 
12641       if (offsetof (Elf_External_Note, name) > buf - p + size)
12642 	return false;
12643 
12644       in.type = H_GET_32 (abfd, xnp->type);
12645 
12646       in.namesz = H_GET_32 (abfd, xnp->namesz);
12647       in.namedata = xnp->name;
12648       if (in.namesz > buf - in.namedata + size)
12649 	return false;
12650 
12651       in.descsz = H_GET_32 (abfd, xnp->descsz);
12652       in.descdata = p + ELF_NOTE_DESC_OFFSET (in.namesz, align);
12653       in.descpos = offset + (in.descdata - buf);
12654       if (in.descsz != 0
12655 	  && (in.descdata >= buf + size
12656 	      || in.descsz > buf - in.descdata + size))
12657 	return false;
12658 
12659       switch (bfd_get_format (abfd))
12660 	{
12661 	default:
12662 	  return true;
12663 
12664 	case bfd_core:
12665 	  {
12666 #define GROKER_ELEMENT(S,F) {S, sizeof (S) - 1, F}
12667 	    struct
12668 	    {
12669 	      const char * string;
12670 	      size_t len;
12671 	      bool (*func) (bfd *, Elf_Internal_Note *);
12672 	    }
12673 	    grokers[] =
12674 	    {
12675 	      GROKER_ELEMENT ("", elfcore_grok_note),
12676 	      GROKER_ELEMENT ("FreeBSD", elfcore_grok_freebsd_note),
12677 	      GROKER_ELEMENT ("NetBSD-CORE", elfcore_grok_netbsd_note),
12678 	      GROKER_ELEMENT ("OpenBSD", elfcore_grok_openbsd_note),
12679 	      GROKER_ELEMENT ("QNX", elfcore_grok_nto_note),
12680 	      GROKER_ELEMENT ("SPU/", elfcore_grok_spu_note),
12681 	      GROKER_ELEMENT ("GNU", elfobj_grok_gnu_note),
12682 	      GROKER_ELEMENT ("CORE", elfcore_grok_solaris_note)
12683 	    };
12684 #undef GROKER_ELEMENT
12685 	    int i;
12686 
12687 	    for (i = ARRAY_SIZE (grokers); i--;)
12688 	      {
12689 		if (in.namesz >= grokers[i].len
12690 		    && strncmp (in.namedata, grokers[i].string,
12691 				grokers[i].len) == 0)
12692 		  {
12693 		    if (! grokers[i].func (abfd, & in))
12694 		      return false;
12695 		    break;
12696 		  }
12697 	      }
12698 	    break;
12699 	  }
12700 
12701 	case bfd_object:
12702 	  if (in.namesz == sizeof "GNU" && strcmp (in.namedata, "GNU") == 0)
12703 	    {
12704 	      if (! elfobj_grok_gnu_note (abfd, &in))
12705 		return false;
12706 	    }
12707 	  else if (in.namesz == sizeof "stapsdt"
12708 		   && strcmp (in.namedata, "stapsdt") == 0)
12709 	    {
12710 	      if (! elfobj_grok_stapsdt_note (abfd, &in))
12711 		return false;
12712 	    }
12713 	  break;
12714 	}
12715 
12716       p += ELF_NOTE_NEXT_OFFSET (in.namesz, in.descsz, align);
12717     }
12718 
12719   return true;
12720 }
12721 
12722 bool
12723 elf_read_notes (bfd *abfd, file_ptr offset, bfd_size_type size,
12724 		size_t align)
12725 {
12726   char *buf;
12727 
12728   if (size == 0 || (size + 1) == 0)
12729     return true;
12730 
12731   if (bfd_seek (abfd, offset, SEEK_SET) != 0)
12732     return false;
12733 
12734   buf = (char *) _bfd_malloc_and_read (abfd, size + 1, size);
12735   if (buf == NULL)
12736     return false;
12737 
12738   /* PR 17512: file: ec08f814
12739      0-termintate the buffer so that string searches will not overflow.  */
12740   buf[size] = 0;
12741 
12742   if (!elf_parse_notes (abfd, buf, size, offset, align))
12743     {
12744       free (buf);
12745       return false;
12746     }
12747 
12748   free (buf);
12749   return true;
12750 }
12751 
12752 /* Providing external access to the ELF program header table.  */
12753 
12754 /* Return an upper bound on the number of bytes required to store a
12755    copy of ABFD's program header table entries.  Return -1 if an error
12756    occurs; bfd_get_error will return an appropriate code.  */
12757 
12758 long
12759 bfd_get_elf_phdr_upper_bound (bfd *abfd)
12760 {
12761   if (abfd->xvec->flavour != bfd_target_elf_flavour)
12762     {
12763       bfd_set_error (bfd_error_wrong_format);
12764       return -1;
12765     }
12766 
12767   return elf_elfheader (abfd)->e_phnum * sizeof (Elf_Internal_Phdr);
12768 }
12769 
12770 /* Copy ABFD's program header table entries to *PHDRS.  The entries
12771    will be stored as an array of Elf_Internal_Phdr structures, as
12772    defined in include/elf/internal.h.  To find out how large the
12773    buffer needs to be, call bfd_get_elf_phdr_upper_bound.
12774 
12775    Return the number of program header table entries read, or -1 if an
12776    error occurs; bfd_get_error will return an appropriate code.  */
12777 
12778 int
12779 bfd_get_elf_phdrs (bfd *abfd, void *phdrs)
12780 {
12781   int num_phdrs;
12782 
12783   if (abfd->xvec->flavour != bfd_target_elf_flavour)
12784     {
12785       bfd_set_error (bfd_error_wrong_format);
12786       return -1;
12787     }
12788 
12789   num_phdrs = elf_elfheader (abfd)->e_phnum;
12790   if (num_phdrs != 0)
12791     memcpy (phdrs, elf_tdata (abfd)->phdr,
12792 	    num_phdrs * sizeof (Elf_Internal_Phdr));
12793 
12794   return num_phdrs;
12795 }
12796 
12797 enum elf_reloc_type_class
12798 _bfd_elf_reloc_type_class (const struct bfd_link_info *info ATTRIBUTE_UNUSED,
12799 			   const asection *rel_sec ATTRIBUTE_UNUSED,
12800 			   const Elf_Internal_Rela *rela ATTRIBUTE_UNUSED)
12801 {
12802   return reloc_class_normal;
12803 }
12804 
12805 /* For RELA architectures, return the relocation value for a
12806    relocation against a local symbol.  */
12807 
12808 bfd_vma
12809 _bfd_elf_rela_local_sym (bfd *abfd,
12810 			 Elf_Internal_Sym *sym,
12811 			 asection **psec,
12812 			 Elf_Internal_Rela *rel)
12813 {
12814   asection *sec = *psec;
12815   bfd_vma relocation;
12816 
12817   relocation = (sec->output_section->vma
12818 		+ sec->output_offset
12819 		+ sym->st_value);
12820   if ((sec->flags & SEC_MERGE)
12821       && ELF_ST_TYPE (sym->st_info) == STT_SECTION
12822       && sec->sec_info_type == SEC_INFO_TYPE_MERGE)
12823     {
12824       rel->r_addend =
12825 	_bfd_merged_section_offset (abfd, psec,
12826 				    elf_section_data (sec)->sec_info,
12827 				    sym->st_value + rel->r_addend);
12828       if (sec != *psec)
12829 	{
12830 	  /* If we have changed the section, and our original section is
12831 	     marked with SEC_EXCLUDE, it means that the original
12832 	     SEC_MERGE section has been completely subsumed in some
12833 	     other SEC_MERGE section.  In this case, we need to leave
12834 	     some info around for --emit-relocs.  */
12835 	  if ((sec->flags & SEC_EXCLUDE) != 0)
12836 	    sec->kept_section = *psec;
12837 	  sec = *psec;
12838 	}
12839       rel->r_addend -= relocation;
12840       rel->r_addend += sec->output_section->vma + sec->output_offset;
12841     }
12842   return relocation;
12843 }
12844 
12845 bfd_vma
12846 _bfd_elf_rel_local_sym (bfd *abfd,
12847 			Elf_Internal_Sym *sym,
12848 			asection **psec,
12849 			bfd_vma addend)
12850 {
12851   asection *sec = *psec;
12852 
12853   if (sec->sec_info_type != SEC_INFO_TYPE_MERGE)
12854     return sym->st_value + addend;
12855 
12856   return _bfd_merged_section_offset (abfd, psec,
12857 				     elf_section_data (sec)->sec_info,
12858 				     sym->st_value + addend);
12859 }
12860 
12861 /* Adjust an address within a section.  Given OFFSET within SEC, return
12862    the new offset within the section, based upon changes made to the
12863    section.  Returns -1 if the offset is now invalid.
12864    The offset (in abnd out) is in target sized bytes, however big a
12865    byte may be.  */
12866 
12867 bfd_vma
12868 _bfd_elf_section_offset (bfd *abfd,
12869 			 struct bfd_link_info *info,
12870 			 asection *sec,
12871 			 bfd_vma offset)
12872 {
12873   switch (sec->sec_info_type)
12874     {
12875     case SEC_INFO_TYPE_STABS:
12876       return _bfd_stab_section_offset (sec, elf_section_data (sec)->sec_info,
12877 				       offset);
12878     case SEC_INFO_TYPE_EH_FRAME:
12879       return _bfd_elf_eh_frame_section_offset (abfd, info, sec, offset);
12880 
12881     default:
12882       if ((sec->flags & SEC_ELF_REVERSE_COPY) != 0)
12883 	{
12884 	  /* Reverse the offset.  */
12885 	  const struct elf_backend_data *bed = get_elf_backend_data (abfd);
12886 	  bfd_size_type address_size = bed->s->arch_size / 8;
12887 
12888 	  /* address_size and sec->size are in octets.  Convert
12889 	     to bytes before subtracting the original offset.  */
12890 	  offset = ((sec->size - address_size)
12891 		    / bfd_octets_per_byte (abfd, sec) - offset);
12892 	}
12893       return offset;
12894     }
12895 }
12896 
12897 /* Create a new BFD as if by bfd_openr.  Rather than opening a file,
12898    reconstruct an ELF file by reading the segments out of remote memory
12899    based on the ELF file header at EHDR_VMA and the ELF program headers it
12900    points to.  If not null, *LOADBASEP is filled in with the difference
12901    between the VMAs from which the segments were read, and the VMAs the
12902    file headers (and hence BFD's idea of each section's VMA) put them at.
12903 
12904    The function TARGET_READ_MEMORY is called to copy LEN bytes from the
12905    remote memory at target address VMA into the local buffer at MYADDR; it
12906    should return zero on success or an `errno' code on failure.  TEMPL must
12907    be a BFD for an ELF target with the word size and byte order found in
12908    the remote memory.  */
12909 
12910 bfd *
12911 bfd_elf_bfd_from_remote_memory
12912   (bfd *templ,
12913    bfd_vma ehdr_vma,
12914    bfd_size_type size,
12915    bfd_vma *loadbasep,
12916    int (*target_read_memory) (bfd_vma, bfd_byte *, bfd_size_type))
12917 {
12918   return (*get_elf_backend_data (templ)->elf_backend_bfd_from_remote_memory)
12919     (templ, ehdr_vma, size, loadbasep, target_read_memory);
12920 }
12921 
12922 long
12923 _bfd_elf_get_synthetic_symtab (bfd *abfd,
12924 			       long symcount ATTRIBUTE_UNUSED,
12925 			       asymbol **syms ATTRIBUTE_UNUSED,
12926 			       long dynsymcount,
12927 			       asymbol **dynsyms,
12928 			       asymbol **ret)
12929 {
12930   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
12931   asection *relplt;
12932   asymbol *s;
12933   const char *relplt_name;
12934   bool (*slurp_relocs) (bfd *, asection *, asymbol **, bool);
12935   arelent *p;
12936   long count, i, n;
12937   size_t size;
12938   Elf_Internal_Shdr *hdr;
12939   char *names;
12940   asection *plt;
12941 
12942   *ret = NULL;
12943 
12944   if ((abfd->flags & (DYNAMIC | EXEC_P)) == 0)
12945     return 0;
12946 
12947   if (dynsymcount <= 0)
12948     return 0;
12949 
12950   if (!bed->plt_sym_val)
12951     return 0;
12952 
12953   relplt_name = bed->relplt_name;
12954   if (relplt_name == NULL)
12955     relplt_name = bed->rela_plts_and_copies_p ? ".rela.plt" : ".rel.plt";
12956   relplt = bfd_get_section_by_name (abfd, relplt_name);
12957   if (relplt == NULL)
12958     return 0;
12959 
12960   hdr = &elf_section_data (relplt)->this_hdr;
12961   if (hdr->sh_link != elf_dynsymtab (abfd)
12962       || (hdr->sh_type != SHT_REL && hdr->sh_type != SHT_RELA))
12963     return 0;
12964 
12965   plt = bfd_get_section_by_name (abfd, ".plt");
12966   if (plt == NULL)
12967     return 0;
12968 
12969   slurp_relocs = get_elf_backend_data (abfd)->s->slurp_reloc_table;
12970   if (! (*slurp_relocs) (abfd, relplt, dynsyms, true))
12971     return -1;
12972 
12973   count = relplt->size / hdr->sh_entsize;
12974   size = count * sizeof (asymbol);
12975   p = relplt->relocation;
12976   for (i = 0; i < count; i++, p += bed->s->int_rels_per_ext_rel)
12977     {
12978       size += strlen ((*p->sym_ptr_ptr)->name) + sizeof ("@plt");
12979       if (p->addend != 0)
12980 	{
12981 #ifdef BFD64
12982 	  size += sizeof ("+0x") - 1 + 8 + 8 * (bed->s->elfclass == ELFCLASS64);
12983 #else
12984 	  size += sizeof ("+0x") - 1 + 8;
12985 #endif
12986 	}
12987     }
12988 
12989   s = *ret = (asymbol *) bfd_malloc (size);
12990   if (s == NULL)
12991     return -1;
12992 
12993   names = (char *) (s + count);
12994   p = relplt->relocation;
12995   n = 0;
12996   for (i = 0; i < count; i++, p += bed->s->int_rels_per_ext_rel)
12997     {
12998       size_t len;
12999       bfd_vma addr;
13000 
13001       addr = bed->plt_sym_val (i, plt, p);
13002       if (addr == (bfd_vma) -1)
13003 	continue;
13004 
13005       *s = **p->sym_ptr_ptr;
13006       /* Undefined syms won't have BSF_LOCAL or BSF_GLOBAL set.  Since
13007 	 we are defining a symbol, ensure one of them is set.  */
13008       if ((s->flags & BSF_LOCAL) == 0)
13009 	s->flags |= BSF_GLOBAL;
13010       s->flags |= BSF_SYNTHETIC;
13011       s->section = plt;
13012       s->value = addr - plt->vma;
13013       s->name = names;
13014       s->udata.p = NULL;
13015       len = strlen ((*p->sym_ptr_ptr)->name);
13016       memcpy (names, (*p->sym_ptr_ptr)->name, len);
13017       names += len;
13018       if (p->addend != 0)
13019 	{
13020 	  char buf[30], *a;
13021 
13022 	  memcpy (names, "+0x", sizeof ("+0x") - 1);
13023 	  names += sizeof ("+0x") - 1;
13024 	  bfd_sprintf_vma (abfd, buf, p->addend);
13025 	  for (a = buf; *a == '0'; ++a)
13026 	    ;
13027 	  len = strlen (a);
13028 	  memcpy (names, a, len);
13029 	  names += len;
13030 	}
13031       memcpy (names, "@plt", sizeof ("@plt"));
13032       names += sizeof ("@plt");
13033       ++s, ++n;
13034     }
13035 
13036   return n;
13037 }
13038 
13039 /* It is only used by x86-64 so far.
13040    ??? This repeats *COM* id of zero.  sec->id is supposed to be unique,
13041    but current usage would allow all of _bfd_std_section to be zero.  */
13042 static const asymbol lcomm_sym
13043   = GLOBAL_SYM_INIT ("LARGE_COMMON", &_bfd_elf_large_com_section);
13044 asection _bfd_elf_large_com_section
13045   = BFD_FAKE_SECTION (_bfd_elf_large_com_section, &lcomm_sym,
13046 		      "LARGE_COMMON", 0, SEC_IS_COMMON);
13047 
13048 bool
13049 _bfd_elf_final_write_processing (bfd *abfd)
13050 {
13051   Elf_Internal_Ehdr *i_ehdrp;	/* ELF file header, internal form.  */
13052 
13053   i_ehdrp = elf_elfheader (abfd);
13054 
13055   if (i_ehdrp->e_ident[EI_OSABI] == ELFOSABI_NONE)
13056     i_ehdrp->e_ident[EI_OSABI] = get_elf_backend_data (abfd)->elf_osabi;
13057 
13058   /* Set the osabi field to ELFOSABI_GNU if the binary contains
13059      SHF_GNU_MBIND or SHF_GNU_RETAIN sections or symbols of STT_GNU_IFUNC type
13060      or STB_GNU_UNIQUE binding.  */
13061   if (elf_tdata (abfd)->has_gnu_osabi != 0)
13062     {
13063       if (i_ehdrp->e_ident[EI_OSABI] == ELFOSABI_NONE)
13064 	i_ehdrp->e_ident[EI_OSABI] = ELFOSABI_GNU;
13065       else if (i_ehdrp->e_ident[EI_OSABI] != ELFOSABI_GNU
13066 	       && i_ehdrp->e_ident[EI_OSABI] != ELFOSABI_FREEBSD)
13067 	{
13068 	  if (elf_tdata (abfd)->has_gnu_osabi & elf_gnu_osabi_mbind)
13069 	    _bfd_error_handler (_("GNU_MBIND section is supported only by GNU "
13070 				  "and FreeBSD targets"));
13071 	  if (elf_tdata (abfd)->has_gnu_osabi & elf_gnu_osabi_ifunc)
13072 	    _bfd_error_handler (_("symbol type STT_GNU_IFUNC is supported "
13073 				  "only by GNU and FreeBSD targets"));
13074 	  if (elf_tdata (abfd)->has_gnu_osabi & elf_gnu_osabi_unique)
13075 	    _bfd_error_handler (_("symbol binding STB_GNU_UNIQUE is supported "
13076 				  "only by GNU and FreeBSD targets"));
13077 	  if (elf_tdata (abfd)->has_gnu_osabi & elf_gnu_osabi_retain)
13078 	    _bfd_error_handler (_("GNU_RETAIN section is supported "
13079 				  "only by GNU and FreeBSD targets"));
13080 	  bfd_set_error (bfd_error_sorry);
13081 	  return false;
13082 	}
13083     }
13084   return true;
13085 }
13086 
13087 
13088 /* Return TRUE for ELF symbol types that represent functions.
13089    This is the default version of this function, which is sufficient for
13090    most targets.  It returns true if TYPE is STT_FUNC or STT_GNU_IFUNC.  */
13091 
13092 bool
13093 _bfd_elf_is_function_type (unsigned int type)
13094 {
13095   return (type == STT_FUNC
13096 	  || type == STT_GNU_IFUNC);
13097 }
13098 
13099 /* If the ELF symbol SYM might be a function in SEC, return the
13100    function size and set *CODE_OFF to the function's entry point,
13101    otherwise return zero.  */
13102 
13103 bfd_size_type
13104 _bfd_elf_maybe_function_sym (const asymbol *sym, asection *sec,
13105 			     bfd_vma *code_off)
13106 {
13107   bfd_size_type size;
13108   elf_symbol_type * elf_sym = (elf_symbol_type *) sym;
13109 
13110   if ((sym->flags & (BSF_SECTION_SYM | BSF_FILE | BSF_OBJECT
13111 		     | BSF_THREAD_LOCAL | BSF_RELC | BSF_SRELC)) != 0
13112       || sym->section != sec)
13113     return 0;
13114 
13115   size = (sym->flags & BSF_SYNTHETIC) ? 0 : elf_sym->internal_elf_sym.st_size;
13116 
13117   /* In theory we should check that the symbol's type satisfies
13118      _bfd_elf_is_function_type(), but there are some function-like
13119      symbols which would fail this test.  (eg _start).  Instead
13120      we check for hidden, local, notype symbols with zero size.
13121      This type of symbol is generated by the annobin plugin for gcc
13122      and clang, and should not be considered to be a function symbol.  */
13123   if (size == 0
13124       && ((sym->flags & (BSF_SYNTHETIC | BSF_LOCAL)) == BSF_LOCAL)
13125       && ELF_ST_TYPE (elf_sym->internal_elf_sym.st_info) == STT_NOTYPE
13126       && ELF_ST_VISIBILITY (elf_sym->internal_elf_sym.st_other) == STV_HIDDEN)
13127     return 0;
13128 
13129   *code_off = sym->value;
13130   /* Do not return 0 for the function's size.  */
13131   return size ? size : 1;
13132 }
13133 
13134 /* Set to non-zero to enable some debug messages.  */
13135 #define DEBUG_SECONDARY_RELOCS	 0
13136 
13137 /* An internal-to-the-bfd-library only section type
13138    used to indicate a cached secondary reloc section.  */
13139 #define SHT_SECONDARY_RELOC	 (SHT_LOOS + SHT_RELA)
13140 
13141 /* Create a BFD section to hold a secondary reloc section.  */
13142 
13143 bool
13144 _bfd_elf_init_secondary_reloc_section (bfd * abfd,
13145 				       Elf_Internal_Shdr *hdr,
13146 				       const char * name,
13147 				       unsigned int shindex)
13148 {
13149   /* We only support RELA secondary relocs.  */
13150   if (hdr->sh_type != SHT_RELA)
13151     return false;
13152 
13153 #if DEBUG_SECONDARY_RELOCS
13154   fprintf (stderr, "secondary reloc section %s encountered\n", name);
13155 #endif
13156   hdr->sh_type = SHT_SECONDARY_RELOC;
13157   return _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
13158 }
13159 
13160 /* Read in any secondary relocs associated with SEC.  */
13161 
13162 bool
13163 _bfd_elf_slurp_secondary_reloc_section (bfd *       abfd,
13164 					asection *  sec,
13165 					asymbol **  symbols,
13166 					bool dynamic)
13167 {
13168   const struct elf_backend_data * const ebd = get_elf_backend_data (abfd);
13169   asection * relsec;
13170   bool result = true;
13171   bfd_vma (*r_sym) (bfd_vma);
13172   ufile_ptr filesize;
13173 
13174 #if BFD_DEFAULT_TARGET_SIZE > 32
13175   if (bfd_arch_bits_per_address (abfd) != 32)
13176     r_sym = elf64_r_sym;
13177   else
13178 #endif
13179     r_sym = elf32_r_sym;
13180 
13181   if (!elf_section_data (sec)->has_secondary_relocs)
13182     return true;
13183 
13184   /* Discover if there are any secondary reloc sections
13185      associated with SEC.  */
13186   filesize = bfd_get_file_size (abfd);
13187   for (relsec = abfd->sections; relsec != NULL; relsec = relsec->next)
13188     {
13189       Elf_Internal_Shdr * hdr = & elf_section_data (relsec)->this_hdr;
13190 
13191       if (hdr->sh_type == SHT_SECONDARY_RELOC
13192 	  && hdr->sh_info == (unsigned) elf_section_data (sec)->this_idx
13193 	  && (hdr->sh_entsize == ebd->s->sizeof_rel
13194 	      || hdr->sh_entsize == ebd->s->sizeof_rela))
13195 	{
13196 	  bfd_byte * native_relocs;
13197 	  bfd_byte * native_reloc;
13198 	  arelent * internal_relocs;
13199 	  arelent * internal_reloc;
13200 	  size_t i;
13201 	  unsigned int entsize;
13202 	  unsigned int symcount;
13203 	  bfd_size_type reloc_count;
13204 	  size_t amt;
13205 
13206 	  if (ebd->elf_info_to_howto == NULL)
13207 	    return false;
13208 
13209 #if DEBUG_SECONDARY_RELOCS
13210 	  fprintf (stderr, "read secondary relocs for %s from %s\n",
13211 		   sec->name, relsec->name);
13212 #endif
13213 	  entsize = hdr->sh_entsize;
13214 
13215 	  if (filesize != 0
13216 	      && ((ufile_ptr) hdr->sh_offset > filesize
13217 		  || hdr->sh_size > filesize - hdr->sh_offset))
13218 	    {
13219 	      bfd_set_error (bfd_error_file_truncated);
13220 	      result = false;
13221 	      continue;
13222 	    }
13223 
13224 	  native_relocs = bfd_malloc (hdr->sh_size);
13225 	  if (native_relocs == NULL)
13226 	    {
13227 	      result = false;
13228 	      continue;
13229 	    }
13230 
13231 	  reloc_count = NUM_SHDR_ENTRIES (hdr);
13232 	  if (_bfd_mul_overflow (reloc_count, sizeof (arelent), & amt))
13233 	    {
13234 	      free (native_relocs);
13235 	      bfd_set_error (bfd_error_file_too_big);
13236 	      result = false;
13237 	      continue;
13238 	    }
13239 
13240 	  internal_relocs = (arelent *) bfd_alloc (abfd, amt);
13241 	  if (internal_relocs == NULL)
13242 	    {
13243 	      free (native_relocs);
13244 	      result = false;
13245 	      continue;
13246 	    }
13247 
13248 	  if (bfd_seek (abfd, hdr->sh_offset, SEEK_SET) != 0
13249 	      || (bfd_bread (native_relocs, hdr->sh_size, abfd)
13250 		  != hdr->sh_size))
13251 	    {
13252 	      free (native_relocs);
13253 	      /* The internal_relocs will be freed when
13254 		 the memory for the bfd is released.  */
13255 	      result = false;
13256 	      continue;
13257 	    }
13258 
13259 	  if (dynamic)
13260 	    symcount = bfd_get_dynamic_symcount (abfd);
13261 	  else
13262 	    symcount = bfd_get_symcount (abfd);
13263 
13264 	  for (i = 0, internal_reloc = internal_relocs,
13265 		 native_reloc = native_relocs;
13266 	       i < reloc_count;
13267 	       i++, internal_reloc++, native_reloc += entsize)
13268 	    {
13269 	      bool res;
13270 	      Elf_Internal_Rela rela;
13271 
13272 	      if (entsize == ebd->s->sizeof_rel)
13273 		ebd->s->swap_reloc_in (abfd, native_reloc, & rela);
13274 	      else /* entsize == ebd->s->sizeof_rela */
13275 		ebd->s->swap_reloca_in (abfd, native_reloc, & rela);
13276 
13277 	      /* The address of an ELF reloc is section relative for an object
13278 		 file, and absolute for an executable file or shared library.
13279 		 The address of a normal BFD reloc is always section relative,
13280 		 and the address of a dynamic reloc is absolute..  */
13281 	      if ((abfd->flags & (EXEC_P | DYNAMIC)) == 0)
13282 		internal_reloc->address = rela.r_offset;
13283 	      else
13284 		internal_reloc->address = rela.r_offset - sec->vma;
13285 
13286 	      if (r_sym (rela.r_info) == STN_UNDEF)
13287 		{
13288 		  /* FIXME: This and the error case below mean that we
13289 		     have a symbol on relocs that is not elf_symbol_type.  */
13290 		  internal_reloc->sym_ptr_ptr =
13291 		    bfd_abs_section_ptr->symbol_ptr_ptr;
13292 		}
13293 	      else if (r_sym (rela.r_info) > symcount)
13294 		{
13295 		  _bfd_error_handler
13296 		    /* xgettext:c-format */
13297 		    (_("%pB(%pA): relocation %zu has invalid symbol index %lu"),
13298 		     abfd, sec, i, (long) r_sym (rela.r_info));
13299 		  bfd_set_error (bfd_error_bad_value);
13300 		  internal_reloc->sym_ptr_ptr =
13301 		    bfd_abs_section_ptr->symbol_ptr_ptr;
13302 		  result = false;
13303 		}
13304 	      else
13305 		{
13306 		  asymbol **ps;
13307 
13308 		  ps = symbols + r_sym (rela.r_info) - 1;
13309 		  internal_reloc->sym_ptr_ptr = ps;
13310 		  /* Make sure that this symbol is not removed by strip.  */
13311 		  (*ps)->flags |= BSF_KEEP;
13312 		}
13313 
13314 	      internal_reloc->addend = rela.r_addend;
13315 
13316 	      res = ebd->elf_info_to_howto (abfd, internal_reloc, & rela);
13317 	      if (! res || internal_reloc->howto == NULL)
13318 		{
13319 #if DEBUG_SECONDARY_RELOCS
13320 		  fprintf (stderr,
13321 			   "there is no howto associated with reloc %lx\n",
13322 			   rela.r_info);
13323 #endif
13324 		  result = false;
13325 		}
13326 	    }
13327 
13328 	  free (native_relocs);
13329 	  /* Store the internal relocs.  */
13330 	  elf_section_data (relsec)->sec_info = internal_relocs;
13331 	}
13332     }
13333 
13334   return result;
13335 }
13336 
13337 /* Set the ELF section header fields of an output secondary reloc section.  */
13338 
13339 bool
13340 _bfd_elf_copy_special_section_fields (const bfd *ibfd ATTRIBUTE_UNUSED,
13341 				      bfd *obfd ATTRIBUTE_UNUSED,
13342 				      const Elf_Internal_Shdr *isection,
13343 				      Elf_Internal_Shdr *osection)
13344 {
13345   asection * isec;
13346   asection * osec;
13347   struct bfd_elf_section_data * esd;
13348 
13349   if (isection == NULL)
13350     return false;
13351 
13352   if (isection->sh_type != SHT_SECONDARY_RELOC)
13353     return true;
13354 
13355   isec = isection->bfd_section;
13356   if (isec == NULL)
13357     return false;
13358 
13359   osec = osection->bfd_section;
13360   if (osec == NULL)
13361     return false;
13362 
13363   esd = elf_section_data (osec);
13364   BFD_ASSERT (esd->sec_info == NULL);
13365   esd->sec_info = elf_section_data (isec)->sec_info;
13366   osection->sh_type = SHT_RELA;
13367   osection->sh_link = elf_onesymtab (obfd);
13368   if (osection->sh_link == 0)
13369     {
13370       /* There is no symbol table - we are hosed...  */
13371       _bfd_error_handler
13372 	/* xgettext:c-format */
13373 	(_("%pB(%pA): link section cannot be set"
13374 	   " because the output file does not have a symbol table"),
13375 	obfd, osec);
13376       bfd_set_error (bfd_error_bad_value);
13377       return false;
13378     }
13379 
13380   /* Find the output section that corresponds to the isection's
13381      sh_info link.  */
13382   if (isection->sh_info == 0
13383       || isection->sh_info >= elf_numsections (ibfd))
13384     {
13385       _bfd_error_handler
13386 	/* xgettext:c-format */
13387 	(_("%pB(%pA): info section index is invalid"),
13388 	obfd, osec);
13389       bfd_set_error (bfd_error_bad_value);
13390       return false;
13391     }
13392 
13393   isection = elf_elfsections (ibfd)[isection->sh_info];
13394 
13395   if (isection == NULL
13396       || isection->bfd_section == NULL
13397       || isection->bfd_section->output_section == NULL)
13398     {
13399       _bfd_error_handler
13400 	/* xgettext:c-format */
13401 	(_("%pB(%pA): info section index cannot be set"
13402 	   " because the section is not in the output"),
13403 	obfd, osec);
13404       bfd_set_error (bfd_error_bad_value);
13405       return false;
13406     }
13407 
13408   esd = elf_section_data (isection->bfd_section->output_section);
13409   BFD_ASSERT (esd != NULL);
13410   osection->sh_info = esd->this_idx;
13411   esd->has_secondary_relocs = true;
13412 #if DEBUG_SECONDARY_RELOCS
13413   fprintf (stderr, "update header of %s, sh_link = %u, sh_info = %u\n",
13414 	   osec->name, osection->sh_link, osection->sh_info);
13415   fprintf (stderr, "mark section %s as having secondary relocs\n",
13416 	   bfd_section_name (isection->bfd_section->output_section));
13417 #endif
13418 
13419   return true;
13420 }
13421 
13422 /* Write out a secondary reloc section.
13423 
13424    FIXME: Currently this function can result in a serious performance penalty
13425    for files with secondary relocs and lots of sections.  The proper way to
13426    fix this is for _bfd_elf_copy_special_section_fields() to chain secondary
13427    relocs together and then to have this function just walk that chain.  */
13428 
13429 bool
13430 _bfd_elf_write_secondary_reloc_section (bfd *abfd, asection *sec)
13431 {
13432   const struct elf_backend_data * const ebd = get_elf_backend_data (abfd);
13433   bfd_vma addr_offset;
13434   asection * relsec;
13435   bfd_vma (*r_info) (bfd_vma, bfd_vma);
13436   bool result = true;
13437 
13438   if (sec == NULL)
13439     return false;
13440 
13441 #if BFD_DEFAULT_TARGET_SIZE > 32
13442   if (bfd_arch_bits_per_address (abfd) != 32)
13443     r_info = elf64_r_info;
13444   else
13445 #endif
13446     r_info = elf32_r_info;
13447 
13448   /* The address of an ELF reloc is section relative for an object
13449      file, and absolute for an executable file or shared library.
13450      The address of a BFD reloc is always section relative.  */
13451   addr_offset = 0;
13452   if ((abfd->flags & (EXEC_P | DYNAMIC)) != 0)
13453     addr_offset = sec->vma;
13454 
13455   /* Discover if there are any secondary reloc sections
13456      associated with SEC.  */
13457   for (relsec = abfd->sections; relsec != NULL; relsec = relsec->next)
13458     {
13459       const struct bfd_elf_section_data * const esd = elf_section_data (relsec);
13460       Elf_Internal_Shdr * const hdr = (Elf_Internal_Shdr *) & esd->this_hdr;
13461 
13462       if (hdr->sh_type == SHT_RELA
13463 	  && hdr->sh_info == (unsigned) elf_section_data (sec)->this_idx)
13464 	{
13465 	  asymbol *    last_sym;
13466 	  int          last_sym_idx;
13467 	  size_t       reloc_count;
13468 	  size_t       idx;
13469 	  bfd_size_type entsize;
13470 	  arelent *    src_irel;
13471 	  bfd_byte *   dst_rela;
13472 
13473 	  if (hdr->contents != NULL)
13474 	    {
13475 	      _bfd_error_handler
13476 		/* xgettext:c-format */
13477 		(_("%pB(%pA): error: secondary reloc section processed twice"),
13478 		 abfd, relsec);
13479 	      bfd_set_error (bfd_error_bad_value);
13480 	      result = false;
13481 	      continue;
13482 	    }
13483 
13484 	  entsize = hdr->sh_entsize;
13485 	  if (entsize == 0)
13486 	    {
13487 	      _bfd_error_handler
13488 		/* xgettext:c-format */
13489 		(_("%pB(%pA): error: secondary reloc section"
13490 		   " has zero sized entries"),
13491 		 abfd, relsec);
13492 	      bfd_set_error (bfd_error_bad_value);
13493 	      result = false;
13494 	      continue;
13495 	    }
13496 	  else if (entsize != ebd->s->sizeof_rel
13497 		   && entsize != ebd->s->sizeof_rela)
13498 	    {
13499 	      _bfd_error_handler
13500 		/* xgettext:c-format */
13501 		(_("%pB(%pA): error: secondary reloc section"
13502 		   " has non-standard sized entries"),
13503 		 abfd, relsec);
13504 	      bfd_set_error (bfd_error_bad_value);
13505 	      result = false;
13506 	      continue;
13507 	    }
13508 
13509 	  reloc_count = hdr->sh_size / entsize;
13510 	  hdr->sh_size = entsize * reloc_count;
13511 	  if (reloc_count == 0)
13512 	    {
13513 	      _bfd_error_handler
13514 		/* xgettext:c-format */
13515 		(_("%pB(%pA): error: secondary reloc section is empty!"),
13516 		 abfd, relsec);
13517 	      bfd_set_error (bfd_error_bad_value);
13518 	      result = false;
13519 	      continue;
13520 	    }
13521 
13522 	  hdr->contents = bfd_alloc (abfd, hdr->sh_size);
13523 	  if (hdr->contents == NULL)
13524 	    continue;
13525 
13526 #if DEBUG_SECONDARY_RELOCS
13527 	  fprintf (stderr, "write %u secondary relocs for %s from %s\n",
13528 		   reloc_count, sec->name, relsec->name);
13529 #endif
13530 	  last_sym = NULL;
13531 	  last_sym_idx = 0;
13532 	  dst_rela = hdr->contents;
13533 	  src_irel = (arelent *) esd->sec_info;
13534 	  if (src_irel == NULL)
13535 	    {
13536 	      _bfd_error_handler
13537 		/* xgettext:c-format */
13538 		(_("%pB(%pA): error: internal relocs missing"
13539 		   " for secondary reloc section"),
13540 		 abfd, relsec);
13541 	      bfd_set_error (bfd_error_bad_value);
13542 	      result = false;
13543 	      continue;
13544 	    }
13545 
13546 	  for (idx = 0; idx < reloc_count; idx++, dst_rela += entsize)
13547 	    {
13548 	      Elf_Internal_Rela src_rela;
13549 	      arelent *ptr;
13550 	      asymbol *sym;
13551 	      int n;
13552 
13553 	      ptr = src_irel + idx;
13554 	      if (ptr == NULL)
13555 		{
13556 		  _bfd_error_handler
13557 		    /* xgettext:c-format */
13558 		    (_("%pB(%pA): error: reloc table entry %zu is empty"),
13559 		     abfd, relsec, idx);
13560 		  bfd_set_error (bfd_error_bad_value);
13561 		  result = false;
13562 		  break;
13563 		}
13564 
13565 	      if (ptr->sym_ptr_ptr == NULL)
13566 		{
13567 		  /* FIXME: Is this an error ? */
13568 		  n = 0;
13569 		}
13570 	      else
13571 		{
13572 		  sym = *ptr->sym_ptr_ptr;
13573 
13574 		  if (sym == last_sym)
13575 		    n = last_sym_idx;
13576 		  else
13577 		    {
13578 		      n = _bfd_elf_symbol_from_bfd_symbol (abfd, & sym);
13579 		      if (n < 0)
13580 			{
13581 			  _bfd_error_handler
13582 			    /* xgettext:c-format */
13583 			    (_("%pB(%pA): error: secondary reloc %zu"
13584 			       " references a missing symbol"),
13585 			     abfd, relsec, idx);
13586 			  bfd_set_error (bfd_error_bad_value);
13587 			  result = false;
13588 			  n = 0;
13589 			}
13590 
13591 		      last_sym = sym;
13592 		      last_sym_idx = n;
13593 		    }
13594 
13595 		  if (sym->the_bfd != NULL
13596 		      && sym->the_bfd->xvec != abfd->xvec
13597 		      && ! _bfd_elf_validate_reloc (abfd, ptr))
13598 		    {
13599 		      _bfd_error_handler
13600 			/* xgettext:c-format */
13601 			(_("%pB(%pA): error: secondary reloc %zu"
13602 			   " references a deleted symbol"),
13603 			 abfd, relsec, idx);
13604 		      bfd_set_error (bfd_error_bad_value);
13605 		      result = false;
13606 		      n = 0;
13607 		    }
13608 		}
13609 
13610 	      src_rela.r_offset = ptr->address + addr_offset;
13611 	      if (ptr->howto == NULL)
13612 		{
13613 		  _bfd_error_handler
13614 		    /* xgettext:c-format */
13615 		    (_("%pB(%pA): error: secondary reloc %zu"
13616 		       " is of an unknown type"),
13617 		     abfd, relsec, idx);
13618 		  bfd_set_error (bfd_error_bad_value);
13619 		  result = false;
13620 		  src_rela.r_info = r_info (0, 0);
13621 		}
13622 	      else
13623 		src_rela.r_info = r_info (n, ptr->howto->type);
13624 	      src_rela.r_addend = ptr->addend;
13625 
13626 	      if (entsize == ebd->s->sizeof_rel)
13627 		ebd->s->swap_reloc_out (abfd, &src_rela, dst_rela);
13628 	      else /* entsize == ebd->s->sizeof_rela */
13629 		ebd->s->swap_reloca_out (abfd, &src_rela, dst_rela);
13630 	    }
13631 	}
13632     }
13633 
13634   return result;
13635 }
13636