xref: /netbsd-src/external/gpl3/gdb/dist/bfd/elf.c (revision 800f65cfd08922525602506b0895f419b45e9f33)
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_sparc:
11194       switch (note->type)
11195 	{
11196 	case NT_NETBSDCORE_FIRSTMACH+0:
11197 	  return elfcore_make_note_pseudosection (abfd, ".reg", note);
11198 
11199 	case NT_NETBSDCORE_FIRSTMACH+2:
11200 	  return elfcore_make_note_pseudosection (abfd, ".reg2", note);
11201 
11202 	default:
11203 	  return true;
11204 	}
11205 
11206       /* On SuperH, PT_GETREGS == mach+3 and PT_GETFPREGS == mach+5.
11207 	 There's also old PT___GETREGS40 == mach + 1 for old reg
11208 	 structure which lacks GBR.  */
11209 
11210     case bfd_arch_sh:
11211       switch (note->type)
11212 	{
11213 	case NT_NETBSDCORE_FIRSTMACH+3:
11214 	  return elfcore_make_note_pseudosection (abfd, ".reg", note);
11215 
11216 	case NT_NETBSDCORE_FIRSTMACH+5:
11217 	  return elfcore_make_note_pseudosection (abfd, ".reg2", note);
11218 
11219 	default:
11220 	  return true;
11221 	}
11222 
11223       /* On all other arch's, PT_GETREGS == mach+1 and
11224 	 PT_GETFPREGS == mach+3.  */
11225 
11226     default:
11227       switch (note->type)
11228 	{
11229 	case NT_NETBSDCORE_FIRSTMACH+1:
11230 	  return elfcore_make_note_pseudosection (abfd, ".reg", note);
11231 
11232 	case NT_NETBSDCORE_FIRSTMACH+3:
11233 	  return elfcore_make_note_pseudosection (abfd, ".reg2", note);
11234 
11235 	default:
11236 	  return true;
11237 	}
11238     }
11239     /* NOTREACHED */
11240 }
11241 
11242 static bool
11243 elfcore_grok_openbsd_procinfo (bfd *abfd, Elf_Internal_Note *note)
11244 {
11245   if (note->descsz <= 0x48 + 31)
11246     return false;
11247 
11248   /* Signal number at offset 0x08. */
11249   elf_tdata (abfd)->core->signal
11250     = bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + 0x08);
11251 
11252   /* Process ID at offset 0x20. */
11253   elf_tdata (abfd)->core->pid
11254     = bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + 0x20);
11255 
11256   /* Command name at 0x48 (max 32 bytes, including nul). */
11257   elf_tdata (abfd)->core->command
11258     = _bfd_elfcore_strndup (abfd, note->descdata + 0x48, 31);
11259 
11260   return true;
11261 }
11262 
11263 /* Processes Solaris's process status note.
11264    sig_off ~ offsetof(prstatus_t, pr_cursig)
11265    pid_off ~ offsetof(prstatus_t, pr_pid)
11266    lwpid_off ~ offsetof(prstatus_t, pr_who)
11267    gregset_size ~ sizeof(gregset_t)
11268    gregset_offset ~ offsetof(prstatus_t, pr_reg)  */
11269 
11270 static bool
11271 elfcore_grok_solaris_prstatus (bfd *abfd, Elf_Internal_Note* note, int sig_off,
11272 			       int pid_off, int lwpid_off, size_t gregset_size,
11273 			       size_t gregset_offset)
11274 {
11275   asection *sect = NULL;
11276   elf_tdata (abfd)->core->signal
11277     = bfd_get_16 (abfd, note->descdata + sig_off);
11278   elf_tdata (abfd)->core->pid
11279     = bfd_get_32 (abfd, note->descdata + pid_off);
11280   elf_tdata (abfd)->core->lwpid
11281     = bfd_get_32 (abfd, note->descdata + lwpid_off);
11282 
11283   sect = bfd_get_section_by_name (abfd, ".reg");
11284   if (sect != NULL)
11285     sect->size = gregset_size;
11286 
11287   return _bfd_elfcore_make_pseudosection (abfd, ".reg", gregset_size,
11288 					  note->descpos + gregset_offset);
11289 }
11290 
11291 /* Gets program and arguments from a core.
11292    prog_off ~ offsetof(prpsinfo | psinfo_t, pr_fname)
11293    comm_off ~ offsetof(prpsinfo | psinfo_t, pr_psargs)  */
11294 
11295 static bool
11296 elfcore_grok_solaris_info(bfd *abfd, Elf_Internal_Note* note,
11297 			  int prog_off, int comm_off)
11298 {
11299   elf_tdata (abfd)->core->program
11300     = _bfd_elfcore_strndup (abfd, note->descdata + prog_off, 16);
11301   elf_tdata (abfd)->core->command
11302     = _bfd_elfcore_strndup (abfd, note->descdata + comm_off, 80);
11303 
11304   return true;
11305 }
11306 
11307 /* Processes Solaris's LWP status note.
11308    gregset_size ~ sizeof(gregset_t)
11309    gregset_off ~ offsetof(lwpstatus_t, pr_reg)
11310    fpregset_size ~ sizeof(fpregset_t)
11311    fpregset_off ~ offsetof(lwpstatus_t, pr_fpreg)  */
11312 
11313 static bool
11314 elfcore_grok_solaris_lwpstatus (bfd *abfd, Elf_Internal_Note* note,
11315 				size_t gregset_size, int gregset_off,
11316 				size_t fpregset_size, int fpregset_off)
11317 {
11318   asection *sect = NULL;
11319   char reg2_section_name[16] = { 0 };
11320 
11321   (void) snprintf (reg2_section_name, 16, "%s/%i", ".reg2",
11322 		   elf_tdata (abfd)->core->lwpid);
11323 
11324   /* offsetof(lwpstatus_t, pr_lwpid) */
11325   elf_tdata (abfd)->core->lwpid
11326     = bfd_get_32 (abfd, note->descdata + 4);
11327   /* offsetof(lwpstatus_t, pr_cursig) */
11328   elf_tdata (abfd)->core->signal
11329     = bfd_get_16 (abfd, note->descdata + 12);
11330 
11331   sect = bfd_get_section_by_name (abfd, ".reg");
11332   if (sect != NULL)
11333     sect->size = gregset_size;
11334   else if (!_bfd_elfcore_make_pseudosection (abfd, ".reg", gregset_size,
11335 					     note->descpos + gregset_off))
11336     return false;
11337 
11338   sect = bfd_get_section_by_name (abfd, reg2_section_name);
11339   if (sect != NULL)
11340     {
11341       sect->size = fpregset_size;
11342       sect->filepos = note->descpos + fpregset_off;
11343       sect->alignment_power = 2;
11344     }
11345   else if (!_bfd_elfcore_make_pseudosection (abfd, ".reg2", fpregset_size,
11346 					     note->descpos + fpregset_off))
11347     return false;
11348 
11349   return true;
11350 }
11351 
11352 static bool
11353 elfcore_grok_solaris_note_impl (bfd *abfd, Elf_Internal_Note *note)
11354 {
11355   if (note == NULL)
11356     return false;
11357 
11358   /* core files are identified as 32- or 64-bit, SPARC or x86,
11359      by the size of the descsz which matches the sizeof()
11360      the type appropriate for that note type (e.g., prstatus_t for
11361      SOLARIS_NT_PRSTATUS) for the corresponding architecture
11362      on Solaris. The core file bitness may differ from the bitness of
11363      gdb itself, so fixed values are used instead of sizeof().
11364      Appropriate fixed offsets are also used to obtain data from
11365      the note.  */
11366 
11367   switch ((int) note->type)
11368     {
11369     case SOLARIS_NT_PRSTATUS:
11370       switch (note->descsz)
11371 	{
11372 	case 508: /* sizeof(prstatus_t) SPARC 32-bit */
11373 	  return elfcore_grok_solaris_prstatus(abfd, note,
11374 					       136, 216, 308, 152, 356);
11375 	case 904: /* sizeof(prstatus_t) SPARC 64-bit */
11376 	  return elfcore_grok_solaris_prstatus(abfd, note,
11377 					       264, 360, 520, 304, 600);
11378 	case 432: /* sizeof(prstatus_t) Intel 32-bit */
11379 	  return elfcore_grok_solaris_prstatus(abfd, note,
11380 					       136, 216, 308, 76, 356);
11381 	case 824: /* sizeof(prstatus_t) Intel 64-bit */
11382 	  return elfcore_grok_solaris_prstatus(abfd, note,
11383 					       264, 360, 520, 224, 600);
11384 	default:
11385 	  return true;
11386 	}
11387 
11388     case SOLARIS_NT_PSINFO:
11389     case SOLARIS_NT_PRPSINFO:
11390       switch (note->descsz)
11391 	{
11392 	case 260: /* sizeof(prpsinfo_t) SPARC and Intel 32-bit */
11393 	  return elfcore_grok_solaris_info(abfd, note, 84, 100);
11394 	case 328: /* sizeof(prpsinfo_t) SPARC and Intel 64-bit */
11395 	  return elfcore_grok_solaris_info(abfd, note, 120, 136);
11396 	case 360: /* sizeof(psinfo_t) SPARC and Intel 32-bit */
11397 	  return elfcore_grok_solaris_info(abfd, note, 88, 104);
11398 	case 440: /* sizeof(psinfo_t) SPARC and Intel 64-bit */
11399 	  return elfcore_grok_solaris_info(abfd, note, 136, 152);
11400 	default:
11401 	  return true;
11402 	}
11403 
11404     case SOLARIS_NT_LWPSTATUS:
11405       switch (note->descsz)
11406 	{
11407 	case 896: /* sizeof(lwpstatus_t) SPARC 32-bit */
11408 	  return elfcore_grok_solaris_lwpstatus(abfd, note,
11409 						152, 344, 400, 496);
11410 	case 1392: /* sizeof(lwpstatus_t) SPARC 64-bit */
11411 	  return elfcore_grok_solaris_lwpstatus(abfd, note,
11412 						304, 544, 544, 848);
11413 	case 800: /* sizeof(lwpstatus_t) Intel 32-bit */
11414 	  return elfcore_grok_solaris_lwpstatus(abfd, note,
11415 						76, 344, 380, 420);
11416 	case 1296: /* sizeof(lwpstatus_t) Intel 64-bit */
11417 	  return elfcore_grok_solaris_lwpstatus(abfd, note,
11418 						224, 544, 528, 768);
11419 	default:
11420 	  return true;
11421 	}
11422 
11423     case SOLARIS_NT_LWPSINFO:
11424       /* sizeof(lwpsinfo_t) on 32- and 64-bit, respectively */
11425       if (note->descsz == 128 || note->descsz == 152)
11426 	elf_tdata (abfd)->core->lwpid =
11427 	  bfd_get_32 (abfd, note->descdata + 4);
11428       break;
11429 
11430     default:
11431       break;
11432     }
11433 
11434   return true;
11435 }
11436 
11437 /* For name starting with "CORE" this may be either a Solaris
11438    core file or a gdb-generated core file.  Do Solaris-specific
11439    processing on selected note types first with
11440    elfcore_grok_solaris_note(), then process the note
11441    in elfcore_grok_note().  */
11442 
11443 static bool
11444 elfcore_grok_solaris_note (bfd *abfd, Elf_Internal_Note *note)
11445 {
11446   if (!elfcore_grok_solaris_note_impl (abfd, note))
11447     return false;
11448 
11449   return elfcore_grok_note (abfd, note);
11450 }
11451 
11452 static bool
11453 elfcore_grok_openbsd_note (bfd *abfd, Elf_Internal_Note *note)
11454 {
11455   if (note->type == NT_OPENBSD_PROCINFO)
11456     return elfcore_grok_openbsd_procinfo (abfd, note);
11457 
11458   if (note->type == NT_OPENBSD_REGS)
11459     return elfcore_make_note_pseudosection (abfd, ".reg", note);
11460 
11461   if (note->type == NT_OPENBSD_FPREGS)
11462     return elfcore_make_note_pseudosection (abfd, ".reg2", note);
11463 
11464   if (note->type == NT_OPENBSD_XFPREGS)
11465     return elfcore_make_note_pseudosection (abfd, ".reg-xfp", note);
11466 
11467   if (note->type == NT_OPENBSD_AUXV)
11468     return elfcore_make_auxv_note_section (abfd, note, 0);
11469 
11470   if (note->type == NT_OPENBSD_WCOOKIE)
11471     {
11472       asection *sect = bfd_make_section_anyway_with_flags (abfd, ".wcookie",
11473 							   SEC_HAS_CONTENTS);
11474 
11475       if (sect == NULL)
11476 	return false;
11477       sect->size = note->descsz;
11478       sect->filepos = note->descpos;
11479       sect->alignment_power = 1 + bfd_get_arch_size (abfd) / 32;
11480 
11481       return true;
11482     }
11483 
11484   return true;
11485 }
11486 
11487 static bool
11488 elfcore_grok_nto_status (bfd *abfd, Elf_Internal_Note *note, long *tid)
11489 {
11490   void *ddata = note->descdata;
11491   char buf[100];
11492   char *name;
11493   asection *sect;
11494   short sig;
11495   unsigned flags;
11496 
11497   if (note->descsz < 16)
11498     return false;
11499 
11500   /* nto_procfs_status 'pid' field is at offset 0.  */
11501   elf_tdata (abfd)->core->pid = bfd_get_32 (abfd, (bfd_byte *) ddata);
11502 
11503   /* nto_procfs_status 'tid' field is at offset 4.  Pass it back.  */
11504   *tid = bfd_get_32 (abfd, (bfd_byte *) ddata + 4);
11505 
11506   /* nto_procfs_status 'flags' field is at offset 8.  */
11507   flags = bfd_get_32 (abfd, (bfd_byte *) ddata + 8);
11508 
11509   /* nto_procfs_status 'what' field is at offset 14.  */
11510   if ((sig = bfd_get_16 (abfd, (bfd_byte *) ddata + 14)) > 0)
11511     {
11512       elf_tdata (abfd)->core->signal = sig;
11513       elf_tdata (abfd)->core->lwpid = *tid;
11514     }
11515 
11516   /* _DEBUG_FLAG_CURTID (current thread) is 0x80.  Some cores
11517      do not come from signals so we make sure we set the current
11518      thread just in case.  */
11519   if (flags & 0x00000080)
11520     elf_tdata (abfd)->core->lwpid = *tid;
11521 
11522   /* Make a ".qnx_core_status/%d" section.  */
11523   sprintf (buf, ".qnx_core_status/%ld", *tid);
11524 
11525   name = (char *) bfd_alloc (abfd, strlen (buf) + 1);
11526   if (name == NULL)
11527     return false;
11528   strcpy (name, buf);
11529 
11530   sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS);
11531   if (sect == NULL)
11532     return false;
11533 
11534   sect->size		= note->descsz;
11535   sect->filepos		= note->descpos;
11536   sect->alignment_power = 2;
11537 
11538   return (elfcore_maybe_make_sect (abfd, ".qnx_core_status", sect));
11539 }
11540 
11541 static bool
11542 elfcore_grok_nto_regs (bfd *abfd,
11543 		       Elf_Internal_Note *note,
11544 		       long tid,
11545 		       char *base)
11546 {
11547   char buf[100];
11548   char *name;
11549   asection *sect;
11550 
11551   /* Make a "(base)/%d" section.  */
11552   sprintf (buf, "%s/%ld", base, tid);
11553 
11554   name = (char *) bfd_alloc (abfd, strlen (buf) + 1);
11555   if (name == NULL)
11556     return false;
11557   strcpy (name, buf);
11558 
11559   sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS);
11560   if (sect == NULL)
11561     return false;
11562 
11563   sect->size		= note->descsz;
11564   sect->filepos		= note->descpos;
11565   sect->alignment_power = 2;
11566 
11567   /* This is the current thread.  */
11568   if (elf_tdata (abfd)->core->lwpid == tid)
11569     return elfcore_maybe_make_sect (abfd, base, sect);
11570 
11571   return true;
11572 }
11573 
11574 #define BFD_QNT_CORE_INFO	7
11575 #define BFD_QNT_CORE_STATUS	8
11576 #define BFD_QNT_CORE_GREG	9
11577 #define BFD_QNT_CORE_FPREG	10
11578 
11579 static bool
11580 elfcore_grok_nto_note (bfd *abfd, Elf_Internal_Note *note)
11581 {
11582   /* Every GREG section has a STATUS section before it.  Store the
11583      tid from the previous call to pass down to the next gregs
11584      function.  */
11585   static long tid = 1;
11586 
11587   switch (note->type)
11588     {
11589     case BFD_QNT_CORE_INFO:
11590       return elfcore_make_note_pseudosection (abfd, ".qnx_core_info", note);
11591     case BFD_QNT_CORE_STATUS:
11592       return elfcore_grok_nto_status (abfd, note, &tid);
11593     case BFD_QNT_CORE_GREG:
11594       return elfcore_grok_nto_regs (abfd, note, tid, ".reg");
11595     case BFD_QNT_CORE_FPREG:
11596       return elfcore_grok_nto_regs (abfd, note, tid, ".reg2");
11597     default:
11598       return true;
11599     }
11600 }
11601 
11602 static bool
11603 elfcore_grok_spu_note (bfd *abfd, Elf_Internal_Note *note)
11604 {
11605   char *name;
11606   asection *sect;
11607   size_t len;
11608 
11609   /* Use note name as section name.  */
11610   len = note->namesz;
11611   name = (char *) bfd_alloc (abfd, len);
11612   if (name == NULL)
11613     return false;
11614   memcpy (name, note->namedata, len);
11615   name[len - 1] = '\0';
11616 
11617   sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS);
11618   if (sect == NULL)
11619     return false;
11620 
11621   sect->size		= note->descsz;
11622   sect->filepos		= note->descpos;
11623   sect->alignment_power = 1;
11624 
11625   return true;
11626 }
11627 
11628 /* Function: elfcore_write_note
11629 
11630    Inputs:
11631      buffer to hold note, and current size of buffer
11632      name of note
11633      type of note
11634      data for note
11635      size of data for note
11636 
11637    Writes note to end of buffer.  ELF64 notes are written exactly as
11638    for ELF32, despite the current (as of 2006) ELF gabi specifying
11639    that they ought to have 8-byte namesz and descsz field, and have
11640    8-byte alignment.  Other writers, eg. Linux kernel, do the same.
11641 
11642    Return:
11643    Pointer to realloc'd buffer, *BUFSIZ updated.  */
11644 
11645 char *
11646 elfcore_write_note (bfd *abfd,
11647 		    char *buf,
11648 		    int *bufsiz,
11649 		    const char *name,
11650 		    int type,
11651 		    const void *input,
11652 		    int size)
11653 {
11654   Elf_External_Note *xnp;
11655   size_t namesz;
11656   size_t newspace;
11657   char *dest;
11658 
11659   namesz = 0;
11660   if (name != NULL)
11661     namesz = strlen (name) + 1;
11662 
11663   newspace = 12 + ((namesz + 3) & -4) + ((size + 3) & -4);
11664 
11665   buf = (char *) realloc (buf, *bufsiz + newspace);
11666   if (buf == NULL)
11667     return buf;
11668   dest = buf + *bufsiz;
11669   *bufsiz += newspace;
11670   xnp = (Elf_External_Note *) dest;
11671   H_PUT_32 (abfd, namesz, xnp->namesz);
11672   H_PUT_32 (abfd, size, xnp->descsz);
11673   H_PUT_32 (abfd, type, xnp->type);
11674   dest = xnp->name;
11675   if (name != NULL)
11676     {
11677       memcpy (dest, name, namesz);
11678       dest += namesz;
11679       while (namesz & 3)
11680 	{
11681 	  *dest++ = '\0';
11682 	  ++namesz;
11683 	}
11684     }
11685   memcpy (dest, input, size);
11686   dest += size;
11687   while (size & 3)
11688     {
11689       *dest++ = '\0';
11690       ++size;
11691     }
11692   return buf;
11693 }
11694 
11695 /* gcc-8 warns (*) on all the strncpy calls in this function about
11696    possible string truncation.  The "truncation" is not a bug.  We
11697    have an external representation of structs with fields that are not
11698    necessarily NULL terminated and corresponding internal
11699    representation fields that are one larger so that they can always
11700    be NULL terminated.
11701    gcc versions between 4.2 and 4.6 do not allow pragma control of
11702    diagnostics inside functions, giving a hard error if you try to use
11703    the finer control available with later versions.
11704    gcc prior to 4.2 warns about diagnostic push and pop.
11705    gcc-5, gcc-6 and gcc-7 warn that -Wstringop-truncation is unknown,
11706    unless you also add #pragma GCC diagnostic ignored "-Wpragma".
11707    (*) Depending on your system header files!  */
11708 #if GCC_VERSION >= 8000
11709 # pragma GCC diagnostic push
11710 # pragma GCC diagnostic ignored "-Wstringop-truncation"
11711 #endif
11712 char *
11713 elfcore_write_prpsinfo (bfd  *abfd,
11714 			char *buf,
11715 			int  *bufsiz,
11716 			const char *fname,
11717 			const char *psargs)
11718 {
11719   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
11720 
11721   if (bed->elf_backend_write_core_note != NULL)
11722     {
11723       char *ret;
11724       ret = (*bed->elf_backend_write_core_note) (abfd, buf, bufsiz,
11725 						 NT_PRPSINFO, fname, psargs);
11726       if (ret != NULL)
11727 	return ret;
11728     }
11729 
11730 #if defined (HAVE_PRPSINFO_T) || defined (HAVE_PSINFO_T)
11731 # if defined (HAVE_PRPSINFO32_T) || defined (HAVE_PSINFO32_T)
11732   if (bed->s->elfclass == ELFCLASS32)
11733     {
11734 #  if defined (HAVE_PSINFO32_T)
11735       psinfo32_t data;
11736       int note_type = NT_PSINFO;
11737 #  else
11738       prpsinfo32_t data;
11739       int note_type = NT_PRPSINFO;
11740 #  endif
11741 
11742       memset (&data, 0, sizeof (data));
11743       strncpy (data.pr_fname, fname, sizeof (data.pr_fname));
11744       strncpy (data.pr_psargs, psargs, sizeof (data.pr_psargs));
11745       return elfcore_write_note (abfd, buf, bufsiz,
11746 				 "CORE", note_type, &data, sizeof (data));
11747     }
11748   else
11749 # endif
11750     {
11751 # if defined (HAVE_PSINFO_T)
11752       psinfo_t data;
11753       int note_type = NT_PSINFO;
11754 # else
11755       prpsinfo_t data;
11756       int note_type = NT_PRPSINFO;
11757 # endif
11758 
11759       memset (&data, 0, sizeof (data));
11760       strncpy (data.pr_fname, fname, sizeof (data.pr_fname));
11761       strncpy (data.pr_psargs, psargs, sizeof (data.pr_psargs));
11762       return elfcore_write_note (abfd, buf, bufsiz,
11763 				 "CORE", note_type, &data, sizeof (data));
11764     }
11765 #endif	/* PSINFO_T or PRPSINFO_T */
11766 
11767   free (buf);
11768   return NULL;
11769 }
11770 #if GCC_VERSION >= 8000
11771 # pragma GCC diagnostic pop
11772 #endif
11773 
11774 char *
11775 elfcore_write_linux_prpsinfo32
11776   (bfd *abfd, char *buf, int *bufsiz,
11777    const struct elf_internal_linux_prpsinfo *prpsinfo)
11778 {
11779   if (get_elf_backend_data (abfd)->linux_prpsinfo32_ugid16)
11780     {
11781       struct elf_external_linux_prpsinfo32_ugid16 data;
11782 
11783       swap_linux_prpsinfo32_ugid16_out (abfd, prpsinfo, &data);
11784       return elfcore_write_note (abfd, buf, bufsiz, "CORE", NT_PRPSINFO,
11785 				 &data, sizeof (data));
11786     }
11787   else
11788     {
11789       struct elf_external_linux_prpsinfo32_ugid32 data;
11790 
11791       swap_linux_prpsinfo32_ugid32_out (abfd, prpsinfo, &data);
11792       return elfcore_write_note (abfd, buf, bufsiz, "CORE", NT_PRPSINFO,
11793 				 &data, sizeof (data));
11794     }
11795 }
11796 
11797 char *
11798 elfcore_write_linux_prpsinfo64
11799   (bfd *abfd, char *buf, int *bufsiz,
11800    const struct elf_internal_linux_prpsinfo *prpsinfo)
11801 {
11802   if (get_elf_backend_data (abfd)->linux_prpsinfo64_ugid16)
11803     {
11804       struct elf_external_linux_prpsinfo64_ugid16 data;
11805 
11806       swap_linux_prpsinfo64_ugid16_out (abfd, prpsinfo, &data);
11807       return elfcore_write_note (abfd, buf, bufsiz,
11808 				 "CORE", NT_PRPSINFO, &data, sizeof (data));
11809     }
11810   else
11811     {
11812       struct elf_external_linux_prpsinfo64_ugid32 data;
11813 
11814       swap_linux_prpsinfo64_ugid32_out (abfd, prpsinfo, &data);
11815       return elfcore_write_note (abfd, buf, bufsiz,
11816 				 "CORE", NT_PRPSINFO, &data, sizeof (data));
11817     }
11818 }
11819 
11820 char *
11821 elfcore_write_prstatus (bfd *abfd,
11822 			char *buf,
11823 			int *bufsiz,
11824 			long pid,
11825 			int cursig,
11826 			const void *gregs)
11827 {
11828   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
11829 
11830   if (bed->elf_backend_write_core_note != NULL)
11831     {
11832       char *ret;
11833       ret = (*bed->elf_backend_write_core_note) (abfd, buf, bufsiz,
11834 						 NT_PRSTATUS,
11835 						 pid, cursig, gregs);
11836       if (ret != NULL)
11837 	return ret;
11838     }
11839 
11840 #if defined (HAVE_PRSTATUS_T)
11841 #if defined (HAVE_PRSTATUS32_T)
11842   if (bed->s->elfclass == ELFCLASS32)
11843     {
11844       prstatus32_t prstat;
11845 
11846       memset (&prstat, 0, sizeof (prstat));
11847       prstat.pr_pid = pid;
11848       prstat.pr_cursig = cursig;
11849       memcpy (&prstat.pr_reg, gregs, sizeof (prstat.pr_reg));
11850       return elfcore_write_note (abfd, buf, bufsiz, "CORE",
11851 				 NT_PRSTATUS, &prstat, sizeof (prstat));
11852     }
11853   else
11854 #endif
11855     {
11856       prstatus_t prstat;
11857 
11858       memset (&prstat, 0, sizeof (prstat));
11859       prstat.pr_pid = pid;
11860       prstat.pr_cursig = cursig;
11861       memcpy (&prstat.pr_reg, gregs, sizeof (prstat.pr_reg));
11862       return elfcore_write_note (abfd, buf, bufsiz, "CORE",
11863 				 NT_PRSTATUS, &prstat, sizeof (prstat));
11864     }
11865 #endif /* HAVE_PRSTATUS_T */
11866 
11867   free (buf);
11868   return NULL;
11869 }
11870 
11871 #if defined (HAVE_LWPSTATUS_T)
11872 char *
11873 elfcore_write_lwpstatus (bfd *abfd,
11874 			 char *buf,
11875 			 int *bufsiz,
11876 			 long pid,
11877 			 int cursig,
11878 			 const void *gregs)
11879 {
11880   lwpstatus_t lwpstat;
11881   const char *note_name = "CORE";
11882 
11883   memset (&lwpstat, 0, sizeof (lwpstat));
11884   lwpstat.pr_lwpid  = pid >> 16;
11885   lwpstat.pr_cursig = cursig;
11886 #if defined (HAVE_LWPSTATUS_T_PR_REG)
11887   memcpy (&lwpstat.pr_reg, gregs, sizeof (lwpstat.pr_reg));
11888 #elif defined (HAVE_LWPSTATUS_T_PR_CONTEXT)
11889 #if !defined(gregs)
11890   memcpy (lwpstat.pr_context.uc_mcontext.gregs,
11891 	  gregs, sizeof (lwpstat.pr_context.uc_mcontext.gregs));
11892 #else
11893   memcpy (lwpstat.pr_context.uc_mcontext.__gregs,
11894 	  gregs, sizeof (lwpstat.pr_context.uc_mcontext.__gregs));
11895 #endif
11896 #endif
11897   return elfcore_write_note (abfd, buf, bufsiz, note_name,
11898 			     NT_LWPSTATUS, &lwpstat, sizeof (lwpstat));
11899 }
11900 #endif /* HAVE_LWPSTATUS_T */
11901 
11902 #if defined (HAVE_PSTATUS_T)
11903 char *
11904 elfcore_write_pstatus (bfd *abfd,
11905 		       char *buf,
11906 		       int *bufsiz,
11907 		       long pid,
11908 		       int cursig ATTRIBUTE_UNUSED,
11909 		       const void *gregs ATTRIBUTE_UNUSED)
11910 {
11911   const char *note_name = "CORE";
11912 #if defined (HAVE_PSTATUS32_T)
11913   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
11914 
11915   if (bed->s->elfclass == ELFCLASS32)
11916     {
11917       pstatus32_t pstat;
11918 
11919       memset (&pstat, 0, sizeof (pstat));
11920       pstat.pr_pid = pid & 0xffff;
11921       buf = elfcore_write_note (abfd, buf, bufsiz, note_name,
11922 				NT_PSTATUS, &pstat, sizeof (pstat));
11923       return buf;
11924     }
11925   else
11926 #endif
11927     {
11928       pstatus_t pstat;
11929 
11930       memset (&pstat, 0, sizeof (pstat));
11931       pstat.pr_pid = pid & 0xffff;
11932       buf = elfcore_write_note (abfd, buf, bufsiz, note_name,
11933 				NT_PSTATUS, &pstat, sizeof (pstat));
11934       return buf;
11935     }
11936 }
11937 #endif /* HAVE_PSTATUS_T */
11938 
11939 char *
11940 elfcore_write_prfpreg (bfd *abfd,
11941 		       char *buf,
11942 		       int *bufsiz,
11943 		       const void *fpregs,
11944 		       int size)
11945 {
11946   const char *note_name = "CORE";
11947   return elfcore_write_note (abfd, buf, bufsiz,
11948 			     note_name, NT_FPREGSET, fpregs, size);
11949 }
11950 
11951 char *
11952 elfcore_write_prxfpreg (bfd *abfd,
11953 			char *buf,
11954 			int *bufsiz,
11955 			const void *xfpregs,
11956 			int size)
11957 {
11958   char *note_name = "LINUX";
11959   return elfcore_write_note (abfd, buf, bufsiz,
11960 			     note_name, NT_PRXFPREG, xfpregs, size);
11961 }
11962 
11963 char *
11964 elfcore_write_xstatereg (bfd *abfd, char *buf, int *bufsiz,
11965 			 const void *xfpregs, int size)
11966 {
11967   char *note_name;
11968   if (get_elf_backend_data (abfd)->elf_osabi == ELFOSABI_FREEBSD)
11969     note_name = "FreeBSD";
11970   else
11971     note_name = "LINUX";
11972   return elfcore_write_note (abfd, buf, bufsiz,
11973 			     note_name, NT_X86_XSTATE, xfpregs, size);
11974 }
11975 
11976 char *
11977 elfcore_write_x86_segbases (bfd *abfd, char *buf, int *bufsiz,
11978 			    const void *regs, int size)
11979 {
11980   char *note_name = "FreeBSD";
11981   return elfcore_write_note (abfd, buf, bufsiz,
11982 			     note_name, NT_FREEBSD_X86_SEGBASES, regs, size);
11983 }
11984 
11985 char *
11986 elfcore_write_ppc_vmx (bfd *abfd,
11987 		       char *buf,
11988 		       int *bufsiz,
11989 		       const void *ppc_vmx,
11990 		       int size)
11991 {
11992   char *note_name = "LINUX";
11993   return elfcore_write_note (abfd, buf, bufsiz,
11994 			     note_name, NT_PPC_VMX, ppc_vmx, size);
11995 }
11996 
11997 char *
11998 elfcore_write_ppc_vsx (bfd *abfd,
11999 		       char *buf,
12000 		       int *bufsiz,
12001 		       const void *ppc_vsx,
12002 		       int size)
12003 {
12004   char *note_name = "LINUX";
12005   return elfcore_write_note (abfd, buf, bufsiz,
12006 			     note_name, NT_PPC_VSX, ppc_vsx, size);
12007 }
12008 
12009 char *
12010 elfcore_write_ppc_tar (bfd *abfd,
12011 		       char *buf,
12012 		       int *bufsiz,
12013 		       const void *ppc_tar,
12014 		       int size)
12015 {
12016   char *note_name = "LINUX";
12017   return elfcore_write_note (abfd, buf, bufsiz,
12018 			     note_name, NT_PPC_TAR, ppc_tar, size);
12019 }
12020 
12021 char *
12022 elfcore_write_ppc_ppr (bfd *abfd,
12023 		       char *buf,
12024 		       int *bufsiz,
12025 		       const void *ppc_ppr,
12026 		       int size)
12027 {
12028   char *note_name = "LINUX";
12029   return elfcore_write_note (abfd, buf, bufsiz,
12030 			     note_name, NT_PPC_PPR, ppc_ppr, size);
12031 }
12032 
12033 char *
12034 elfcore_write_ppc_dscr (bfd *abfd,
12035 			char *buf,
12036 			int *bufsiz,
12037 			const void *ppc_dscr,
12038 			int size)
12039 {
12040   char *note_name = "LINUX";
12041   return elfcore_write_note (abfd, buf, bufsiz,
12042 			     note_name, NT_PPC_DSCR, ppc_dscr, size);
12043 }
12044 
12045 char *
12046 elfcore_write_ppc_ebb (bfd *abfd,
12047 		       char *buf,
12048 		       int *bufsiz,
12049 		       const void *ppc_ebb,
12050 		       int size)
12051 {
12052   char *note_name = "LINUX";
12053   return elfcore_write_note (abfd, buf, bufsiz,
12054 			     note_name, NT_PPC_EBB, ppc_ebb, size);
12055 }
12056 
12057 char *
12058 elfcore_write_ppc_pmu (bfd *abfd,
12059 		       char *buf,
12060 		       int *bufsiz,
12061 		       const void *ppc_pmu,
12062 		       int size)
12063 {
12064   char *note_name = "LINUX";
12065   return elfcore_write_note (abfd, buf, bufsiz,
12066 			     note_name, NT_PPC_PMU, ppc_pmu, size);
12067 }
12068 
12069 char *
12070 elfcore_write_ppc_tm_cgpr (bfd *abfd,
12071 			   char *buf,
12072 			   int *bufsiz,
12073 			   const void *ppc_tm_cgpr,
12074 			   int size)
12075 {
12076   char *note_name = "LINUX";
12077   return elfcore_write_note (abfd, buf, bufsiz,
12078 			     note_name, NT_PPC_TM_CGPR, ppc_tm_cgpr, size);
12079 }
12080 
12081 char *
12082 elfcore_write_ppc_tm_cfpr (bfd *abfd,
12083 			   char *buf,
12084 			   int *bufsiz,
12085 			   const void *ppc_tm_cfpr,
12086 			   int size)
12087 {
12088   char *note_name = "LINUX";
12089   return elfcore_write_note (abfd, buf, bufsiz,
12090 			     note_name, NT_PPC_TM_CFPR, ppc_tm_cfpr, size);
12091 }
12092 
12093 char *
12094 elfcore_write_ppc_tm_cvmx (bfd *abfd,
12095 			   char *buf,
12096 			   int *bufsiz,
12097 			   const void *ppc_tm_cvmx,
12098 			   int size)
12099 {
12100   char *note_name = "LINUX";
12101   return elfcore_write_note (abfd, buf, bufsiz,
12102 			     note_name, NT_PPC_TM_CVMX, ppc_tm_cvmx, size);
12103 }
12104 
12105 char *
12106 elfcore_write_ppc_tm_cvsx (bfd *abfd,
12107 			   char *buf,
12108 			   int *bufsiz,
12109 			   const void *ppc_tm_cvsx,
12110 			   int size)
12111 {
12112   char *note_name = "LINUX";
12113   return elfcore_write_note (abfd, buf, bufsiz,
12114 			     note_name, NT_PPC_TM_CVSX, ppc_tm_cvsx, size);
12115 }
12116 
12117 char *
12118 elfcore_write_ppc_tm_spr (bfd *abfd,
12119 			  char *buf,
12120 			  int *bufsiz,
12121 			  const void *ppc_tm_spr,
12122 			  int size)
12123 {
12124   char *note_name = "LINUX";
12125   return elfcore_write_note (abfd, buf, bufsiz,
12126 			     note_name, NT_PPC_TM_SPR, ppc_tm_spr, size);
12127 }
12128 
12129 char *
12130 elfcore_write_ppc_tm_ctar (bfd *abfd,
12131 			   char *buf,
12132 			   int *bufsiz,
12133 			   const void *ppc_tm_ctar,
12134 			   int size)
12135 {
12136   char *note_name = "LINUX";
12137   return elfcore_write_note (abfd, buf, bufsiz,
12138 			     note_name, NT_PPC_TM_CTAR, ppc_tm_ctar, size);
12139 }
12140 
12141 char *
12142 elfcore_write_ppc_tm_cppr (bfd *abfd,
12143 			   char *buf,
12144 			   int *bufsiz,
12145 			   const void *ppc_tm_cppr,
12146 			   int size)
12147 {
12148   char *note_name = "LINUX";
12149   return elfcore_write_note (abfd, buf, bufsiz,
12150 			     note_name, NT_PPC_TM_CPPR, ppc_tm_cppr, size);
12151 }
12152 
12153 char *
12154 elfcore_write_ppc_tm_cdscr (bfd *abfd,
12155 			    char *buf,
12156 			    int *bufsiz,
12157 			    const void *ppc_tm_cdscr,
12158 			    int size)
12159 {
12160   char *note_name = "LINUX";
12161   return elfcore_write_note (abfd, buf, bufsiz,
12162 			     note_name, NT_PPC_TM_CDSCR, ppc_tm_cdscr, size);
12163 }
12164 
12165 static char *
12166 elfcore_write_s390_high_gprs (bfd *abfd,
12167 			      char *buf,
12168 			      int *bufsiz,
12169 			      const void *s390_high_gprs,
12170 			      int size)
12171 {
12172   char *note_name = "LINUX";
12173   return elfcore_write_note (abfd, buf, bufsiz,
12174 			     note_name, NT_S390_HIGH_GPRS,
12175 			     s390_high_gprs, size);
12176 }
12177 
12178 char *
12179 elfcore_write_s390_timer (bfd *abfd,
12180 			  char *buf,
12181 			  int *bufsiz,
12182 			  const void *s390_timer,
12183 			  int size)
12184 {
12185   char *note_name = "LINUX";
12186   return elfcore_write_note (abfd, buf, bufsiz,
12187 			     note_name, NT_S390_TIMER, s390_timer, size);
12188 }
12189 
12190 char *
12191 elfcore_write_s390_todcmp (bfd *abfd,
12192 			   char *buf,
12193 			   int *bufsiz,
12194 			   const void *s390_todcmp,
12195 			   int size)
12196 {
12197   char *note_name = "LINUX";
12198   return elfcore_write_note (abfd, buf, bufsiz,
12199 			     note_name, NT_S390_TODCMP, s390_todcmp, size);
12200 }
12201 
12202 char *
12203 elfcore_write_s390_todpreg (bfd *abfd,
12204 			    char *buf,
12205 			    int *bufsiz,
12206 			    const void *s390_todpreg,
12207 			    int size)
12208 {
12209   char *note_name = "LINUX";
12210   return elfcore_write_note (abfd, buf, bufsiz,
12211 			     note_name, NT_S390_TODPREG, s390_todpreg, size);
12212 }
12213 
12214 char *
12215 elfcore_write_s390_ctrs (bfd *abfd,
12216 			 char *buf,
12217 			 int *bufsiz,
12218 			 const void *s390_ctrs,
12219 			 int size)
12220 {
12221   char *note_name = "LINUX";
12222   return elfcore_write_note (abfd, buf, bufsiz,
12223 			     note_name, NT_S390_CTRS, s390_ctrs, size);
12224 }
12225 
12226 char *
12227 elfcore_write_s390_prefix (bfd *abfd,
12228 			   char *buf,
12229 			   int *bufsiz,
12230 			   const void *s390_prefix,
12231 			   int size)
12232 {
12233   char *note_name = "LINUX";
12234   return elfcore_write_note (abfd, buf, bufsiz,
12235 			     note_name, NT_S390_PREFIX, s390_prefix, size);
12236 }
12237 
12238 char *
12239 elfcore_write_s390_last_break (bfd *abfd,
12240 			       char *buf,
12241 			       int *bufsiz,
12242 			       const void *s390_last_break,
12243 			       int size)
12244 {
12245   char *note_name = "LINUX";
12246   return elfcore_write_note (abfd, buf, bufsiz,
12247 			     note_name, NT_S390_LAST_BREAK,
12248 			     s390_last_break, size);
12249 }
12250 
12251 char *
12252 elfcore_write_s390_system_call (bfd *abfd,
12253 				char *buf,
12254 				int *bufsiz,
12255 				const void *s390_system_call,
12256 				int size)
12257 {
12258   char *note_name = "LINUX";
12259   return elfcore_write_note (abfd, buf, bufsiz,
12260 			     note_name, NT_S390_SYSTEM_CALL,
12261 			     s390_system_call, size);
12262 }
12263 
12264 char *
12265 elfcore_write_s390_tdb (bfd *abfd,
12266 			char *buf,
12267 			int *bufsiz,
12268 			const void *s390_tdb,
12269 			int size)
12270 {
12271   char *note_name = "LINUX";
12272   return elfcore_write_note (abfd, buf, bufsiz,
12273 			     note_name, NT_S390_TDB, s390_tdb, size);
12274 }
12275 
12276 char *
12277 elfcore_write_s390_vxrs_low (bfd *abfd,
12278 			     char *buf,
12279 			     int *bufsiz,
12280 			     const void *s390_vxrs_low,
12281 			     int size)
12282 {
12283   char *note_name = "LINUX";
12284   return elfcore_write_note (abfd, buf, bufsiz,
12285 			     note_name, NT_S390_VXRS_LOW, s390_vxrs_low, size);
12286 }
12287 
12288 char *
12289 elfcore_write_s390_vxrs_high (bfd *abfd,
12290 			     char *buf,
12291 			     int *bufsiz,
12292 			     const void *s390_vxrs_high,
12293 			     int size)
12294 {
12295   char *note_name = "LINUX";
12296   return elfcore_write_note (abfd, buf, bufsiz,
12297 			     note_name, NT_S390_VXRS_HIGH,
12298 			     s390_vxrs_high, size);
12299 }
12300 
12301 char *
12302 elfcore_write_s390_gs_cb (bfd *abfd,
12303 			  char *buf,
12304 			  int *bufsiz,
12305 			  const void *s390_gs_cb,
12306 			  int size)
12307 {
12308   char *note_name = "LINUX";
12309   return elfcore_write_note (abfd, buf, bufsiz,
12310 			     note_name, NT_S390_GS_CB,
12311 			     s390_gs_cb, size);
12312 }
12313 
12314 char *
12315 elfcore_write_s390_gs_bc (bfd *abfd,
12316 			  char *buf,
12317 			  int *bufsiz,
12318 			  const void *s390_gs_bc,
12319 			  int size)
12320 {
12321   char *note_name = "LINUX";
12322   return elfcore_write_note (abfd, buf, bufsiz,
12323 			     note_name, NT_S390_GS_BC,
12324 			     s390_gs_bc, size);
12325 }
12326 
12327 char *
12328 elfcore_write_arm_vfp (bfd *abfd,
12329 		       char *buf,
12330 		       int *bufsiz,
12331 		       const void *arm_vfp,
12332 		       int size)
12333 {
12334   char *note_name = "LINUX";
12335   return elfcore_write_note (abfd, buf, bufsiz,
12336 			     note_name, NT_ARM_VFP, arm_vfp, size);
12337 }
12338 
12339 char *
12340 elfcore_write_aarch_tls (bfd *abfd,
12341 		       char *buf,
12342 		       int *bufsiz,
12343 		       const void *aarch_tls,
12344 		       int size)
12345 {
12346   char *note_name = "LINUX";
12347   return elfcore_write_note (abfd, buf, bufsiz,
12348 			     note_name, NT_ARM_TLS, aarch_tls, size);
12349 }
12350 
12351 char *
12352 elfcore_write_aarch_hw_break (bfd *abfd,
12353 			    char *buf,
12354 			    int *bufsiz,
12355 			    const void *aarch_hw_break,
12356 			    int size)
12357 {
12358   char *note_name = "LINUX";
12359   return elfcore_write_note (abfd, buf, bufsiz,
12360 			     note_name, NT_ARM_HW_BREAK, aarch_hw_break, size);
12361 }
12362 
12363 char *
12364 elfcore_write_aarch_hw_watch (bfd *abfd,
12365 			    char *buf,
12366 			    int *bufsiz,
12367 			    const void *aarch_hw_watch,
12368 			    int size)
12369 {
12370   char *note_name = "LINUX";
12371   return elfcore_write_note (abfd, buf, bufsiz,
12372 			     note_name, NT_ARM_HW_WATCH, aarch_hw_watch, size);
12373 }
12374 
12375 char *
12376 elfcore_write_aarch_sve (bfd *abfd,
12377 			 char *buf,
12378 			 int *bufsiz,
12379 			 const void *aarch_sve,
12380 			 int size)
12381 {
12382   char *note_name = "LINUX";
12383   return elfcore_write_note (abfd, buf, bufsiz,
12384 			     note_name, NT_ARM_SVE, aarch_sve, size);
12385 }
12386 
12387 char *
12388 elfcore_write_aarch_pauth (bfd *abfd,
12389 			   char *buf,
12390 			   int *bufsiz,
12391 			   const void *aarch_pauth,
12392 			   int size)
12393 {
12394   char *note_name = "LINUX";
12395   return elfcore_write_note (abfd, buf, bufsiz,
12396 			     note_name, NT_ARM_PAC_MASK, aarch_pauth, size);
12397 }
12398 
12399 char *
12400 elfcore_write_aarch_mte (bfd *abfd,
12401 				      char *buf,
12402 				      int *bufsiz,
12403 				      const void *aarch_mte,
12404 				      int size)
12405 {
12406   char *note_name = "LINUX";
12407   return elfcore_write_note (abfd, buf, bufsiz,
12408 			     note_name, NT_ARM_TAGGED_ADDR_CTRL,
12409 			     aarch_mte,
12410 			     size);
12411 }
12412 
12413 char *
12414 elfcore_write_arc_v2 (bfd *abfd,
12415 		      char *buf,
12416 		      int *bufsiz,
12417 		      const void *arc_v2,
12418 		      int size)
12419 {
12420   char *note_name = "LINUX";
12421   return elfcore_write_note (abfd, buf, bufsiz,
12422 			     note_name, NT_ARC_V2, arc_v2, size);
12423 }
12424 
12425 char *
12426 elfcore_write_loongarch_cpucfg (bfd *abfd,
12427 				char *buf,
12428 				int *bufsiz,
12429 				const void *loongarch_cpucfg,
12430 				int size)
12431 {
12432   char *note_name = "LINUX";
12433   return elfcore_write_note (abfd, buf, bufsiz,
12434 			     note_name, NT_LARCH_CPUCFG,
12435 			     loongarch_cpucfg, size);
12436 }
12437 
12438 char *
12439 elfcore_write_loongarch_lbt (bfd *abfd,
12440 			     char *buf,
12441 			     int *bufsiz,
12442 			     const void *loongarch_lbt,
12443 			     int size)
12444 {
12445   char *note_name = "LINUX";
12446   return elfcore_write_note (abfd, buf, bufsiz,
12447 			     note_name, NT_LARCH_LBT, loongarch_lbt, size);
12448 }
12449 
12450 char *
12451 elfcore_write_loongarch_lsx (bfd *abfd,
12452 			     char *buf,
12453 			     int *bufsiz,
12454 			     const void *loongarch_lsx,
12455 			     int size)
12456 {
12457   char *note_name = "LINUX";
12458   return elfcore_write_note (abfd, buf, bufsiz,
12459 			     note_name, NT_LARCH_LSX, loongarch_lsx, size);
12460 }
12461 
12462 char *
12463 elfcore_write_loongarch_lasx (bfd *abfd,
12464 			      char *buf,
12465 			      int *bufsiz,
12466 			      const void *loongarch_lasx,
12467 			      int size)
12468 {
12469   char *note_name = "LINUX";
12470   return elfcore_write_note (abfd, buf, bufsiz,
12471 			     note_name, NT_LARCH_LASX, loongarch_lasx, size);
12472 }
12473 
12474 /* Write the buffer of csr values in CSRS (length SIZE) into the note
12475    buffer BUF and update *BUFSIZ.  ABFD is the bfd the note is being
12476    written into.  Return a pointer to the new start of the note buffer, to
12477    replace BUF which may no longer be valid.  */
12478 
12479 char *
12480 elfcore_write_riscv_csr (bfd *abfd,
12481 			 char *buf,
12482 			 int *bufsiz,
12483 			 const void *csrs,
12484 			 int size)
12485 {
12486   const char *note_name = "GDB";
12487   return elfcore_write_note (abfd, buf, bufsiz,
12488 			     note_name, NT_RISCV_CSR, csrs, size);
12489 }
12490 
12491 /* Write the target description (a string) pointed to by TDESC, length
12492    SIZE, into the note buffer BUF, and update *BUFSIZ.  ABFD is the bfd the
12493    note is being written into.  Return a pointer to the new start of the
12494    note buffer, to replace BUF which may no longer be valid.  */
12495 
12496 char *
12497 elfcore_write_gdb_tdesc (bfd *abfd,
12498 			 char *buf,
12499 			 int *bufsiz,
12500 			 const void *tdesc,
12501 			 int size)
12502 {
12503   const char *note_name = "GDB";
12504   return elfcore_write_note (abfd, buf, bufsiz,
12505 			     note_name, NT_GDB_TDESC, tdesc, size);
12506 }
12507 
12508 char *
12509 elfcore_write_register_note (bfd *abfd,
12510 			     char *buf,
12511 			     int *bufsiz,
12512 			     const char *section,
12513 			     const void *data,
12514 			     int size)
12515 {
12516   if (strcmp (section, ".reg2") == 0)
12517     return elfcore_write_prfpreg (abfd, buf, bufsiz, data, size);
12518   if (strcmp (section, ".reg-xfp") == 0)
12519     return elfcore_write_prxfpreg (abfd, buf, bufsiz, data, size);
12520   if (strcmp (section, ".reg-xstate") == 0)
12521     return elfcore_write_xstatereg (abfd, buf, bufsiz, data, size);
12522   if (strcmp (section, ".reg-x86-segbases") == 0)
12523     return elfcore_write_x86_segbases (abfd, buf, bufsiz, data, size);
12524   if (strcmp (section, ".reg-ppc-vmx") == 0)
12525     return elfcore_write_ppc_vmx (abfd, buf, bufsiz, data, size);
12526   if (strcmp (section, ".reg-ppc-vsx") == 0)
12527     return elfcore_write_ppc_vsx (abfd, buf, bufsiz, data, size);
12528   if (strcmp (section, ".reg-ppc-tar") == 0)
12529     return elfcore_write_ppc_tar (abfd, buf, bufsiz, data, size);
12530   if (strcmp (section, ".reg-ppc-ppr") == 0)
12531     return elfcore_write_ppc_ppr (abfd, buf, bufsiz, data, size);
12532   if (strcmp (section, ".reg-ppc-dscr") == 0)
12533     return elfcore_write_ppc_dscr (abfd, buf, bufsiz, data, size);
12534   if (strcmp (section, ".reg-ppc-ebb") == 0)
12535     return elfcore_write_ppc_ebb (abfd, buf, bufsiz, data, size);
12536   if (strcmp (section, ".reg-ppc-pmu") == 0)
12537     return elfcore_write_ppc_pmu (abfd, buf, bufsiz, data, size);
12538   if (strcmp (section, ".reg-ppc-tm-cgpr") == 0)
12539     return elfcore_write_ppc_tm_cgpr (abfd, buf, bufsiz, data, size);
12540   if (strcmp (section, ".reg-ppc-tm-cfpr") == 0)
12541     return elfcore_write_ppc_tm_cfpr (abfd, buf, bufsiz, data, size);
12542   if (strcmp (section, ".reg-ppc-tm-cvmx") == 0)
12543     return elfcore_write_ppc_tm_cvmx (abfd, buf, bufsiz, data, size);
12544   if (strcmp (section, ".reg-ppc-tm-cvsx") == 0)
12545     return elfcore_write_ppc_tm_cvsx (abfd, buf, bufsiz, data, size);
12546   if (strcmp (section, ".reg-ppc-tm-spr") == 0)
12547     return elfcore_write_ppc_tm_spr (abfd, buf, bufsiz, data, size);
12548   if (strcmp (section, ".reg-ppc-tm-ctar") == 0)
12549     return elfcore_write_ppc_tm_ctar (abfd, buf, bufsiz, data, size);
12550   if (strcmp (section, ".reg-ppc-tm-cppr") == 0)
12551     return elfcore_write_ppc_tm_cppr (abfd, buf, bufsiz, data, size);
12552   if (strcmp (section, ".reg-ppc-tm-cdscr") == 0)
12553     return elfcore_write_ppc_tm_cdscr (abfd, buf, bufsiz, data, size);
12554   if (strcmp (section, ".reg-s390-high-gprs") == 0)
12555     return elfcore_write_s390_high_gprs (abfd, buf, bufsiz, data, size);
12556   if (strcmp (section, ".reg-s390-timer") == 0)
12557     return elfcore_write_s390_timer (abfd, buf, bufsiz, data, size);
12558   if (strcmp (section, ".reg-s390-todcmp") == 0)
12559     return elfcore_write_s390_todcmp (abfd, buf, bufsiz, data, size);
12560   if (strcmp (section, ".reg-s390-todpreg") == 0)
12561     return elfcore_write_s390_todpreg (abfd, buf, bufsiz, data, size);
12562   if (strcmp (section, ".reg-s390-ctrs") == 0)
12563     return elfcore_write_s390_ctrs (abfd, buf, bufsiz, data, size);
12564   if (strcmp (section, ".reg-s390-prefix") == 0)
12565     return elfcore_write_s390_prefix (abfd, buf, bufsiz, data, size);
12566   if (strcmp (section, ".reg-s390-last-break") == 0)
12567     return elfcore_write_s390_last_break (abfd, buf, bufsiz, data, size);
12568   if (strcmp (section, ".reg-s390-system-call") == 0)
12569     return elfcore_write_s390_system_call (abfd, buf, bufsiz, data, size);
12570   if (strcmp (section, ".reg-s390-tdb") == 0)
12571     return elfcore_write_s390_tdb (abfd, buf, bufsiz, data, size);
12572   if (strcmp (section, ".reg-s390-vxrs-low") == 0)
12573     return elfcore_write_s390_vxrs_low (abfd, buf, bufsiz, data, size);
12574   if (strcmp (section, ".reg-s390-vxrs-high") == 0)
12575     return elfcore_write_s390_vxrs_high (abfd, buf, bufsiz, data, size);
12576   if (strcmp (section, ".reg-s390-gs-cb") == 0)
12577     return elfcore_write_s390_gs_cb (abfd, buf, bufsiz, data, size);
12578   if (strcmp (section, ".reg-s390-gs-bc") == 0)
12579     return elfcore_write_s390_gs_bc (abfd, buf, bufsiz, data, size);
12580   if (strcmp (section, ".reg-arm-vfp") == 0)
12581     return elfcore_write_arm_vfp (abfd, buf, bufsiz, data, size);
12582   if (strcmp (section, ".reg-aarch-tls") == 0)
12583     return elfcore_write_aarch_tls (abfd, buf, bufsiz, data, size);
12584   if (strcmp (section, ".reg-aarch-hw-break") == 0)
12585     return elfcore_write_aarch_hw_break (abfd, buf, bufsiz, data, size);
12586   if (strcmp (section, ".reg-aarch-hw-watch") == 0)
12587     return elfcore_write_aarch_hw_watch (abfd, buf, bufsiz, data, size);
12588   if (strcmp (section, ".reg-aarch-sve") == 0)
12589     return elfcore_write_aarch_sve (abfd, buf, bufsiz, data, size);
12590   if (strcmp (section, ".reg-aarch-pauth") == 0)
12591     return elfcore_write_aarch_pauth (abfd, buf, bufsiz, data, size);
12592   if (strcmp (section, ".reg-aarch-mte") == 0)
12593     return elfcore_write_aarch_mte (abfd, buf, bufsiz, data, size);
12594   if (strcmp (section, ".reg-arc-v2") == 0)
12595     return elfcore_write_arc_v2 (abfd, buf, bufsiz, data, size);
12596   if (strcmp (section, ".gdb-tdesc") == 0)
12597     return elfcore_write_gdb_tdesc (abfd, buf, bufsiz, data, size);
12598   if (strcmp (section, ".reg-riscv-csr") == 0)
12599     return elfcore_write_riscv_csr (abfd, buf, bufsiz, data, size);
12600   if (strcmp (section, ".reg-loongarch-cpucfg") == 0)
12601     return elfcore_write_loongarch_cpucfg (abfd, buf, bufsiz, data, size);
12602   if (strcmp (section, ".reg-loongarch-lbt") == 0)
12603     return elfcore_write_loongarch_lbt (abfd, buf, bufsiz, data, size);
12604   if (strcmp (section, ".reg-loongarch-lsx") == 0)
12605     return elfcore_write_loongarch_lsx (abfd, buf, bufsiz, data, size);
12606   if (strcmp (section, ".reg-loongarch-lasx") == 0)
12607     return elfcore_write_loongarch_lasx (abfd, buf, bufsiz, data, size);
12608   return NULL;
12609 }
12610 
12611 char *
12612 elfcore_write_file_note (bfd *obfd, char *note_data, int *note_size,
12613 			 const void *buf, int bufsiz)
12614 {
12615   return elfcore_write_note (obfd, note_data, note_size,
12616 			     "CORE", NT_FILE, buf, bufsiz);
12617 }
12618 
12619 static bool
12620 elf_parse_notes (bfd *abfd, char *buf, size_t size, file_ptr offset,
12621 		 size_t align)
12622 {
12623   char *p;
12624 
12625   /* NB: CORE PT_NOTE segments may have p_align values of 0 or 1.
12626      gABI specifies that PT_NOTE alignment should be aligned to 4
12627      bytes for 32-bit objects and to 8 bytes for 64-bit objects.  If
12628      align is less than 4, we use 4 byte alignment.   */
12629   if (align < 4)
12630     align = 4;
12631   if (align != 4 && align != 8)
12632     return false;
12633 
12634   p = buf;
12635   while (p < buf + size)
12636     {
12637       Elf_External_Note *xnp = (Elf_External_Note *) p;
12638       Elf_Internal_Note in;
12639 
12640       if (offsetof (Elf_External_Note, name) > buf - p + size)
12641 	return false;
12642 
12643       in.type = H_GET_32 (abfd, xnp->type);
12644 
12645       in.namesz = H_GET_32 (abfd, xnp->namesz);
12646       in.namedata = xnp->name;
12647       if (in.namesz > buf - in.namedata + size)
12648 	return false;
12649 
12650       in.descsz = H_GET_32 (abfd, xnp->descsz);
12651       in.descdata = p + ELF_NOTE_DESC_OFFSET (in.namesz, align);
12652       in.descpos = offset + (in.descdata - buf);
12653       if (in.descsz != 0
12654 	  && (in.descdata >= buf + size
12655 	      || in.descsz > buf - in.descdata + size))
12656 	return false;
12657 
12658       switch (bfd_get_format (abfd))
12659 	{
12660 	default:
12661 	  return true;
12662 
12663 	case bfd_core:
12664 	  {
12665 #define GROKER_ELEMENT(S,F) {S, sizeof (S) - 1, F}
12666 	    struct
12667 	    {
12668 	      const char * string;
12669 	      size_t len;
12670 	      bool (*func) (bfd *, Elf_Internal_Note *);
12671 	    }
12672 	    grokers[] =
12673 	    {
12674 	      GROKER_ELEMENT ("", elfcore_grok_note),
12675 	      GROKER_ELEMENT ("FreeBSD", elfcore_grok_freebsd_note),
12676 	      GROKER_ELEMENT ("NetBSD-CORE", elfcore_grok_netbsd_note),
12677 	      GROKER_ELEMENT ("OpenBSD", elfcore_grok_openbsd_note),
12678 	      GROKER_ELEMENT ("QNX", elfcore_grok_nto_note),
12679 	      GROKER_ELEMENT ("SPU/", elfcore_grok_spu_note),
12680 	      GROKER_ELEMENT ("GNU", elfobj_grok_gnu_note),
12681 	      GROKER_ELEMENT ("CORE", elfcore_grok_solaris_note)
12682 	    };
12683 #undef GROKER_ELEMENT
12684 	    int i;
12685 
12686 	    for (i = ARRAY_SIZE (grokers); i--;)
12687 	      {
12688 		if (in.namesz >= grokers[i].len
12689 		    && strncmp (in.namedata, grokers[i].string,
12690 				grokers[i].len) == 0)
12691 		  {
12692 		    if (! grokers[i].func (abfd, & in))
12693 		      return false;
12694 		    break;
12695 		  }
12696 	      }
12697 	    break;
12698 	  }
12699 
12700 	case bfd_object:
12701 	  if (in.namesz == sizeof "GNU" && strcmp (in.namedata, "GNU") == 0)
12702 	    {
12703 	      if (! elfobj_grok_gnu_note (abfd, &in))
12704 		return false;
12705 	    }
12706 	  else if (in.namesz == sizeof "stapsdt"
12707 		   && strcmp (in.namedata, "stapsdt") == 0)
12708 	    {
12709 	      if (! elfobj_grok_stapsdt_note (abfd, &in))
12710 		return false;
12711 	    }
12712 	  break;
12713 	}
12714 
12715       p += ELF_NOTE_NEXT_OFFSET (in.namesz, in.descsz, align);
12716     }
12717 
12718   return true;
12719 }
12720 
12721 bool
12722 elf_read_notes (bfd *abfd, file_ptr offset, bfd_size_type size,
12723 		size_t align)
12724 {
12725   char *buf;
12726 
12727   if (size == 0 || (size + 1) == 0)
12728     return true;
12729 
12730   if (bfd_seek (abfd, offset, SEEK_SET) != 0)
12731     return false;
12732 
12733   buf = (char *) _bfd_malloc_and_read (abfd, size + 1, size);
12734   if (buf == NULL)
12735     return false;
12736 
12737   /* PR 17512: file: ec08f814
12738      0-termintate the buffer so that string searches will not overflow.  */
12739   buf[size] = 0;
12740 
12741   if (!elf_parse_notes (abfd, buf, size, offset, align))
12742     {
12743       free (buf);
12744       return false;
12745     }
12746 
12747   free (buf);
12748   return true;
12749 }
12750 
12751 /* Providing external access to the ELF program header table.  */
12752 
12753 /* Return an upper bound on the number of bytes required to store a
12754    copy of ABFD's program header table entries.  Return -1 if an error
12755    occurs; bfd_get_error will return an appropriate code.  */
12756 
12757 long
12758 bfd_get_elf_phdr_upper_bound (bfd *abfd)
12759 {
12760   if (abfd->xvec->flavour != bfd_target_elf_flavour)
12761     {
12762       bfd_set_error (bfd_error_wrong_format);
12763       return -1;
12764     }
12765 
12766   return elf_elfheader (abfd)->e_phnum * sizeof (Elf_Internal_Phdr);
12767 }
12768 
12769 /* Copy ABFD's program header table entries to *PHDRS.  The entries
12770    will be stored as an array of Elf_Internal_Phdr structures, as
12771    defined in include/elf/internal.h.  To find out how large the
12772    buffer needs to be, call bfd_get_elf_phdr_upper_bound.
12773 
12774    Return the number of program header table entries read, or -1 if an
12775    error occurs; bfd_get_error will return an appropriate code.  */
12776 
12777 int
12778 bfd_get_elf_phdrs (bfd *abfd, void *phdrs)
12779 {
12780   int num_phdrs;
12781 
12782   if (abfd->xvec->flavour != bfd_target_elf_flavour)
12783     {
12784       bfd_set_error (bfd_error_wrong_format);
12785       return -1;
12786     }
12787 
12788   num_phdrs = elf_elfheader (abfd)->e_phnum;
12789   if (num_phdrs != 0)
12790     memcpy (phdrs, elf_tdata (abfd)->phdr,
12791 	    num_phdrs * sizeof (Elf_Internal_Phdr));
12792 
12793   return num_phdrs;
12794 }
12795 
12796 enum elf_reloc_type_class
12797 _bfd_elf_reloc_type_class (const struct bfd_link_info *info ATTRIBUTE_UNUSED,
12798 			   const asection *rel_sec ATTRIBUTE_UNUSED,
12799 			   const Elf_Internal_Rela *rela ATTRIBUTE_UNUSED)
12800 {
12801   return reloc_class_normal;
12802 }
12803 
12804 /* For RELA architectures, return the relocation value for a
12805    relocation against a local symbol.  */
12806 
12807 bfd_vma
12808 _bfd_elf_rela_local_sym (bfd *abfd,
12809 			 Elf_Internal_Sym *sym,
12810 			 asection **psec,
12811 			 Elf_Internal_Rela *rel)
12812 {
12813   asection *sec = *psec;
12814   bfd_vma relocation;
12815 
12816   relocation = (sec->output_section->vma
12817 		+ sec->output_offset
12818 		+ sym->st_value);
12819   if ((sec->flags & SEC_MERGE)
12820       && ELF_ST_TYPE (sym->st_info) == STT_SECTION
12821       && sec->sec_info_type == SEC_INFO_TYPE_MERGE)
12822     {
12823       rel->r_addend =
12824 	_bfd_merged_section_offset (abfd, psec,
12825 				    elf_section_data (sec)->sec_info,
12826 				    sym->st_value + rel->r_addend);
12827       if (sec != *psec)
12828 	{
12829 	  /* If we have changed the section, and our original section is
12830 	     marked with SEC_EXCLUDE, it means that the original
12831 	     SEC_MERGE section has been completely subsumed in some
12832 	     other SEC_MERGE section.  In this case, we need to leave
12833 	     some info around for --emit-relocs.  */
12834 	  if ((sec->flags & SEC_EXCLUDE) != 0)
12835 	    sec->kept_section = *psec;
12836 	  sec = *psec;
12837 	}
12838       rel->r_addend -= relocation;
12839       rel->r_addend += sec->output_section->vma + sec->output_offset;
12840     }
12841   return relocation;
12842 }
12843 
12844 bfd_vma
12845 _bfd_elf_rel_local_sym (bfd *abfd,
12846 			Elf_Internal_Sym *sym,
12847 			asection **psec,
12848 			bfd_vma addend)
12849 {
12850   asection *sec = *psec;
12851 
12852   if (sec->sec_info_type != SEC_INFO_TYPE_MERGE)
12853     return sym->st_value + addend;
12854 
12855   return _bfd_merged_section_offset (abfd, psec,
12856 				     elf_section_data (sec)->sec_info,
12857 				     sym->st_value + addend);
12858 }
12859 
12860 /* Adjust an address within a section.  Given OFFSET within SEC, return
12861    the new offset within the section, based upon changes made to the
12862    section.  Returns -1 if the offset is now invalid.
12863    The offset (in abnd out) is in target sized bytes, however big a
12864    byte may be.  */
12865 
12866 bfd_vma
12867 _bfd_elf_section_offset (bfd *abfd,
12868 			 struct bfd_link_info *info,
12869 			 asection *sec,
12870 			 bfd_vma offset)
12871 {
12872   switch (sec->sec_info_type)
12873     {
12874     case SEC_INFO_TYPE_STABS:
12875       return _bfd_stab_section_offset (sec, elf_section_data (sec)->sec_info,
12876 				       offset);
12877     case SEC_INFO_TYPE_EH_FRAME:
12878       return _bfd_elf_eh_frame_section_offset (abfd, info, sec, offset);
12879 
12880     default:
12881       if ((sec->flags & SEC_ELF_REVERSE_COPY) != 0)
12882 	{
12883 	  /* Reverse the offset.  */
12884 	  const struct elf_backend_data *bed = get_elf_backend_data (abfd);
12885 	  bfd_size_type address_size = bed->s->arch_size / 8;
12886 
12887 	  /* address_size and sec->size are in octets.  Convert
12888 	     to bytes before subtracting the original offset.  */
12889 	  offset = ((sec->size - address_size)
12890 		    / bfd_octets_per_byte (abfd, sec) - offset);
12891 	}
12892       return offset;
12893     }
12894 }
12895 
12896 /* Create a new BFD as if by bfd_openr.  Rather than opening a file,
12897    reconstruct an ELF file by reading the segments out of remote memory
12898    based on the ELF file header at EHDR_VMA and the ELF program headers it
12899    points to.  If not null, *LOADBASEP is filled in with the difference
12900    between the VMAs from which the segments were read, and the VMAs the
12901    file headers (and hence BFD's idea of each section's VMA) put them at.
12902 
12903    The function TARGET_READ_MEMORY is called to copy LEN bytes from the
12904    remote memory at target address VMA into the local buffer at MYADDR; it
12905    should return zero on success or an `errno' code on failure.  TEMPL must
12906    be a BFD for an ELF target with the word size and byte order found in
12907    the remote memory.  */
12908 
12909 bfd *
12910 bfd_elf_bfd_from_remote_memory
12911   (bfd *templ,
12912    bfd_vma ehdr_vma,
12913    bfd_size_type size,
12914    bfd_vma *loadbasep,
12915    int (*target_read_memory) (bfd_vma, bfd_byte *, bfd_size_type))
12916 {
12917   return (*get_elf_backend_data (templ)->elf_backend_bfd_from_remote_memory)
12918     (templ, ehdr_vma, size, loadbasep, target_read_memory);
12919 }
12920 
12921 long
12922 _bfd_elf_get_synthetic_symtab (bfd *abfd,
12923 			       long symcount ATTRIBUTE_UNUSED,
12924 			       asymbol **syms ATTRIBUTE_UNUSED,
12925 			       long dynsymcount,
12926 			       asymbol **dynsyms,
12927 			       asymbol **ret)
12928 {
12929   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
12930   asection *relplt;
12931   asymbol *s;
12932   const char *relplt_name;
12933   bool (*slurp_relocs) (bfd *, asection *, asymbol **, bool);
12934   arelent *p;
12935   long count, i, n;
12936   size_t size;
12937   Elf_Internal_Shdr *hdr;
12938   char *names;
12939   asection *plt;
12940 
12941   *ret = NULL;
12942 
12943   if ((abfd->flags & (DYNAMIC | EXEC_P)) == 0)
12944     return 0;
12945 
12946   if (dynsymcount <= 0)
12947     return 0;
12948 
12949   if (!bed->plt_sym_val)
12950     return 0;
12951 
12952   relplt_name = bed->relplt_name;
12953   if (relplt_name == NULL)
12954     relplt_name = bed->rela_plts_and_copies_p ? ".rela.plt" : ".rel.plt";
12955   relplt = bfd_get_section_by_name (abfd, relplt_name);
12956   if (relplt == NULL)
12957     return 0;
12958 
12959   hdr = &elf_section_data (relplt)->this_hdr;
12960   if (hdr->sh_link != elf_dynsymtab (abfd)
12961       || (hdr->sh_type != SHT_REL && hdr->sh_type != SHT_RELA))
12962     return 0;
12963 
12964   plt = bfd_get_section_by_name (abfd, ".plt");
12965   if (plt == NULL)
12966     return 0;
12967 
12968   slurp_relocs = get_elf_backend_data (abfd)->s->slurp_reloc_table;
12969   if (! (*slurp_relocs) (abfd, relplt, dynsyms, true))
12970     return -1;
12971 
12972   count = relplt->size / hdr->sh_entsize;
12973   size = count * sizeof (asymbol);
12974   p = relplt->relocation;
12975   for (i = 0; i < count; i++, p += bed->s->int_rels_per_ext_rel)
12976     {
12977       size += strlen ((*p->sym_ptr_ptr)->name) + sizeof ("@plt");
12978       if (p->addend != 0)
12979 	{
12980 #ifdef BFD64
12981 	  size += sizeof ("+0x") - 1 + 8 + 8 * (bed->s->elfclass == ELFCLASS64);
12982 #else
12983 	  size += sizeof ("+0x") - 1 + 8;
12984 #endif
12985 	}
12986     }
12987 
12988   s = *ret = (asymbol *) bfd_malloc (size);
12989   if (s == NULL)
12990     return -1;
12991 
12992   names = (char *) (s + count);
12993   p = relplt->relocation;
12994   n = 0;
12995   for (i = 0; i < count; i++, p += bed->s->int_rels_per_ext_rel)
12996     {
12997       size_t len;
12998       bfd_vma addr;
12999 
13000       addr = bed->plt_sym_val (i, plt, p);
13001       if (addr == (bfd_vma) -1)
13002 	continue;
13003 
13004       *s = **p->sym_ptr_ptr;
13005       /* Undefined syms won't have BSF_LOCAL or BSF_GLOBAL set.  Since
13006 	 we are defining a symbol, ensure one of them is set.  */
13007       if ((s->flags & BSF_LOCAL) == 0)
13008 	s->flags |= BSF_GLOBAL;
13009       s->flags |= BSF_SYNTHETIC;
13010       s->section = plt;
13011       s->value = addr - plt->vma;
13012       s->name = names;
13013       s->udata.p = NULL;
13014       len = strlen ((*p->sym_ptr_ptr)->name);
13015       memcpy (names, (*p->sym_ptr_ptr)->name, len);
13016       names += len;
13017       if (p->addend != 0)
13018 	{
13019 	  char buf[30], *a;
13020 
13021 	  memcpy (names, "+0x", sizeof ("+0x") - 1);
13022 	  names += sizeof ("+0x") - 1;
13023 	  bfd_sprintf_vma (abfd, buf, p->addend);
13024 	  for (a = buf; *a == '0'; ++a)
13025 	    ;
13026 	  len = strlen (a);
13027 	  memcpy (names, a, len);
13028 	  names += len;
13029 	}
13030       memcpy (names, "@plt", sizeof ("@plt"));
13031       names += sizeof ("@plt");
13032       ++s, ++n;
13033     }
13034 
13035   return n;
13036 }
13037 
13038 /* It is only used by x86-64 so far.
13039    ??? This repeats *COM* id of zero.  sec->id is supposed to be unique,
13040    but current usage would allow all of _bfd_std_section to be zero.  */
13041 static const asymbol lcomm_sym
13042   = GLOBAL_SYM_INIT ("LARGE_COMMON", &_bfd_elf_large_com_section);
13043 asection _bfd_elf_large_com_section
13044   = BFD_FAKE_SECTION (_bfd_elf_large_com_section, &lcomm_sym,
13045 		      "LARGE_COMMON", 0, SEC_IS_COMMON);
13046 
13047 bool
13048 _bfd_elf_final_write_processing (bfd *abfd)
13049 {
13050   Elf_Internal_Ehdr *i_ehdrp;	/* ELF file header, internal form.  */
13051 
13052   i_ehdrp = elf_elfheader (abfd);
13053 
13054   if (i_ehdrp->e_ident[EI_OSABI] == ELFOSABI_NONE)
13055     i_ehdrp->e_ident[EI_OSABI] = get_elf_backend_data (abfd)->elf_osabi;
13056 
13057   /* Set the osabi field to ELFOSABI_GNU if the binary contains
13058      SHF_GNU_MBIND or SHF_GNU_RETAIN sections or symbols of STT_GNU_IFUNC type
13059      or STB_GNU_UNIQUE binding.  */
13060   if (elf_tdata (abfd)->has_gnu_osabi != 0)
13061     {
13062       if (i_ehdrp->e_ident[EI_OSABI] == ELFOSABI_NONE)
13063 	i_ehdrp->e_ident[EI_OSABI] = ELFOSABI_GNU;
13064       else if (i_ehdrp->e_ident[EI_OSABI] != ELFOSABI_GNU
13065 	       && i_ehdrp->e_ident[EI_OSABI] != ELFOSABI_FREEBSD)
13066 	{
13067 	  if (elf_tdata (abfd)->has_gnu_osabi & elf_gnu_osabi_mbind)
13068 	    _bfd_error_handler (_("GNU_MBIND section is supported only by GNU "
13069 				  "and FreeBSD targets"));
13070 	  if (elf_tdata (abfd)->has_gnu_osabi & elf_gnu_osabi_ifunc)
13071 	    _bfd_error_handler (_("symbol type STT_GNU_IFUNC is supported "
13072 				  "only by GNU and FreeBSD targets"));
13073 	  if (elf_tdata (abfd)->has_gnu_osabi & elf_gnu_osabi_unique)
13074 	    _bfd_error_handler (_("symbol binding STB_GNU_UNIQUE is supported "
13075 				  "only by GNU and FreeBSD targets"));
13076 	  if (elf_tdata (abfd)->has_gnu_osabi & elf_gnu_osabi_retain)
13077 	    _bfd_error_handler (_("GNU_RETAIN section is supported "
13078 				  "only by GNU and FreeBSD targets"));
13079 	  bfd_set_error (bfd_error_sorry);
13080 	  return false;
13081 	}
13082     }
13083   return true;
13084 }
13085 
13086 
13087 /* Return TRUE for ELF symbol types that represent functions.
13088    This is the default version of this function, which is sufficient for
13089    most targets.  It returns true if TYPE is STT_FUNC or STT_GNU_IFUNC.  */
13090 
13091 bool
13092 _bfd_elf_is_function_type (unsigned int type)
13093 {
13094   return (type == STT_FUNC
13095 	  || type == STT_GNU_IFUNC);
13096 }
13097 
13098 /* If the ELF symbol SYM might be a function in SEC, return the
13099    function size and set *CODE_OFF to the function's entry point,
13100    otherwise return zero.  */
13101 
13102 bfd_size_type
13103 _bfd_elf_maybe_function_sym (const asymbol *sym, asection *sec,
13104 			     bfd_vma *code_off)
13105 {
13106   bfd_size_type size;
13107   elf_symbol_type * elf_sym = (elf_symbol_type *) sym;
13108 
13109   if ((sym->flags & (BSF_SECTION_SYM | BSF_FILE | BSF_OBJECT
13110 		     | BSF_THREAD_LOCAL | BSF_RELC | BSF_SRELC)) != 0
13111       || sym->section != sec)
13112     return 0;
13113 
13114   size = (sym->flags & BSF_SYNTHETIC) ? 0 : elf_sym->internal_elf_sym.st_size;
13115 
13116   /* In theory we should check that the symbol's type satisfies
13117      _bfd_elf_is_function_type(), but there are some function-like
13118      symbols which would fail this test.  (eg _start).  Instead
13119      we check for hidden, local, notype symbols with zero size.
13120      This type of symbol is generated by the annobin plugin for gcc
13121      and clang, and should not be considered to be a function symbol.  */
13122   if (size == 0
13123       && ((sym->flags & (BSF_SYNTHETIC | BSF_LOCAL)) == BSF_LOCAL)
13124       && ELF_ST_TYPE (elf_sym->internal_elf_sym.st_info) == STT_NOTYPE
13125       && ELF_ST_VISIBILITY (elf_sym->internal_elf_sym.st_other) == STV_HIDDEN)
13126     return 0;
13127 
13128   *code_off = sym->value;
13129   /* Do not return 0 for the function's size.  */
13130   return size ? size : 1;
13131 }
13132 
13133 /* Set to non-zero to enable some debug messages.  */
13134 #define DEBUG_SECONDARY_RELOCS	 0
13135 
13136 /* An internal-to-the-bfd-library only section type
13137    used to indicate a cached secondary reloc section.  */
13138 #define SHT_SECONDARY_RELOC	 (SHT_LOOS + SHT_RELA)
13139 
13140 /* Create a BFD section to hold a secondary reloc section.  */
13141 
13142 bool
13143 _bfd_elf_init_secondary_reloc_section (bfd * abfd,
13144 				       Elf_Internal_Shdr *hdr,
13145 				       const char * name,
13146 				       unsigned int shindex)
13147 {
13148   /* We only support RELA secondary relocs.  */
13149   if (hdr->sh_type != SHT_RELA)
13150     return false;
13151 
13152 #if DEBUG_SECONDARY_RELOCS
13153   fprintf (stderr, "secondary reloc section %s encountered\n", name);
13154 #endif
13155   hdr->sh_type = SHT_SECONDARY_RELOC;
13156   return _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
13157 }
13158 
13159 /* Read in any secondary relocs associated with SEC.  */
13160 
13161 bool
13162 _bfd_elf_slurp_secondary_reloc_section (bfd *       abfd,
13163 					asection *  sec,
13164 					asymbol **  symbols,
13165 					bool dynamic)
13166 {
13167   const struct elf_backend_data * const ebd = get_elf_backend_data (abfd);
13168   asection * relsec;
13169   bool result = true;
13170   bfd_vma (*r_sym) (bfd_vma);
13171   ufile_ptr filesize;
13172 
13173 #if BFD_DEFAULT_TARGET_SIZE > 32
13174   if (bfd_arch_bits_per_address (abfd) != 32)
13175     r_sym = elf64_r_sym;
13176   else
13177 #endif
13178     r_sym = elf32_r_sym;
13179 
13180   if (!elf_section_data (sec)->has_secondary_relocs)
13181     return true;
13182 
13183   /* Discover if there are any secondary reloc sections
13184      associated with SEC.  */
13185   filesize = bfd_get_file_size (abfd);
13186   for (relsec = abfd->sections; relsec != NULL; relsec = relsec->next)
13187     {
13188       Elf_Internal_Shdr * hdr = & elf_section_data (relsec)->this_hdr;
13189 
13190       if (hdr->sh_type == SHT_SECONDARY_RELOC
13191 	  && hdr->sh_info == (unsigned) elf_section_data (sec)->this_idx
13192 	  && (hdr->sh_entsize == ebd->s->sizeof_rel
13193 	      || hdr->sh_entsize == ebd->s->sizeof_rela))
13194 	{
13195 	  bfd_byte * native_relocs;
13196 	  bfd_byte * native_reloc;
13197 	  arelent * internal_relocs;
13198 	  arelent * internal_reloc;
13199 	  size_t i;
13200 	  unsigned int entsize;
13201 	  unsigned int symcount;
13202 	  bfd_size_type reloc_count;
13203 	  size_t amt;
13204 
13205 	  if (ebd->elf_info_to_howto == NULL)
13206 	    return false;
13207 
13208 #if DEBUG_SECONDARY_RELOCS
13209 	  fprintf (stderr, "read secondary relocs for %s from %s\n",
13210 		   sec->name, relsec->name);
13211 #endif
13212 	  entsize = hdr->sh_entsize;
13213 
13214 	  if (filesize != 0
13215 	      && ((ufile_ptr) hdr->sh_offset > filesize
13216 		  || hdr->sh_size > filesize - hdr->sh_offset))
13217 	    {
13218 	      bfd_set_error (bfd_error_file_truncated);
13219 	      result = false;
13220 	      continue;
13221 	    }
13222 
13223 	  native_relocs = bfd_malloc (hdr->sh_size);
13224 	  if (native_relocs == NULL)
13225 	    {
13226 	      result = false;
13227 	      continue;
13228 	    }
13229 
13230 	  reloc_count = NUM_SHDR_ENTRIES (hdr);
13231 	  if (_bfd_mul_overflow (reloc_count, sizeof (arelent), & amt))
13232 	    {
13233 	      free (native_relocs);
13234 	      bfd_set_error (bfd_error_file_too_big);
13235 	      result = false;
13236 	      continue;
13237 	    }
13238 
13239 	  internal_relocs = (arelent *) bfd_alloc (abfd, amt);
13240 	  if (internal_relocs == NULL)
13241 	    {
13242 	      free (native_relocs);
13243 	      result = false;
13244 	      continue;
13245 	    }
13246 
13247 	  if (bfd_seek (abfd, hdr->sh_offset, SEEK_SET) != 0
13248 	      || (bfd_bread (native_relocs, hdr->sh_size, abfd)
13249 		  != hdr->sh_size))
13250 	    {
13251 	      free (native_relocs);
13252 	      /* The internal_relocs will be freed when
13253 		 the memory for the bfd is released.  */
13254 	      result = false;
13255 	      continue;
13256 	    }
13257 
13258 	  if (dynamic)
13259 	    symcount = bfd_get_dynamic_symcount (abfd);
13260 	  else
13261 	    symcount = bfd_get_symcount (abfd);
13262 
13263 	  for (i = 0, internal_reloc = internal_relocs,
13264 		 native_reloc = native_relocs;
13265 	       i < reloc_count;
13266 	       i++, internal_reloc++, native_reloc += entsize)
13267 	    {
13268 	      bool res;
13269 	      Elf_Internal_Rela rela;
13270 
13271 	      if (entsize == ebd->s->sizeof_rel)
13272 		ebd->s->swap_reloc_in (abfd, native_reloc, & rela);
13273 	      else /* entsize == ebd->s->sizeof_rela */
13274 		ebd->s->swap_reloca_in (abfd, native_reloc, & rela);
13275 
13276 	      /* The address of an ELF reloc is section relative for an object
13277 		 file, and absolute for an executable file or shared library.
13278 		 The address of a normal BFD reloc is always section relative,
13279 		 and the address of a dynamic reloc is absolute..  */
13280 	      if ((abfd->flags & (EXEC_P | DYNAMIC)) == 0)
13281 		internal_reloc->address = rela.r_offset;
13282 	      else
13283 		internal_reloc->address = rela.r_offset - sec->vma;
13284 
13285 	      if (r_sym (rela.r_info) == STN_UNDEF)
13286 		{
13287 		  /* FIXME: This and the error case below mean that we
13288 		     have a symbol on relocs that is not elf_symbol_type.  */
13289 		  internal_reloc->sym_ptr_ptr =
13290 		    bfd_abs_section_ptr->symbol_ptr_ptr;
13291 		}
13292 	      else if (r_sym (rela.r_info) > symcount)
13293 		{
13294 		  _bfd_error_handler
13295 		    /* xgettext:c-format */
13296 		    (_("%pB(%pA): relocation %zu has invalid symbol index %lu"),
13297 		     abfd, sec, i, (long) r_sym (rela.r_info));
13298 		  bfd_set_error (bfd_error_bad_value);
13299 		  internal_reloc->sym_ptr_ptr =
13300 		    bfd_abs_section_ptr->symbol_ptr_ptr;
13301 		  result = false;
13302 		}
13303 	      else
13304 		{
13305 		  asymbol **ps;
13306 
13307 		  ps = symbols + r_sym (rela.r_info) - 1;
13308 		  internal_reloc->sym_ptr_ptr = ps;
13309 		  /* Make sure that this symbol is not removed by strip.  */
13310 		  (*ps)->flags |= BSF_KEEP;
13311 		}
13312 
13313 	      internal_reloc->addend = rela.r_addend;
13314 
13315 	      res = ebd->elf_info_to_howto (abfd, internal_reloc, & rela);
13316 	      if (! res || internal_reloc->howto == NULL)
13317 		{
13318 #if DEBUG_SECONDARY_RELOCS
13319 		  fprintf (stderr,
13320 			   "there is no howto associated with reloc %lx\n",
13321 			   rela.r_info);
13322 #endif
13323 		  result = false;
13324 		}
13325 	    }
13326 
13327 	  free (native_relocs);
13328 	  /* Store the internal relocs.  */
13329 	  elf_section_data (relsec)->sec_info = internal_relocs;
13330 	}
13331     }
13332 
13333   return result;
13334 }
13335 
13336 /* Set the ELF section header fields of an output secondary reloc section.  */
13337 
13338 bool
13339 _bfd_elf_copy_special_section_fields (const bfd *ibfd ATTRIBUTE_UNUSED,
13340 				      bfd *obfd ATTRIBUTE_UNUSED,
13341 				      const Elf_Internal_Shdr *isection,
13342 				      Elf_Internal_Shdr *osection)
13343 {
13344   asection * isec;
13345   asection * osec;
13346   struct bfd_elf_section_data * esd;
13347 
13348   if (isection == NULL)
13349     return false;
13350 
13351   if (isection->sh_type != SHT_SECONDARY_RELOC)
13352     return true;
13353 
13354   isec = isection->bfd_section;
13355   if (isec == NULL)
13356     return false;
13357 
13358   osec = osection->bfd_section;
13359   if (osec == NULL)
13360     return false;
13361 
13362   esd = elf_section_data (osec);
13363   BFD_ASSERT (esd->sec_info == NULL);
13364   esd->sec_info = elf_section_data (isec)->sec_info;
13365   osection->sh_type = SHT_RELA;
13366   osection->sh_link = elf_onesymtab (obfd);
13367   if (osection->sh_link == 0)
13368     {
13369       /* There is no symbol table - we are hosed...  */
13370       _bfd_error_handler
13371 	/* xgettext:c-format */
13372 	(_("%pB(%pA): link section cannot be set"
13373 	   " because the output file does not have a symbol table"),
13374 	obfd, osec);
13375       bfd_set_error (bfd_error_bad_value);
13376       return false;
13377     }
13378 
13379   /* Find the output section that corresponds to the isection's
13380      sh_info link.  */
13381   if (isection->sh_info == 0
13382       || isection->sh_info >= elf_numsections (ibfd))
13383     {
13384       _bfd_error_handler
13385 	/* xgettext:c-format */
13386 	(_("%pB(%pA): info section index is invalid"),
13387 	obfd, osec);
13388       bfd_set_error (bfd_error_bad_value);
13389       return false;
13390     }
13391 
13392   isection = elf_elfsections (ibfd)[isection->sh_info];
13393 
13394   if (isection == NULL
13395       || isection->bfd_section == NULL
13396       || isection->bfd_section->output_section == NULL)
13397     {
13398       _bfd_error_handler
13399 	/* xgettext:c-format */
13400 	(_("%pB(%pA): info section index cannot be set"
13401 	   " because the section is not in the output"),
13402 	obfd, osec);
13403       bfd_set_error (bfd_error_bad_value);
13404       return false;
13405     }
13406 
13407   esd = elf_section_data (isection->bfd_section->output_section);
13408   BFD_ASSERT (esd != NULL);
13409   osection->sh_info = esd->this_idx;
13410   esd->has_secondary_relocs = true;
13411 #if DEBUG_SECONDARY_RELOCS
13412   fprintf (stderr, "update header of %s, sh_link = %u, sh_info = %u\n",
13413 	   osec->name, osection->sh_link, osection->sh_info);
13414   fprintf (stderr, "mark section %s as having secondary relocs\n",
13415 	   bfd_section_name (isection->bfd_section->output_section));
13416 #endif
13417 
13418   return true;
13419 }
13420 
13421 /* Write out a secondary reloc section.
13422 
13423    FIXME: Currently this function can result in a serious performance penalty
13424    for files with secondary relocs and lots of sections.  The proper way to
13425    fix this is for _bfd_elf_copy_special_section_fields() to chain secondary
13426    relocs together and then to have this function just walk that chain.  */
13427 
13428 bool
13429 _bfd_elf_write_secondary_reloc_section (bfd *abfd, asection *sec)
13430 {
13431   const struct elf_backend_data * const ebd = get_elf_backend_data (abfd);
13432   bfd_vma addr_offset;
13433   asection * relsec;
13434   bfd_vma (*r_info) (bfd_vma, bfd_vma);
13435   bool result = true;
13436 
13437   if (sec == NULL)
13438     return false;
13439 
13440 #if BFD_DEFAULT_TARGET_SIZE > 32
13441   if (bfd_arch_bits_per_address (abfd) != 32)
13442     r_info = elf64_r_info;
13443   else
13444 #endif
13445     r_info = elf32_r_info;
13446 
13447   /* The address of an ELF reloc is section relative for an object
13448      file, and absolute for an executable file or shared library.
13449      The address of a BFD reloc is always section relative.  */
13450   addr_offset = 0;
13451   if ((abfd->flags & (EXEC_P | DYNAMIC)) != 0)
13452     addr_offset = sec->vma;
13453 
13454   /* Discover if there are any secondary reloc sections
13455      associated with SEC.  */
13456   for (relsec = abfd->sections; relsec != NULL; relsec = relsec->next)
13457     {
13458       const struct bfd_elf_section_data * const esd = elf_section_data (relsec);
13459       Elf_Internal_Shdr * const hdr = (Elf_Internal_Shdr *) & esd->this_hdr;
13460 
13461       if (hdr->sh_type == SHT_RELA
13462 	  && hdr->sh_info == (unsigned) elf_section_data (sec)->this_idx)
13463 	{
13464 	  asymbol *    last_sym;
13465 	  int          last_sym_idx;
13466 	  size_t       reloc_count;
13467 	  size_t       idx;
13468 	  bfd_size_type entsize;
13469 	  arelent *    src_irel;
13470 	  bfd_byte *   dst_rela;
13471 
13472 	  if (hdr->contents != NULL)
13473 	    {
13474 	      _bfd_error_handler
13475 		/* xgettext:c-format */
13476 		(_("%pB(%pA): error: secondary reloc section processed twice"),
13477 		 abfd, relsec);
13478 	      bfd_set_error (bfd_error_bad_value);
13479 	      result = false;
13480 	      continue;
13481 	    }
13482 
13483 	  entsize = hdr->sh_entsize;
13484 	  if (entsize == 0)
13485 	    {
13486 	      _bfd_error_handler
13487 		/* xgettext:c-format */
13488 		(_("%pB(%pA): error: secondary reloc section"
13489 		   " has zero sized entries"),
13490 		 abfd, relsec);
13491 	      bfd_set_error (bfd_error_bad_value);
13492 	      result = false;
13493 	      continue;
13494 	    }
13495 	  else if (entsize != ebd->s->sizeof_rel
13496 		   && entsize != ebd->s->sizeof_rela)
13497 	    {
13498 	      _bfd_error_handler
13499 		/* xgettext:c-format */
13500 		(_("%pB(%pA): error: secondary reloc section"
13501 		   " has non-standard sized entries"),
13502 		 abfd, relsec);
13503 	      bfd_set_error (bfd_error_bad_value);
13504 	      result = false;
13505 	      continue;
13506 	    }
13507 
13508 	  reloc_count = hdr->sh_size / entsize;
13509 	  hdr->sh_size = entsize * reloc_count;
13510 	  if (reloc_count == 0)
13511 	    {
13512 	      _bfd_error_handler
13513 		/* xgettext:c-format */
13514 		(_("%pB(%pA): error: secondary reloc section is empty!"),
13515 		 abfd, relsec);
13516 	      bfd_set_error (bfd_error_bad_value);
13517 	      result = false;
13518 	      continue;
13519 	    }
13520 
13521 	  hdr->contents = bfd_alloc (abfd, hdr->sh_size);
13522 	  if (hdr->contents == NULL)
13523 	    continue;
13524 
13525 #if DEBUG_SECONDARY_RELOCS
13526 	  fprintf (stderr, "write %u secondary relocs for %s from %s\n",
13527 		   reloc_count, sec->name, relsec->name);
13528 #endif
13529 	  last_sym = NULL;
13530 	  last_sym_idx = 0;
13531 	  dst_rela = hdr->contents;
13532 	  src_irel = (arelent *) esd->sec_info;
13533 	  if (src_irel == NULL)
13534 	    {
13535 	      _bfd_error_handler
13536 		/* xgettext:c-format */
13537 		(_("%pB(%pA): error: internal relocs missing"
13538 		   " for secondary reloc section"),
13539 		 abfd, relsec);
13540 	      bfd_set_error (bfd_error_bad_value);
13541 	      result = false;
13542 	      continue;
13543 	    }
13544 
13545 	  for (idx = 0; idx < reloc_count; idx++, dst_rela += entsize)
13546 	    {
13547 	      Elf_Internal_Rela src_rela;
13548 	      arelent *ptr;
13549 	      asymbol *sym;
13550 	      int n;
13551 
13552 	      ptr = src_irel + idx;
13553 	      if (ptr == NULL)
13554 		{
13555 		  _bfd_error_handler
13556 		    /* xgettext:c-format */
13557 		    (_("%pB(%pA): error: reloc table entry %zu is empty"),
13558 		     abfd, relsec, idx);
13559 		  bfd_set_error (bfd_error_bad_value);
13560 		  result = false;
13561 		  break;
13562 		}
13563 
13564 	      if (ptr->sym_ptr_ptr == NULL)
13565 		{
13566 		  /* FIXME: Is this an error ? */
13567 		  n = 0;
13568 		}
13569 	      else
13570 		{
13571 		  sym = *ptr->sym_ptr_ptr;
13572 
13573 		  if (sym == last_sym)
13574 		    n = last_sym_idx;
13575 		  else
13576 		    {
13577 		      n = _bfd_elf_symbol_from_bfd_symbol (abfd, & sym);
13578 		      if (n < 0)
13579 			{
13580 			  _bfd_error_handler
13581 			    /* xgettext:c-format */
13582 			    (_("%pB(%pA): error: secondary reloc %zu"
13583 			       " references a missing symbol"),
13584 			     abfd, relsec, idx);
13585 			  bfd_set_error (bfd_error_bad_value);
13586 			  result = false;
13587 			  n = 0;
13588 			}
13589 
13590 		      last_sym = sym;
13591 		      last_sym_idx = n;
13592 		    }
13593 
13594 		  if (sym->the_bfd != NULL
13595 		      && sym->the_bfd->xvec != abfd->xvec
13596 		      && ! _bfd_elf_validate_reloc (abfd, ptr))
13597 		    {
13598 		      _bfd_error_handler
13599 			/* xgettext:c-format */
13600 			(_("%pB(%pA): error: secondary reloc %zu"
13601 			   " references a deleted symbol"),
13602 			 abfd, relsec, idx);
13603 		      bfd_set_error (bfd_error_bad_value);
13604 		      result = false;
13605 		      n = 0;
13606 		    }
13607 		}
13608 
13609 	      src_rela.r_offset = ptr->address + addr_offset;
13610 	      if (ptr->howto == NULL)
13611 		{
13612 		  _bfd_error_handler
13613 		    /* xgettext:c-format */
13614 		    (_("%pB(%pA): error: secondary reloc %zu"
13615 		       " is of an unknown type"),
13616 		     abfd, relsec, idx);
13617 		  bfd_set_error (bfd_error_bad_value);
13618 		  result = false;
13619 		  src_rela.r_info = r_info (0, 0);
13620 		}
13621 	      else
13622 		src_rela.r_info = r_info (n, ptr->howto->type);
13623 	      src_rela.r_addend = ptr->addend;
13624 
13625 	      if (entsize == ebd->s->sizeof_rel)
13626 		ebd->s->swap_reloc_out (abfd, &src_rela, dst_rela);
13627 	      else /* entsize == ebd->s->sizeof_rela */
13628 		ebd->s->swap_reloca_out (abfd, &src_rela, dst_rela);
13629 	    }
13630 	}
13631     }
13632 
13633   return result;
13634 }
13635