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