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