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