Home | History | Annotate | Download | only in src
      1 /* Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2008 Red Hat, Inc.
      2    This file is part of Red Hat elfutils.
      3    Written by Ulrich Drepper <drepper (at) redhat.com>, 2001.
      4 
      5    Red Hat elfutils is free software; you can redistribute it and/or modify
      6    it under the terms of the GNU General Public License as published by the
      7    Free Software Foundation; version 2 of the License.
      8 
      9    Red Hat elfutils is distributed in the hope that it will be useful, but
     10    WITHOUT ANY WARRANTY; without even the implied warranty of
     11    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     12    General Public License for more details.
     13 
     14    You should have received a copy of the GNU General Public License along
     15    with Red Hat elfutils; if not, write to the Free Software Foundation,
     16    Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
     17 
     18    Red Hat elfutils is an included package of the Open Invention Network.
     19    An included package of the Open Invention Network is a package for which
     20    Open Invention Network licensees cross-license their patents.  No patent
     21    license is granted, either expressly or impliedly, by designation as an
     22    included package.  Should you wish to participate in the Open Invention
     23    Network licensing program, please visit www.openinventionnetwork.com
     24    <http://www.openinventionnetwork.com>.  */
     25 
     26 #ifdef HAVE_CONFIG_H
     27 # include <config.h>
     28 #endif
     29 
     30 #include <assert.h>
     31 #include <ctype.h>
     32 #include <dlfcn.h>
     33 #include <errno.h>
     34 #include <error.h>
     35 #include <fcntl.h>
     36 #include <fnmatch.h>
     37 #include <gelf.h>
     38 #include <inttypes.h>
     39 #include <libintl.h>
     40 #include <stdbool.h>
     41 #include <stdio_ext.h>
     42 #include <stdlib.h>
     43 #include <string.h>
     44 #include <unistd.h>
     45 #include <sys/param.h>
     46 #include <sys/stat.h>
     47 
     48 #include <elf-knowledge.h>
     49 #include "ld.h"
     50 #include "list.h"
     51 #include <md5.h>
     52 #include <sha1.h>
     53 #include <system.h>
     54 
     55 
     56 /* Header of .eh_frame_hdr section.  */
     57 struct unw_eh_frame_hdr
     58 {
     59   unsigned char version;
     60   unsigned char eh_frame_ptr_enc;
     61   unsigned char fde_count_enc;
     62   unsigned char table_enc;
     63 };
     64 #define EH_FRAME_HDR_VERSION 1
     65 
     66 
     67 /* Prototypes for local functions.  */
     68 static const char **ld_generic_lib_extensions (struct ld_state *)
     69      __attribute__ ((__const__));
     70 static int ld_generic_file_close (struct usedfiles *fileinfo,
     71 				  struct ld_state *statep);
     72 static int ld_generic_file_process (int fd, struct usedfiles *fileinfo,
     73 				    struct ld_state *statep,
     74 				    struct usedfiles **nextp);
     75 static void ld_generic_generate_sections (struct ld_state *statep);
     76 static void ld_generic_create_sections (struct ld_state *statep);
     77 static int ld_generic_flag_unresolved (struct ld_state *statep);
     78 static int ld_generic_open_outfile (struct ld_state *statep, int machine,
     79 				    int class, int data);
     80 static int ld_generic_create_outfile (struct ld_state *statep);
     81 static void ld_generic_relocate_section (struct ld_state *statep,
     82 					 Elf_Scn *outscn,
     83 					 struct scninfo *firstp,
     84 					 const Elf32_Word *dblindirect);
     85 static int ld_generic_finalize (struct ld_state *statep);
     86 static bool ld_generic_special_section_number_p (struct ld_state *statep,
     87 						 size_t number);
     88 static bool ld_generic_section_type_p (struct ld_state *statep,
     89 				       XElf_Word type);
     90 static XElf_Xword ld_generic_dynamic_section_flags (struct ld_state *statep);
     91 static void ld_generic_initialize_plt (struct ld_state *statep, Elf_Scn *scn);
     92 static void ld_generic_initialize_pltrel (struct ld_state *statep,
     93 					  Elf_Scn *scn);
     94 static void ld_generic_initialize_got (struct ld_state *statep, Elf_Scn *scn);
     95 static void ld_generic_initialize_gotplt (struct ld_state *statep,
     96 					  Elf_Scn *scn);
     97 static void ld_generic_finalize_plt (struct ld_state *statep, size_t nsym,
     98 				     size_t nsym_dyn,
     99 				     struct symbol **ndxtosymp);
    100 static int ld_generic_rel_type (struct ld_state *statep);
    101 static void ld_generic_count_relocations (struct ld_state *statep,
    102 					  struct scninfo *scninfo);
    103 static void ld_generic_create_relocations (struct ld_state *statep,
    104 					   const Elf32_Word *dblindirect);
    105 
    106 static int file_process2 (struct usedfiles *fileinfo);
    107 static void mark_section_used (struct scninfo *scninfo, Elf32_Word shndx,
    108 			       struct scninfo **grpscnp);
    109 
    110 
    111 /* Map symbol index to struct symbol record.  */
    112 static struct symbol **ndxtosym;
    113 
    114 /* String table reference to all symbols in the symbol table.  */
    115 static struct Ebl_Strent **symstrent;
    116 
    117 
    118 /* Check whether file associated with FD is a DSO.  */
    119 static bool
    120 is_dso_p (int fd)
    121 {
    122   /* We have to read the 'e_type' field.  It has the same size (16
    123      bits) in 32- and 64-bit ELF.  */
    124   XElf_Half e_type;
    125 
    126   return (pread (fd, &e_type, sizeof (e_type), offsetof (XElf_Ehdr, e_type))
    127 	  == sizeof (e_type)
    128 	  && e_type == ET_DYN);
    129 }
    130 
    131 
    132 /* Print the complete name of a file, including the archive it is
    133    contained in.  */
    134 static int
    135 print_file_name (FILE *s, struct usedfiles *fileinfo, int first_level,
    136 		 int newline)
    137 {
    138   int npar = 0;
    139 
    140   if (fileinfo->archive_file != NULL)
    141     {
    142       npar = print_file_name (s, fileinfo->archive_file, 0, 0) + 1;
    143       fputc_unlocked ('(', s);
    144       fputs_unlocked (fileinfo->rfname, s);
    145 
    146       if (first_level)
    147 	while (npar-- > 0)
    148 	  fputc_unlocked (')', s);
    149     }
    150   else
    151     fputs_unlocked (fileinfo->rfname, s);
    152 
    153   if (first_level && newline)
    154     fputc_unlocked ('\n', s);
    155 
    156   return npar;
    157 }
    158 
    159 
    160 /* Function to determine whether an object will be dynamically linked.  */
    161 bool
    162 dynamically_linked_p (void)
    163 {
    164   return (ld_state.file_type == dso_file_type || ld_state.nplt > 0
    165 	  || ld_state.ngot > 0);
    166 }
    167 
    168 
    169 bool
    170 linked_from_dso_p (struct scninfo *scninfo, size_t symidx)
    171 {
    172   struct usedfiles *file = scninfo->fileinfo;
    173 
    174   /* If this symbol is not undefined in this file it cannot come from
    175      a DSO.  */
    176   if (symidx < file->nlocalsymbols)
    177     return false;
    178 
    179   struct symbol *sym = file->symref[symidx];
    180 
    181   return sym->defined && sym->in_dso;
    182 }
    183 
    184 
    185 /* Initialize state object.  This callback function is called after the
    186    parameters are parsed but before any file is searched for.  */
    187 int
    188 ld_prepare_state (const char *emulation)
    189 {
    190   /* When generating DSO we normally allow undefined symbols.  */
    191   ld_state.nodefs = true;
    192 
    193   /* To be able to detect problems we add a .comment section entry by
    194      default.  */
    195   ld_state.add_ld_comment = true;
    196 
    197   /* XXX We probably should find a better place for this.  The index
    198      of the first user-defined version is 2.  */
    199   ld_state.nextveridx = 2;
    200 
    201   /* Pick an not too small number for the initial size of the tables.  */
    202   ld_symbol_tab_init (&ld_state.symbol_tab, 1027);
    203   ld_section_tab_init (&ld_state.section_tab, 67);
    204   ld_version_str_tab_init (&ld_state.version_str_tab, 67);
    205 
    206   /* Initialize the section header string table.  */
    207   ld_state.shstrtab = ebl_strtabinit (true);
    208   if (ld_state.shstrtab == NULL)
    209     error (EXIT_FAILURE, errno, gettext ("cannot create string table"));
    210 
    211   /* Initialize the callbacks.  These are the defaults, the appropriate
    212      backend can later install its own callbacks.  */
    213   ld_state.callbacks.lib_extensions = ld_generic_lib_extensions;
    214   ld_state.callbacks.file_process = ld_generic_file_process;
    215   ld_state.callbacks.file_close = ld_generic_file_close;
    216   ld_state.callbacks.generate_sections = ld_generic_generate_sections;
    217   ld_state.callbacks.create_sections = ld_generic_create_sections;
    218   ld_state.callbacks.flag_unresolved = ld_generic_flag_unresolved;
    219   ld_state.callbacks.open_outfile = ld_generic_open_outfile;
    220   ld_state.callbacks.create_outfile = ld_generic_create_outfile;
    221   ld_state.callbacks.relocate_section = ld_generic_relocate_section;
    222   ld_state.callbacks.finalize = ld_generic_finalize;
    223   ld_state.callbacks.special_section_number_p =
    224     ld_generic_special_section_number_p;
    225   ld_state.callbacks.section_type_p = ld_generic_section_type_p;
    226   ld_state.callbacks.dynamic_section_flags = ld_generic_dynamic_section_flags;
    227   ld_state.callbacks.initialize_plt = ld_generic_initialize_plt;
    228   ld_state.callbacks.initialize_pltrel = ld_generic_initialize_pltrel;
    229   ld_state.callbacks.initialize_got = ld_generic_initialize_got;
    230   ld_state.callbacks.initialize_gotplt = ld_generic_initialize_gotplt;
    231   ld_state.callbacks.finalize_plt = ld_generic_finalize_plt;
    232   ld_state.callbacks.rel_type = ld_generic_rel_type;
    233   ld_state.callbacks.count_relocations = ld_generic_count_relocations;
    234   ld_state.callbacks.create_relocations = ld_generic_create_relocations;
    235 
    236 #ifndef BASE_ELF_NAME
    237   /* Find the ld backend library.  Use EBL to determine the name if
    238      the user hasn't provided one on the command line.  */
    239   if (emulation == NULL)
    240     {
    241       emulation = ebl_backend_name (ld_state.ebl);
    242       assert (emulation != NULL);
    243     }
    244   size_t emulation_len = strlen (emulation);
    245 
    246   /* Construct the file name.  */
    247   char *fname = (char *) alloca (sizeof "libld_" - 1 + emulation_len
    248 				 + sizeof ".so");
    249   strcpy (mempcpy (stpcpy (fname, "libld_"), emulation, emulation_len), ".so");
    250 
    251   /* Try loading.  */
    252   void *h = dlopen (fname, RTLD_LAZY);
    253   if (h == NULL)
    254     error (EXIT_FAILURE, 0,
    255 	   gettext ("cannot load ld backend library '%s': %s"),
    256 	   fname, dlerror ());
    257 
    258   /* Find the initializer.  It must be present.  */
    259   char *initname = (char *) alloca (emulation_len + sizeof "_ld_init");
    260   strcpy (mempcpy (initname, emulation, emulation_len), "_ld_init");
    261   int (*initfct) (struct ld_state *)
    262     = (int (*) (struct ld_state *)) dlsym (h, initname);
    263 
    264   if (initfct == NULL)
    265     error (EXIT_FAILURE, 0, gettext ("\
    266 cannot find init function in ld backend library '%s': %s"),
    267 	   fname, dlerror ());
    268 
    269   /* Store the handle.  */
    270   ld_state.ldlib = h;
    271 
    272   /* Call the init function.  */
    273   return initfct (&ld_state);
    274 #else
    275 # define INIT_FCT_NAME(base) _INIT_FCT_NAME(base)
    276 # define _INIT_FCT_NAME(base) base##_ld_init
    277   /* Declare and call the initialization function.  */
    278   extern int INIT_FCT_NAME(BASE_ELF_NAME) (struct ld_state *);
    279   return INIT_FCT_NAME(BASE_ELF_NAME) (&ld_state);
    280 #endif
    281 }
    282 
    283 
    284 static int
    285 check_for_duplicate2 (struct usedfiles *newp, struct usedfiles *list)
    286 {
    287   struct usedfiles *first;
    288   struct usedfiles *prevp;
    289 
    290   if (list == NULL)
    291     return 0;
    292 
    293   prevp = list;
    294   list = first = list->next;
    295   do
    296     {
    297       /* When searching the needed list we might come across entries
    298 	 for files which are not yet opened.  Stop then, there is
    299 	 nothing more to test.  */
    300       if (likely (list->status == not_opened))
    301 	break;
    302 
    303       if (unlikely (list->ino == newp->ino)
    304 	  && unlikely (list->dev == newp->dev))
    305 	{
    306 	  close (newp->fd);
    307 	  newp->fd = -1;
    308 	  newp->status = closed;
    309 	  if (newp->file_type == relocatable_file_type)
    310 	    error (0, 0, gettext ("%s listed more than once as input"),
    311 		   newp->rfname);
    312 
    313 	  return 1;
    314 	}
    315       list = list->next;
    316     }
    317   while (likely (list != first));
    318 
    319   return 0;
    320 }
    321 
    322 
    323 static int
    324 check_for_duplicate (struct usedfiles *newp)
    325 {
    326   struct stat st;
    327 
    328   if (unlikely (fstat (newp->fd, &st) < 0))
    329     {
    330       close (newp->fd);
    331       return errno;
    332     }
    333 
    334   newp->dev = st.st_dev;
    335   newp->ino = st.st_ino;
    336 
    337   return (check_for_duplicate2 (newp, ld_state.relfiles)
    338 	  || check_for_duplicate2 (newp, ld_state.dsofiles)
    339 	  || check_for_duplicate2 (newp, ld_state.needed));
    340 }
    341 
    342 
    343 /* Find a file along the path described in the state.  */
    344 static int
    345 open_along_path2 (struct usedfiles *fileinfo, struct pathelement *path)
    346 {
    347   const char *fname = fileinfo->fname;
    348   size_t fnamelen = strlen (fname);
    349   int err = ENOENT;
    350   struct pathelement *firstp = path;
    351 
    352   if (path == NULL)
    353     /* Cannot find anything since we have no path.  */
    354     return ENOENT;
    355 
    356   do
    357     {
    358       if (likely (path->exist >= 0))
    359 	{
    360 	  /* Create the file name.  */
    361 	  char *rfname = NULL;
    362 	  size_t dirlen = strlen (path->pname);
    363 	  int fd = -1;
    364 
    365 	  if (fileinfo->file_type == archive_file_type)
    366 	    {
    367 	      const char **exts = (ld_state.statically
    368 				   ? (const char *[2]) { ".a", NULL }
    369 				   : LIB_EXTENSION (&ld_state));
    370 
    371 	      /* We have to create the actual file name.  We prepend "lib"
    372 		 and add one of the extensions the platform has.  */
    373 	      while (*exts != NULL)
    374 		{
    375 		  size_t extlen = strlen (*exts);
    376 		  rfname = (char *) alloca (dirlen + 5 + fnamelen + extlen);
    377 		  memcpy (mempcpy (stpcpy (mempcpy (rfname, path->pname,
    378 						    dirlen),
    379 					   "/lib"),
    380 				   fname, fnamelen),
    381 			  *exts, extlen + 1);
    382 
    383 		  fd = open (rfname, O_RDONLY);
    384 		  if (likely (fd != -1) || errno != ENOENT)
    385 		    {
    386 		      err = fd == -1 ? errno : 0;
    387 		      break;
    388 		    }
    389 
    390 		  /* Next extension.  */
    391 		  ++exts;
    392 		}
    393 	    }
    394 	  else
    395 	    {
    396 	      assert (fileinfo->file_type == dso_file_type
    397 		      || fileinfo->file_type == dso_needed_file_type);
    398 
    399 	      rfname = (char *) alloca (dirlen + 1 + fnamelen + 1);
    400 	      memcpy (stpcpy (mempcpy (rfname, path->pname, dirlen), "/"),
    401 		      fname, fnamelen + 1);
    402 
    403 	      fd = open (rfname, O_RDONLY);
    404 	      if (unlikely (fd == -1))
    405 		err = errno;
    406 	    }
    407 
    408 	  if (likely (fd != -1))
    409 	    {
    410 	      /* We found the file.  This also means the directory
    411 		 exists.  */
    412 	      fileinfo->fd = fd;
    413 	      path->exist = 1;
    414 
    415 	      /* Check whether we have this file already loaded.  */
    416 	      if (unlikely (check_for_duplicate (fileinfo) != 0))
    417 		return EAGAIN;
    418 
    419 	      /* Make a copy of the name.  */
    420 	      fileinfo->rfname = obstack_strdup (&ld_state.smem, rfname);
    421 
    422 	      if (unlikely (ld_state.trace_files))
    423 		printf (fileinfo->file_type == archive_file_type
    424 			? gettext ("%s (for -l%s)\n")
    425 			: gettext ("%s (for DT_NEEDED %s)\n"),
    426 			rfname, fname);
    427 
    428 	      return 0;
    429 	    }
    430 
    431 	  /* The file does not exist.  Maybe the whole directory doesn't.
    432 	     Check it unless we know it exists.  */
    433 	  if (unlikely (path->exist == 0))
    434 	    {
    435 	      struct stat st;
    436 
    437 	      /* Keep only the directory name.  Note that the path
    438 		 might be relative.  This doesn't matter here.  We do
    439 		 the test in any case even if there is the chance that
    440 		 somebody wants to change the programs working
    441 		 directory at some point which would make the result
    442 		 of this test void.  Since changing the working
    443 		 directory is completely wrong we are not taking this
    444 		 case into account.  */
    445 	      rfname[dirlen] = '\0';
    446 	      if (unlikely (stat (rfname, &st) < 0) || ! S_ISDIR (st.st_mode))
    447 		/* The directory does not exist or the named file is no
    448 		   directory.  */
    449 		path->exist = -1;
    450 	      else
    451 		path->exist = 1;
    452 	    }
    453 	}
    454 
    455       /* Next path element.  */
    456       path = path->next;
    457     }
    458   while (likely (err == ENOENT && path != firstp));
    459 
    460   return err;
    461 }
    462 
    463 
    464 static int
    465 open_along_path (struct usedfiles *fileinfo)
    466 {
    467   const char *fname = fileinfo->fname;
    468   int err = ENOENT;
    469 
    470   if (fileinfo->file_type == relocatable_file_type)
    471     {
    472       /* Only libraries are searched along the path.  */
    473       fileinfo->fd = open (fname, O_RDONLY);
    474 
    475       if (likely (fileinfo->fd != -1))
    476 	{
    477 	  /* We found the file.  */
    478 	  if (unlikely (ld_state.trace_files))
    479 	    print_file_name (stdout, fileinfo, 1, 1);
    480 
    481 	  return check_for_duplicate (fileinfo);
    482 	}
    483 
    484       /* If the name is an absolute path we are done.  */
    485       err = errno;
    486     }
    487   else
    488     {
    489       /* If the user specified two parts to the LD_LIBRARY_PATH variable
    490 	 try the first part now.  */
    491       err = open_along_path2 (fileinfo, ld_state.ld_library_path1);
    492 
    493       /* Try the user-specified path next.  */
    494       if (err == ENOENT)
    495 	err = open_along_path2 (fileinfo,
    496 				fileinfo->file_type == archive_file_type
    497 				? ld_state.paths : ld_state.rpath_link);
    498 
    499       /* Then the second part of the LD_LIBRARY_PATH value.  */
    500       if (unlikely (err == ENOENT))
    501 	{
    502 	  err = open_along_path2 (fileinfo, ld_state.ld_library_path2);
    503 
    504 	  /* In case we look for a DSO handle now the RUNPATH.  */
    505 	  if (err == ENOENT)
    506 	    {
    507 	      if (fileinfo->file_type == dso_file_type)
    508 		err = open_along_path2 (fileinfo, ld_state.runpath_link);
    509 
    510 	      /* Finally the path from the default linker script.  */
    511 	      if (err == ENOENT)
    512 		err = open_along_path2 (fileinfo, ld_state.default_paths);
    513 	    }
    514 	}
    515     }
    516 
    517   if (unlikely (err != 0)
    518       && (err != EAGAIN || fileinfo->file_type == relocatable_file_type))
    519     error (0, err, gettext ("cannot open %s"), fileinfo->fname);
    520 
    521   return err;
    522 }
    523 
    524 
    525 static int
    526 matching_group_comdat_scn (const XElf_Sym *sym, size_t shndx,
    527 			   struct usedfiles *fileinfo, struct symbol *oldp)
    528 {
    529   if ((shndx >= SHN_LORESERVE && shndx <= SHN_HIRESERVE)
    530       || (oldp->scndx >= SHN_LORESERVE && oldp->scndx <= SHN_HIRESERVE))
    531     /* Cannot be a group COMDAT section.  */
    532     return 0;
    533 
    534   size_t newgrpid = fileinfo->scninfo[shndx].grpid;
    535   size_t oldgrpid = oldp->file->scninfo[oldp->scndx].grpid;
    536   if (newgrpid == 0 || oldgrpid == 0)
    537     return 0;
    538 
    539   assert (SCNINFO_SHDR (fileinfo->scninfo[newgrpid].shdr).sh_type
    540 	  == SHT_GROUP);
    541   assert (SCNINFO_SHDR (oldp->file->scninfo[oldgrpid].shdr).sh_type
    542 	  == SHT_GROUP);
    543 
    544   if (! fileinfo->scninfo[newgrpid].comdat_group
    545       || ! oldp->file->scninfo[oldgrpid].comdat_group)
    546     return 0;
    547 
    548   if (strcmp (fileinfo->scninfo[newgrpid].symbols->name,
    549 	      oldp->file->scninfo[oldgrpid].symbols->name) != 0)
    550     return 0;
    551 
    552   /* This is a matching, duplicate COMDAT group section.  Ignore it.  */
    553   return 1;
    554 }
    555 
    556 
    557 static void
    558 check_type_and_size (const XElf_Sym *sym, struct usedfiles *fileinfo,
    559 		     struct symbol *oldp)
    560 {
    561   /* We check the type and size of the symbols.  In both cases the
    562      information can be missing (size is zero, type is STT_NOTYPE) in
    563      which case we issue no warnings.  Otherwise everything must
    564      match.  If the type does not match there is no point in checking
    565      the size.  */
    566 
    567   if (XELF_ST_TYPE (sym->st_info) != STT_NOTYPE && oldp->type != STT_NOTYPE
    568       && unlikely (oldp->type != XELF_ST_TYPE (sym->st_info)))
    569     {
    570       char buf1[64];
    571       char buf2[64];
    572 
    573       error (0, 0, gettext ("\
    574 Warning: type of `%s' changed from %s in %s to %s in %s"),
    575 	     oldp->name,
    576 	     ebl_symbol_type_name (ld_state.ebl, oldp->type,
    577 				   buf1, sizeof (buf1)),
    578 	     oldp->file->rfname,
    579 	     ebl_symbol_type_name (ld_state.ebl, XELF_ST_TYPE (sym->st_info),
    580 				   buf2, sizeof (buf2)),
    581 	     fileinfo->rfname);
    582     }
    583   else if (XELF_ST_TYPE (sym->st_info) == STT_OBJECT
    584 	   && oldp->size != 0
    585 	   && unlikely (oldp->size != sym->st_size))
    586     error (0, 0, gettext ("\
    587 Warning: size of `%s' changed from %" PRIu64 " in %s to %" PRIu64 " in %s"),
    588 	   oldp->name, (uint64_t) oldp->size, oldp->file->rfname,
    589 	   (uint64_t) sym->st_size, fileinfo->rfname);
    590 }
    591 
    592 
    593 static int
    594 check_definition (const XElf_Sym *sym, size_t shndx, size_t symidx,
    595 		  struct usedfiles *fileinfo, struct symbol *oldp)
    596 {
    597   int result = 0;
    598   bool old_in_dso = FILEINFO_EHDR (oldp->file->ehdr).e_type == ET_DYN;
    599   bool new_in_dso = FILEINFO_EHDR (fileinfo->ehdr).e_type == ET_DYN;
    600   bool use_new_def = false;
    601 
    602   if (shndx != SHN_UNDEF
    603       && (! oldp->defined
    604 	  || (shndx != SHN_COMMON && oldp->common && ! new_in_dso)
    605 	  || (old_in_dso && ! new_in_dso)))
    606     {
    607       /* We found a definition for a previously undefined symbol or a
    608 	 real definition for a previous common-only definition or a
    609 	 redefinition of a symbol definition in an object file
    610 	 previously defined in a DSO.  First perform some tests which
    611 	 will show whether the common is really matching the
    612 	 definition.  */
    613       check_type_and_size (sym, fileinfo, oldp);
    614 
    615       /* We leave the next element intact to not interrupt the list
    616 	 with the unresolved symbols.  Whoever walks the list will
    617 	 have to check the `defined' flag.  But we remember that this
    618 	 list element is not unresolved anymore.  */
    619       if (! oldp->defined)
    620 	{
    621 	  /* Remove from the list.  */
    622 	  --ld_state.nunresolved;
    623 	  if (! oldp->weak)
    624 	    --ld_state.nunresolved_nonweak;
    625 	  CDBL_LIST_DEL (ld_state.unresolved, oldp);
    626 	}
    627       else if (oldp->common)
    628 	/* Remove from the list.  */
    629 	CDBL_LIST_DEL (ld_state.common_syms, oldp);
    630 
    631       /* Use the values of the definition from now on.  */
    632       use_new_def = true;
    633     }
    634   else if (shndx != SHN_UNDEF
    635 	   && oldp->defined
    636 	   && matching_group_comdat_scn (sym, shndx, fileinfo, oldp))
    637     /* The duplicate symbol is in a group COMDAT section with the same
    638        signature as the one containing the original definition.
    639        Just ignore the second definition.  */
    640     /* nothing */;
    641   else if (shndx != SHN_UNDEF
    642 	   && unlikely (! oldp->common)
    643 	   && oldp->defined
    644 	   && shndx != SHN_COMMON
    645 	   /* Multiple definitions are no fatal errors if the -z muldefs flag
    646 	      is used.  We don't warn about the multiple definition unless we
    647 	      are told to be verbose.  */
    648 	   && (!ld_state.muldefs || verbose)
    649 	   && ! old_in_dso && fileinfo->file_type == relocatable_file_type)
    650     {
    651       /* We have a double definition.  This is a problem.  */
    652       char buf[64];
    653       XElf_Sym_vardef (oldsym);
    654       struct usedfiles *oldfile;
    655       const char *scnname;
    656       Elf32_Word xndx;
    657       size_t shnum;
    658 
    659       if (elf_getshnum (fileinfo->elf, &shnum) < 0)
    660 	error (EXIT_FAILURE, 0,
    661 	       gettext ("cannot determine number of sections: %s"),
    662 	       elf_errmsg (-1));
    663 
    664       /* XXX Use only ebl_section_name.  */
    665       if (shndx < SHN_LORESERVE || (shndx > SHN_HIRESERVE && shndx < shnum))
    666 	scnname = elf_strptr (fileinfo->elf,
    667 			      fileinfo->shstrndx,
    668 			      SCNINFO_SHDR (fileinfo->scninfo[shndx].shdr).sh_name);
    669       else
    670 	// XXX extended section
    671 	scnname = ebl_section_name (ld_state.ebl, shndx, 0, buf, sizeof (buf),
    672 				    NULL, shnum);
    673 
    674       /* XXX Print source file and line number.  */
    675       print_file_name (stderr, fileinfo, 1, 0);
    676       fprintf (stderr,
    677 	       gettext ("(%s+%#" PRIx64 "): multiple definition of %s `%s'\n"),
    678 	       scnname,
    679 	       (uint64_t) sym->st_value,
    680 	       ebl_symbol_type_name (ld_state.ebl, XELF_ST_TYPE (sym->st_info),
    681 				     buf, sizeof (buf)),
    682 	       oldp->name);
    683 
    684       oldfile = oldp->file;
    685       xelf_getsymshndx (oldfile->symtabdata, oldfile->xndxdata, oldp->symidx,
    686 			oldsym, xndx);
    687       assert (oldsym != NULL);
    688 
    689       /* XXX Use only ebl_section_name.  */
    690       if (oldp->scndx < SHN_LORESERVE || oldp->scndx > SHN_HIRESERVE)
    691 	scnname = elf_strptr (oldfile->elf,
    692 			      oldfile->shstrndx,
    693 			      SCNINFO_SHDR (oldfile->scninfo[shndx].shdr).sh_name);
    694       else
    695 	scnname = ebl_section_name (ld_state.ebl, oldp->scndx, oldp->scndx,
    696 				    buf, sizeof (buf), NULL, shnum);
    697 
    698       /* XXX Print source file and line number.  */
    699       print_file_name (stderr, oldfile, 1, 0);
    700       fprintf (stderr, gettext ("(%s+%#" PRIx64 "): first defined here\n"),
    701 	       scnname, (uint64_t) oldsym->st_value);
    702 
    703       if (likely (!ld_state.muldefs))
    704 	result = 1;
    705     }
    706   else if (old_in_dso && fileinfo->file_type == relocatable_file_type
    707 	   && shndx != SHN_UNDEF)
    708     /* We use the definition from a normal relocatable file over the
    709        definition in a DSO.  This is what the dynamic linker would
    710        do, too.  */
    711     use_new_def = true;
    712   else if (old_in_dso && !new_in_dso && oldp->defined && !oldp->on_dsolist)
    713     {
    714       CDBL_LIST_ADD_REAR (ld_state.from_dso, oldp);
    715       ++ld_state.nfrom_dso;
    716 
    717       /* If the object is a function we allocate a PLT entry,
    718 	 otherwise only a GOT entry.  */
    719       if (oldp->type == STT_FUNC)
    720 	++ld_state.nplt;
    721       else
    722 	++ld_state.ngot;
    723 
    724       oldp->on_dsolist = 1;
    725     }
    726   else if (oldp->common && shndx == SHN_COMMON)
    727     {
    728       /* The symbol size is the largest of all common definitions.  */
    729       oldp->size = MAX (oldp->size, sym->st_size);
    730       /* Similarly for the alignment.  */
    731       oldp->merge.value = MAX (oldp->merge.value, sym->st_value);
    732     }
    733 
    734   if (unlikely (use_new_def))
    735     {
    736       /* Adjust the symbol record appropriately and remove
    737 	 the symbol from the list of symbols which are taken from DSOs.  */
    738       if (old_in_dso && fileinfo->file_type == relocatable_file_type)
    739 	{
    740 	  CDBL_LIST_DEL (ld_state.from_dso, oldp);
    741 	  --ld_state.nfrom_dso;
    742 
    743 	  if (likely (oldp->type == STT_FUNC))
    744 	    --ld_state.nplt;
    745 	  else
    746 	    --ld_state.ngot;
    747 
    748 	  oldp->on_dsolist = 0;
    749 	}
    750 
    751       /* Use the values of the definition from now on.  */
    752       oldp->size = sym->st_size;
    753       oldp->type = XELF_ST_TYPE (sym->st_info);
    754       oldp->symidx = symidx;
    755       oldp->scndx = shndx;
    756       //oldp->symscndx = THESYMSCNDX must be passed;
    757       oldp->file = fileinfo;
    758       oldp->defined = 1;
    759       oldp->in_dso = new_in_dso;
    760       oldp->common = shndx == SHN_COMMON;
    761       if (likely (fileinfo->file_type == relocatable_file_type))
    762 	{
    763 	  /* If the definition comes from a DSO we pertain the weak flag
    764 	     and it's indicating whether the reference is weak or not.  */
    765 	  oldp->weak = XELF_ST_BIND (sym->st_info) == STB_WEAK;
    766 
    767 	  // XXX Really exclude SHN_ABS?
    768 	  if (shndx != SHN_COMMON && shndx != SHN_ABS)
    769 	    {
    770 	      struct scninfo *ignore;
    771 	      mark_section_used (&fileinfo->scninfo[shndx], shndx, &ignore);
    772 	    }
    773 	}
    774 
    775       /* Add to the list of symbols used from DSOs if necessary.  */
    776       if (new_in_dso && !old_in_dso)
    777 	{
    778 	  CDBL_LIST_ADD_REAR (ld_state.from_dso, oldp);
    779 	  ++ld_state.nfrom_dso;
    780 
    781 	  /* If the object is a function we allocate a PLT entry,
    782 	     otherwise only a GOT entry.  */
    783 	  if (oldp->type == STT_FUNC)
    784 	    ++ld_state.nplt;
    785 	  else
    786 	    ++ld_state.ngot;
    787 
    788 	  oldp->on_dsolist = 1;
    789 	}
    790       else if (shndx == SHN_COMMON)
    791 	{
    792 	  /* Store the alignment.  */
    793 	  oldp->merge.value = sym->st_value;
    794 
    795 	  CDBL_LIST_ADD_REAR (ld_state.common_syms, oldp);
    796 	}
    797     }
    798 
    799   return result;
    800 }
    801 
    802 
    803 static struct scninfo *
    804 find_section_group (struct usedfiles *fileinfo, Elf32_Word shndx,
    805 		    Elf_Data **datap)
    806 {
    807   struct scninfo *runp;
    808 
    809   for (runp = fileinfo->groups; runp != NULL; runp = runp->next)
    810     if (!runp->used)
    811       {
    812 	Elf32_Word *grpref;
    813 	size_t cnt;
    814 	Elf_Data *data;
    815 
    816 	data = elf_getdata (runp->scn, NULL);
    817 	if (data == NULL)
    818 	  error (EXIT_FAILURE, 0,
    819 		 gettext ("%s: cannot get section group data: %s"),
    820 		 fileinfo->fname, elf_errmsg (-1));
    821 
    822 	/* There cannot be another data block.  */
    823 	assert (elf_getdata (runp->scn, data) == NULL);
    824 
    825 	grpref = (Elf32_Word *) data->d_buf;
    826 	cnt = data->d_size / sizeof (Elf32_Word);
    827 	/* Note that we stop after looking at index 1 since index 0
    828 	   contains the flags for the section group.  */
    829 	while (cnt > 1)
    830 	  if (grpref[--cnt] == shndx)
    831 	    {
    832 	      *datap = data;
    833 	      return runp;
    834 	    }
    835       }
    836 
    837   /* If we come here no section group contained the given section
    838      despite the SHF_GROUP flag.  This is an error in the input
    839      file.  */
    840   error (EXIT_FAILURE, 0, gettext ("\
    841 %s: section '%s' with group flag set does not belong to any group"),
    842 	 fileinfo->fname,
    843 	 elf_strptr (fileinfo->elf, fileinfo->shstrndx,
    844 		     SCNINFO_SHDR (fileinfo->scninfo[shndx].shdr).sh_name));
    845   return NULL;
    846 }
    847 
    848 
    849 /* Mark all sections which belong to the same group as section SHNDX
    850    as used.  */
    851 static void
    852 mark_section_group (struct usedfiles *fileinfo, Elf32_Word shndx,
    853 		    struct scninfo **grpscnp)
    854 {
    855   /* First locate the section group.  There can be several (many) of
    856      them.  */
    857   size_t cnt;
    858   Elf32_Word *grpref;
    859   Elf_Data *data;
    860   struct scninfo *grpscn = find_section_group (fileinfo, shndx, &data);
    861   *grpscnp = grpscn;
    862 
    863   /* Mark all the sections as used.
    864 
    865      XXX Two possible problems here:
    866 
    867      - the gABI says "The section must be referenced by a section of type
    868        SHT_GROUP".  I hope everybody reads this as "exactly one section".
    869 
    870      - section groups are also useful to mark the debugging section which
    871        belongs to a text section.  Unconditionally adding debugging sections
    872        is therefore probably not what is wanted if stripping is required.  */
    873 
    874   /* Mark the section group as handled.  */
    875   grpscn->used = true;
    876 
    877   grpref = (Elf32_Word *) data->d_buf;
    878   cnt = data->d_size / sizeof (Elf32_Word);
    879   while (cnt > 1)
    880     {
    881       Elf32_Word idx = grpref[--cnt];
    882       XElf_Shdr *shdr = &SCNINFO_SHDR (fileinfo->scninfo[idx].shdr);
    883 
    884       if (fileinfo->scninfo[idx].grpid != grpscn->grpid)
    885 	error (EXIT_FAILURE, 0, gettext ("\
    886 %s: section [%2d] '%s' is not in the correct section group"),
    887 	       fileinfo->fname, (int) idx,
    888 	       elf_strptr (fileinfo->elf, fileinfo->shstrndx, shdr->sh_name));
    889 
    890       if (ld_state.strip == strip_none
    891 	  /* If we are stripping, remove debug sections.  */
    892 	  || (!ebl_debugscn_p (ld_state.ebl,
    893 			       elf_strptr (fileinfo->elf, fileinfo->shstrndx,
    894 					   shdr->sh_name))
    895 	      /* And the relocation sections for the debug sections.  */
    896 	      && ((shdr->sh_type != SHT_RELA && shdr->sh_type != SHT_REL)
    897 		  || !ebl_debugscn_p (ld_state.ebl,
    898 				      elf_strptr (fileinfo->elf,
    899 						  fileinfo->shstrndx,
    900 						  SCNINFO_SHDR (fileinfo->scninfo[shdr->sh_info].shdr).sh_name)))))
    901 	{
    902 	  struct scninfo *ignore;
    903 
    904 	  mark_section_used (&fileinfo->scninfo[idx], idx, &ignore);
    905 	}
    906     }
    907 }
    908 
    909 
    910 static void
    911 mark_section_used (struct scninfo *scninfo, Elf32_Word shndx,
    912 		   struct scninfo **grpscnp)
    913 {
    914   if (likely (scninfo->used))
    915     /* Nothing to be done.  */
    916     return;
    917 
    918   /* We need this section.  */
    919   scninfo->used = true;
    920 
    921   /* Make sure the section header has been read from the file.  */
    922   XElf_Shdr *shdr = &SCNINFO_SHDR (scninfo->shdr);
    923 #if NATIVE_ELF
    924   if (unlikely (scninfo->shdr == NULL))
    925 #else
    926   if (unlikely (scninfo->shdr.sh_type == SHT_NULL))
    927 #endif
    928     {
    929 #if NATIVE_ELF != 0
    930       shdr = xelf_getshdr (scninfo->scn, scninfo->shdr);
    931 #else
    932       xelf_getshdr_copy (scninfo->scn, shdr, scninfo->shdr);
    933 #endif
    934       if (unlikely (shdr == NULL))
    935 	/* Something is very wrong.  The calling code will notice it
    936 	   soon and print a message.  */
    937 	return;
    938     }
    939 
    940   /* Handle section linked by 'sh_link'.  */
    941   if (unlikely (shdr->sh_link != 0))
    942     {
    943       struct scninfo *ignore;
    944       mark_section_used (&scninfo->fileinfo->scninfo[shdr->sh_link],
    945 			 shdr->sh_link, &ignore);
    946     }
    947 
    948   /* Handle section linked by 'sh_info'.  */
    949   if (unlikely (shdr->sh_info != 0) && (shdr->sh_flags & SHF_INFO_LINK))
    950     {
    951       struct scninfo *ignore;
    952       mark_section_used (&scninfo->fileinfo->scninfo[shdr->sh_info],
    953 			 shdr->sh_info, &ignore);
    954     }
    955 
    956   if (unlikely (shdr->sh_flags & SHF_GROUP) && ld_state.gc_sections)
    957     /* Find the section group which contains this section.  */
    958     mark_section_group (scninfo->fileinfo, shndx, grpscnp);
    959 }
    960 
    961 
    962 /* We collect all sections in a hashing table.  All sections with the
    963    same name are collected in a list.  Note that we do not determine
    964    which sections are finally collected in the same output section
    965    here.  This would be terribly inefficient.  It will be done later.  */
    966 static void
    967 add_section (struct usedfiles *fileinfo, struct scninfo *scninfo)
    968 {
    969   struct scnhead *queued;
    970   struct scnhead search;
    971   unsigned long int hval;
    972   XElf_Shdr *shdr = &SCNINFO_SHDR (scninfo->shdr);
    973   struct scninfo *grpscn = NULL;
    974   Elf_Data *grpscndata = NULL;
    975 
    976   /* See whether we can determine right away whether we need this
    977      section in the output.
    978 
    979      XXX I assume here that --gc-sections only affects extraction
    980      from an archive.  If it also affects objects files given on
    981      the command line then somebody must explain to me how the
    982      dependency analysis should work.  Should the entry point be
    983      the root?  What if it is a numeric value?  */
    984   if (!scninfo->used
    985       && (ld_state.strip == strip_none
    986 	  || (shdr->sh_flags & SHF_ALLOC) != 0
    987 	  || shdr->sh_type == SHT_NOTE
    988 	  || (shdr->sh_type == SHT_PROGBITS
    989 	      && strcmp (elf_strptr (fileinfo->elf,
    990 				     fileinfo->shstrndx,
    991 				     shdr->sh_name), ".comment") == 0))
    992       && (fileinfo->status != in_archive || !ld_state.gc_sections))
    993     /* Mark as used and handle reference recursively if necessary.  */
    994     mark_section_used (scninfo, elf_ndxscn (scninfo->scn), &grpscn);
    995 
    996   if ((shdr->sh_flags & SHF_GROUP) && grpscn == NULL)
    997     /* Determine the symbol which name constitutes the signature
    998        for the section group.  */
    999     grpscn = find_section_group (fileinfo, elf_ndxscn (scninfo->scn),
   1000 				 &grpscndata);
   1001   assert (grpscn == NULL || grpscn->symbols->name != NULL);
   1002 
   1003   /* Determine the section name.  */
   1004   search.name = elf_strptr (fileinfo->elf, fileinfo->shstrndx, shdr->sh_name);
   1005   search.type = shdr->sh_type;
   1006   search.flags = shdr->sh_flags;
   1007   search.entsize = shdr->sh_entsize;
   1008   search.grp_signature = grpscn != NULL ? grpscn->symbols->name : NULL;
   1009   search.kind = scn_normal;
   1010   hval = elf_hash (search.name);
   1011 
   1012   /* Find already queued sections.  */
   1013   queued = ld_section_tab_find (&ld_state.section_tab, hval, &search);
   1014   if (queued != NULL)
   1015     {
   1016       bool is_comdat = false;
   1017 
   1018       /* If this section is part of a COMDAT section group we simply
   1019 	 ignore it since we already have a copy.  */
   1020       if (unlikely (shdr->sh_flags & SHF_GROUP))
   1021 	{
   1022 	  /* Get the data of the section group section.  */
   1023 	  if (grpscndata == NULL)
   1024 	    {
   1025 	      grpscndata = elf_getdata (grpscn->scn, NULL);
   1026 	      assert (grpscndata != NULL);
   1027 	    }
   1028 
   1029 	  /* XXX Possibly unaligned memory access.  */
   1030 	  if ((((Elf32_Word *) grpscndata->d_buf)[0] & GRP_COMDAT) != 0)
   1031 	    {
   1032 	      /* We have to compare the group signatures.  There might
   1033 		 be sections with the same name but belonging to
   1034 		 groups with different signatures.  This means we have
   1035 		 to compare the new group signature with all those
   1036 		 already collected.  There might also be some
   1037 		 non-group sections in the mix.  */
   1038 	      struct scninfo *runp = queued->last;
   1039 	      do
   1040 		{
   1041 		  if (SCNINFO_SHDR (runp->shdr).sh_flags & SHF_GROUP)
   1042 		    {
   1043 		      struct scninfo *grpscn2
   1044 			= find_section_group (runp->fileinfo,
   1045 					      elf_ndxscn (runp->scn),
   1046 					      &grpscndata);
   1047 
   1048 		      if (strcmp (grpscn->symbols->name,
   1049 				  grpscn2->symbols->name) == 0)
   1050 			{
   1051 			  scninfo->unused_comdat = is_comdat = true;
   1052 			  break;
   1053 			}
   1054 		    }
   1055 
   1056 		  runp = runp->next;
   1057 		}
   1058 	      while (runp != queued->last);
   1059 	    }
   1060 	}
   1061 
   1062       if (!is_comdat)
   1063 	{
   1064 	  /* No COMDAT section, we use the data.  */
   1065 	  scninfo->next = queued->last->next;
   1066 	  queued->last = queued->last->next = scninfo;
   1067 
   1068 	  queued->flags = ebl_sh_flags_combine (ld_state.ebl, queued->flags,
   1069 						shdr->sh_flags);
   1070 	  queued->align = MAX (queued->align, shdr->sh_addralign);
   1071 	}
   1072     }
   1073   else
   1074     {
   1075       /* We do not use obstacks here since the memory might be
   1076 	 deallocated.  */
   1077       queued = (struct scnhead *) xcalloc (sizeof (struct scnhead), 1);
   1078       queued->kind = scn_normal;
   1079       queued->name = search.name;
   1080       queued->type = shdr->sh_type;
   1081       queued->flags = shdr->sh_flags;
   1082       queued->align = shdr->sh_addralign;
   1083       queued->entsize = shdr->sh_entsize;
   1084       queued->grp_signature = grpscn != NULL ? grpscn->symbols->name : NULL;
   1085       queued->segment_nr = ~0;
   1086       queued->last = scninfo->next = scninfo;
   1087 
   1088       /* Check whether we need a TLS segment.  */
   1089       ld_state.need_tls |= (shdr->sh_flags & SHF_TLS) != 0;
   1090 
   1091       /* Add to the hash table and possibly overwrite existing value.  */
   1092       ld_section_tab_insert (&ld_state.section_tab, hval, queued);
   1093     }
   1094 }
   1095 
   1096 
   1097 static int
   1098 add_relocatable_file (struct usedfiles *fileinfo, GElf_Word secttype)
   1099 {
   1100   size_t scncnt;
   1101   size_t cnt;
   1102   Elf_Data *symtabdata = NULL;
   1103   Elf_Data *xndxdata = NULL;
   1104   Elf_Data *versymdata = NULL;
   1105   Elf_Data *verdefdata = NULL;
   1106   Elf_Data *verneeddata = NULL;
   1107   size_t symstridx = 0;
   1108   size_t nsymbols = 0;
   1109   size_t nlocalsymbols = 0;
   1110   bool has_merge_sections = false;
   1111   bool has_tls_symbols = false;
   1112   /* Unless we have different information we assume the code needs
   1113      an executable stack.  */
   1114   enum execstack execstack = execstack_true;
   1115 
   1116   /* Prerequisites.  */
   1117   assert (fileinfo->elf != NULL);
   1118 
   1119   /* Allocate memory for the sections.  */
   1120   if (unlikely (elf_getshnum (fileinfo->elf, &scncnt) < 0))
   1121     error (EXIT_FAILURE, 0,
   1122 	   gettext ("cannot determine number of sections: %s"),
   1123 	   elf_errmsg (-1));
   1124 
   1125   fileinfo->scninfo = (struct scninfo *)
   1126     obstack_calloc (&ld_state.smem, scncnt * sizeof (struct scninfo));
   1127 
   1128   /* Read all the section headers and find the symbol table.  Note
   1129      that we don't skip the section with index zero.  Even though the
   1130      section itself is always empty the section header contains
   1131      informaton for the case when the section index for the section
   1132      header string table is too large to fit in the ELF header.  */
   1133   for (cnt = 0; cnt < scncnt; ++cnt)
   1134     {
   1135       /* Store the handle for the section.  */
   1136       fileinfo->scninfo[cnt].scn = elf_getscn (fileinfo->elf, cnt);
   1137 
   1138       /* Get the ELF section header and data.  */
   1139       XElf_Shdr *shdr;
   1140 #if NATIVE_ELF != 0
   1141       if (fileinfo->scninfo[cnt].shdr == NULL)
   1142 #else
   1143       if (fileinfo->scninfo[cnt].shdr.sh_type == SHT_NULL)
   1144 #endif
   1145 	{
   1146 #if NATIVE_ELF != 0
   1147 	  shdr = xelf_getshdr (fileinfo->scninfo[cnt].scn,
   1148 			       fileinfo->scninfo[cnt].shdr);
   1149 #else
   1150 	  xelf_getshdr_copy (fileinfo->scninfo[cnt].scn, shdr,
   1151 			     fileinfo->scninfo[cnt].shdr);
   1152 #endif
   1153 	  if (shdr == NULL)
   1154 	    {
   1155 	      /* This should never happen.  */
   1156 	      fprintf (stderr, gettext ("%s: invalid ELF file (%s:%d)\n"),
   1157 		       fileinfo->rfname, __FILE__, __LINE__);
   1158 	      return 1;
   1159 	    }
   1160 	}
   1161       else
   1162 	shdr = &SCNINFO_SHDR (fileinfo->scninfo[cnt].shdr);
   1163 
   1164       Elf_Data *data = elf_getdata (fileinfo->scninfo[cnt].scn, NULL);
   1165 
   1166       /* Check whether this section is marked as merge-able.  */
   1167       has_merge_sections |= (shdr->sh_flags & SHF_MERGE) != 0;
   1168       has_tls_symbols |= (shdr->sh_flags & SHF_TLS) != 0;
   1169 
   1170       /* Get the ELF section header and data.  */
   1171       /* Make the file structure available.  */
   1172       fileinfo->scninfo[cnt].fileinfo = fileinfo;
   1173 
   1174       if (unlikely (shdr->sh_type == SHT_SYMTAB)
   1175 	  || unlikely (shdr->sh_type == SHT_DYNSYM))
   1176 	{
   1177 	  if (shdr->sh_type == SHT_SYMTAB)
   1178 	    {
   1179 	      assert (fileinfo->symtabdata == NULL);
   1180 	      fileinfo->symtabdata = data;
   1181 	      fileinfo->nsymtab = shdr->sh_size / shdr->sh_entsize;
   1182 	      fileinfo->nlocalsymbols = shdr->sh_info;
   1183 	      fileinfo->symstridx = shdr->sh_link;
   1184 	    }
   1185 	  else
   1186 	    {
   1187 	      assert (fileinfo->dynsymtabdata == NULL);
   1188 	      fileinfo->dynsymtabdata = data;
   1189 	      fileinfo->ndynsymtab = shdr->sh_size / shdr->sh_entsize;
   1190 	      fileinfo->dynsymstridx = shdr->sh_link;
   1191 	    }
   1192 
   1193 	  /* If we are looking for the normal symbol table we just
   1194 	     found it.  */
   1195 	  if (secttype == shdr->sh_type)
   1196 	    {
   1197 	      assert (symtabdata == NULL);
   1198 	      symtabdata = data;
   1199 	      symstridx = shdr->sh_link;
   1200 	      nsymbols = shdr->sh_size / shdr->sh_entsize;
   1201 	      nlocalsymbols = shdr->sh_info;
   1202 	    }
   1203 	}
   1204       else if (unlikely (shdr->sh_type == SHT_SYMTAB_SHNDX))
   1205 	{
   1206 	  assert (xndxdata == NULL);
   1207 	  fileinfo->xndxdata = xndxdata = data;
   1208 	}
   1209       else if (unlikely (shdr->sh_type == SHT_GNU_versym))
   1210 	{
   1211 	  assert (versymdata == 0);
   1212 	  fileinfo->versymdata = versymdata = data;
   1213 	}
   1214       else if (unlikely (shdr->sh_type == SHT_GNU_verdef))
   1215 	{
   1216 	  size_t nversions;
   1217 
   1218 	  assert (verdefdata == 0);
   1219 	  fileinfo->verdefdata = verdefdata = data;
   1220 
   1221 	  /* Allocate the arrays flagging the use of the version and
   1222 	     to track of allocated names.  */
   1223 	  fileinfo->nverdef = nversions = shdr->sh_info;
   1224 	  /* We have NVERSIONS + 1 because the indeces used to access the
   1225 	     sectino start with one; zero represents local binding.  */
   1226 	  fileinfo->verdefused = (XElf_Versym *)
   1227 	    obstack_calloc (&ld_state.smem,
   1228 			    sizeof (XElf_Versym) * (nversions + 1));
   1229 	  fileinfo->verdefent = (struct Ebl_Strent **)
   1230 	    obstack_alloc (&ld_state.smem,
   1231 			   sizeof (struct Ebl_Strent *) * (nversions + 1));
   1232 	}
   1233       else if (unlikely (shdr->sh_type == SHT_GNU_verneed))
   1234 	{
   1235 	  assert (verneeddata == 0);
   1236 	  fileinfo->verneeddata = verneeddata = data;
   1237 	}
   1238       else if (unlikely (shdr->sh_type == SHT_DYNAMIC))
   1239 	{
   1240 	  assert (fileinfo->dynscn == NULL);
   1241 	  fileinfo->dynscn = fileinfo->scninfo[cnt].scn;
   1242 	}
   1243       else if (unlikely (shdr->sh_type == SHT_GROUP))
   1244 	{
   1245 	  Elf_Scn *symscn;
   1246 	  XElf_Shdr_vardef (symshdr);
   1247 	  Elf_Data *symdata;
   1248 
   1249 	  if (FILEINFO_EHDR (fileinfo->ehdr).e_type != ET_REL)
   1250 	    error (EXIT_FAILURE, 0, gettext ("\
   1251 %s: only files of type ET_REL might contain section groups"),
   1252 		   fileinfo->fname);
   1253 
   1254 	  fileinfo->scninfo[cnt].next = fileinfo->groups;
   1255 	  fileinfo->scninfo[cnt].grpid = cnt;
   1256 	  fileinfo->groups = &fileinfo->scninfo[cnt];
   1257 
   1258 	  /* Determine the signature.  We create a symbol record for
   1259 	     it.  Only the name element is important.  */
   1260 	  fileinfo->scninfo[cnt].symbols = (struct symbol *)
   1261 	    obstack_calloc (&ld_state.smem, sizeof (struct symbol));
   1262 
   1263 	  symscn = elf_getscn (fileinfo->elf, shdr->sh_link);
   1264 	  xelf_getshdr (symscn, symshdr);
   1265 	  symdata = elf_getdata (symscn, NULL);
   1266 
   1267 	  if (symshdr != NULL)
   1268 	    {
   1269 	      XElf_Sym_vardef (sym);
   1270 
   1271 	      /* We don't need the section index and therefore we don't
   1272 		 have to use 'xelf_getsymshndx'.  */
   1273 	      xelf_getsym (symdata, shdr->sh_info, sym);
   1274 	      if (sym != NULL)
   1275 		{
   1276 		  struct symbol *symbol = fileinfo->scninfo[cnt].symbols;
   1277 
   1278 #ifndef NO_HACKS
   1279 		  if (XELF_ST_TYPE (sym->st_info) == STT_SECTION)
   1280 		    {
   1281 		      XElf_Shdr_vardef (buggyshdr);
   1282 		      xelf_getshdr (elf_getscn (fileinfo->elf, sym->st_shndx),
   1283 				    buggyshdr);
   1284 
   1285 		      symbol->name = elf_strptr (fileinfo->elf,
   1286 						 FILEINFO_EHDR (fileinfo->ehdr).e_shstrndx,
   1287 						 buggyshdr->sh_name);
   1288 		      symbol->symidx = -1;
   1289 		    }
   1290 		  else
   1291 #endif
   1292 		    {
   1293 		      symbol->name = elf_strptr (fileinfo->elf,
   1294 						 symshdr->sh_link,
   1295 						 sym->st_name);
   1296 		      symbol->symidx = shdr->sh_info;
   1297 		    }
   1298 		  symbol->file = fileinfo;
   1299 		}
   1300 	    }
   1301 	  if (fileinfo->scninfo[cnt].symbols->name == NULL)
   1302 	    error (EXIT_FAILURE, 0, gettext ("\
   1303 %s: cannot determine signature of section group [%2zd] '%s': %s"),
   1304 		   fileinfo->fname,
   1305 		   elf_ndxscn (fileinfo->scninfo[cnt].scn),
   1306 		   elf_strptr (fileinfo->elf, fileinfo->shstrndx,
   1307 			       shdr->sh_name),
   1308 		   elf_errmsg (-1));
   1309 
   1310 
   1311 	  /* For all the sections which are part of this group, add
   1312 	     the reference.  */
   1313 	  if (data == NULL)
   1314 	    error (EXIT_FAILURE, 0, gettext ("\
   1315 %s: cannot get content of section group [%2zd] '%s': %s'"),
   1316 		   fileinfo->fname, elf_ndxscn (fileinfo->scninfo[cnt].scn),
   1317 		   elf_strptr (fileinfo->elf, fileinfo->shstrndx,
   1318 			       shdr->sh_name),
   1319 		   elf_errmsg (-1));
   1320 
   1321 	  Elf32_Word *grpdata = (Elf32_Word *) data->d_buf;
   1322 	  if (grpdata[0] & GRP_COMDAT)
   1323 	    fileinfo->scninfo[cnt].comdat_group = true;
   1324 	  for (size_t inner = 1; inner < data->d_size / sizeof (Elf32_Word);
   1325 	       ++inner)
   1326 	    {
   1327 	      if (grpdata[inner] >= scncnt)
   1328 		error (EXIT_FAILURE, 0, gettext ("\
   1329 %s: group member %zu of section group [%2zd] '%s' has too high index: %" PRIu32),
   1330 		       fileinfo->fname,
   1331 		       inner, elf_ndxscn (fileinfo->scninfo[cnt].scn),
   1332 		       elf_strptr (fileinfo->elf, fileinfo->shstrndx,
   1333 				   shdr->sh_name),
   1334 		       grpdata[inner]);
   1335 
   1336 	      fileinfo->scninfo[grpdata[inner]].grpid = cnt;
   1337 	    }
   1338 
   1339 	  /* The 'used' flag is used to indicate when the information
   1340 	     in the section group is used to mark all other sections
   1341 	     as used.  So it must not be true yet.  */
   1342 	  assert (fileinfo->scninfo[cnt].used == false);
   1343 	}
   1344       else if (! SECTION_TYPE_P (&ld_state, shdr->sh_type)
   1345 	       && unlikely ((shdr->sh_flags & SHF_OS_NONCONFORMING) != 0))
   1346 	/* According to the gABI it is a fatal error if the file contains
   1347 	   a section with unknown type and the SHF_OS_NONCONFORMING flag
   1348 	   set.  */
   1349 	error (EXIT_FAILURE, 0,
   1350 	       gettext ("%s: section '%s' has unknown type: %d"),
   1351 	       fileinfo->fname,
   1352 	       elf_strptr (fileinfo->elf, fileinfo->shstrndx,
   1353 			   shdr->sh_name),
   1354 	       (int) shdr->sh_type);
   1355       /* We don't have to add a few section types here.  These will be
   1356 	 generated from scratch for the new output file.  We also
   1357 	 don't add the sections of DSOs here since these sections are
   1358 	 not used in the resulting object file.  */
   1359       else if (likely (fileinfo->file_type == relocatable_file_type)
   1360 	       && likely (cnt > 0)
   1361 	       && likely (shdr->sh_type == SHT_PROGBITS
   1362 			  || shdr->sh_type == SHT_RELA
   1363 			  || shdr->sh_type == SHT_REL
   1364 			  || shdr->sh_type == SHT_NOTE
   1365 			  || shdr->sh_type == SHT_NOBITS
   1366 			  || shdr->sh_type == SHT_INIT_ARRAY
   1367 			  || shdr->sh_type == SHT_FINI_ARRAY
   1368 			  || shdr->sh_type == SHT_PREINIT_ARRAY))
   1369 	{
   1370 	  /* Check whether the section needs to be executable.  */
   1371 	  if (shdr->sh_type == SHT_PROGBITS
   1372 	      && (shdr->sh_flags & SHF_EXECINSTR) == 0
   1373 	      && strcmp (elf_strptr (fileinfo->elf, fileinfo->shstrndx,
   1374 				     shdr->sh_name),
   1375 			 ".note.GNU-stack") == 0)
   1376 	    execstack = execstack_false;
   1377 
   1378 	  add_section (fileinfo, &fileinfo->scninfo[cnt]);
   1379 	}
   1380     }
   1381 
   1382   /* Now we know more about the requirements for an executable stack
   1383      of the result.  */
   1384   if (fileinfo->file_type == relocatable_file_type
   1385       && execstack == execstack_true
   1386       && ld_state.execstack != execstack_false_force)
   1387     ld_state.execstack = execstack_true;
   1388 
   1389   /* Handle the symbols.  Record defined and undefined symbols in the
   1390      hash table.  In theory there can be a file without any symbol
   1391      table.  */
   1392   if (likely (symtabdata != NULL))
   1393     {
   1394       /* In case this file contains merge-able sections we have to
   1395 	 locate the symbols which are in these sections.  */
   1396       fileinfo->has_merge_sections = has_merge_sections;
   1397       if (likely (has_merge_sections || has_tls_symbols))
   1398 	{
   1399 	  fileinfo->symref = (struct symbol **)
   1400 	    obstack_calloc (&ld_state.smem,
   1401 			    nsymbols * sizeof (struct symbol *));
   1402 
   1403 	  /* Only handle the local symbols here.  */
   1404 	  for (cnt = 0; cnt < nlocalsymbols; ++cnt)
   1405 	    {
   1406 	      Elf32_Word shndx;
   1407 	      XElf_Sym_vardef (sym);
   1408 
   1409 	      xelf_getsymshndx (symtabdata, xndxdata, cnt, sym, shndx);
   1410 	      if (sym == NULL)
   1411 		{
   1412 		  /* This should never happen.  */
   1413 		  fprintf (stderr, gettext ("%s: invalid ELF file (%s:%d)\n"),
   1414 			   fileinfo->rfname, __FILE__, __LINE__);
   1415 		  return 1;
   1416 		}
   1417 
   1418 	      if (likely (shndx != SHN_XINDEX))
   1419 		shndx = sym->st_shndx;
   1420 	      else if (unlikely (shndx == 0))
   1421 		{
   1422 		  fprintf (stderr, gettext ("%s: invalid ELF file (%s:%d)\n"),
   1423 			   fileinfo->rfname, __FILE__, __LINE__);
   1424 		  return 1;
   1425 		}
   1426 
   1427 	      if (XELF_ST_TYPE (sym->st_info) != STT_SECTION
   1428 		  && (shndx < SHN_LORESERVE || shndx > SHN_HIRESERVE)
   1429 		  && ((SCNINFO_SHDR (fileinfo->scninfo[shndx].shdr).sh_flags
   1430 		       & SHF_MERGE)
   1431 		      || XELF_ST_TYPE (sym->st_info) == STT_TLS))
   1432 		{
   1433 		  /* Create a symbol record for this symbol and add it
   1434 		     to the list for this section.  */
   1435 		  struct symbol *newp;
   1436 
   1437 		  newp = (struct symbol *)
   1438 		    obstack_calloc (&ld_state.smem, sizeof (struct symbol));
   1439 
   1440 		  newp->symidx = cnt;
   1441 		  newp->scndx = shndx;
   1442 		  newp->file = fileinfo;
   1443 		  newp->defined = 1;
   1444 		  fileinfo->symref[cnt] = newp;
   1445 
   1446 		  if (fileinfo->scninfo[shndx].symbols == NULL)
   1447 		    fileinfo->scninfo[shndx].symbols = newp->next_in_scn
   1448 		      = newp;
   1449 		  else
   1450 		    {
   1451 		      newp->next_in_scn
   1452 			= fileinfo->scninfo[shndx].symbols->next_in_scn;
   1453 		      fileinfo->scninfo[shndx].symbols
   1454 			= fileinfo->scninfo[shndx].symbols->next_in_scn = newp;
   1455 		    }
   1456 		}
   1457 	    }
   1458 	}
   1459       else
   1460 	/* Create array with pointers to the symbol definitions.  Note
   1461 	   that we only allocate memory for the non-local symbols
   1462 	   since we have no merge-able sections.  But we store the
   1463 	   pointer as if it was for the whole symbol table.  This
   1464 	   saves some memory.  */
   1465 	fileinfo->symref = (struct symbol **)
   1466 	  obstack_calloc (&ld_state.smem, ((nsymbols - nlocalsymbols)
   1467 					   * sizeof (struct symbol *)))
   1468 	  - nlocalsymbols;
   1469 
   1470       /* Don't handle local symbols here.  It's either not necessary
   1471 	 at all or has already happened.  */
   1472       for (cnt = nlocalsymbols; cnt < nsymbols; ++cnt)
   1473 	{
   1474 	  XElf_Sym_vardef (sym);
   1475 	  Elf32_Word shndx;
   1476 	  xelf_getsymshndx (symtabdata, xndxdata, cnt, sym, shndx);
   1477 
   1478 	  if (sym == NULL)
   1479 	    {
   1480 	      /* This should never happen.  */
   1481 	      fprintf (stderr, gettext ("%s: invalid ELF file (%s:%d)\n"),
   1482 		       fileinfo->rfname, __FILE__, __LINE__);
   1483 	      return 1;
   1484 	    }
   1485 
   1486 	  if (likely (shndx != SHN_XINDEX))
   1487 	    shndx = sym->st_shndx;
   1488 	  else if (unlikely (shndx == 0))
   1489 	    {
   1490 	      fprintf (stderr, gettext ("%s: invalid ELF file (%s:%d)\n"),
   1491 		       fileinfo->rfname, __FILE__, __LINE__);
   1492 	      return 1;
   1493 	    }
   1494 
   1495 	  /* We ignore ABS symbols from DSOs.  */
   1496 	  // XXX Is this correct?
   1497 	  if (unlikely (shndx == SHN_ABS) && secttype == SHT_DYNSYM)
   1498 	    continue;
   1499 
   1500 	  if ((shndx < SHN_LORESERVE || shndx > SHN_HIRESERVE)
   1501 	      && fileinfo->scninfo[shndx].unused_comdat)
   1502 	    /* The symbol is not used.  */
   1503 	    continue;
   1504 
   1505 	  /* If the DSO uses symbol versions determine whether this is
   1506 	     the default version.  Otherwise we'll ignore the symbol.  */
   1507 	  if (versymdata != NULL)
   1508 	    {
   1509 	      XElf_Versym versym;
   1510 
   1511 	      if (xelf_getversym_copy (versymdata, cnt, versym) == NULL)
   1512 		/* XXX Should we handle faulty input files more graceful?  */
   1513 		assert (! "xelf_getversym failed");
   1514 
   1515 	      if ((versym & 0x8000) != 0)
   1516 		/* Ignore the symbol, it's not the default version.  */
   1517 		continue;
   1518 	    }
   1519 
   1520 	  /* See whether we know anything about this symbol.  */
   1521 	  struct symbol search;
   1522 	  search.name = elf_strptr (fileinfo->elf, symstridx, sym->st_name);
   1523 	  unsigned long int hval = elf_hash (search.name);
   1524 
   1525 	  /* We ignore the symbols the linker generates.  This are
   1526 	     _GLOBAL_OFFSET_TABLE_, _DYNAMIC.  */
   1527 	  // XXX This loop is hot and the following tests hardly ever match.
   1528 	  // XXX Maybe move the tests somewhere they are executed less often.
   1529 	  if (((unlikely (hval == 165832675ul)
   1530 		&& strcmp (search.name, "_DYNAMIC") == 0)
   1531 	       || (unlikely (hval == 102264335ul)
   1532 		   && strcmp (search.name, "_GLOBAL_OFFSET_TABLE_") == 0))
   1533 	      && sym->st_shndx != SHN_UNDEF
   1534 	      /* If somebody defines such a variable in a relocatable we
   1535 		 don't ignore it.  Let the user get what s/he deserves.  */
   1536 	      && fileinfo->file_type != relocatable_file_type)
   1537 	    continue;
   1538 
   1539 	  struct symbol *oldp = ld_symbol_tab_find (&ld_state.symbol_tab,
   1540 						    hval, &search);
   1541 	  struct symbol *newp;
   1542 	  if (likely (oldp == NULL))
   1543 	    {
   1544 	      /* No symbol of this name known.  Add it.  */
   1545 	      newp = (struct symbol *) obstack_alloc (&ld_state.smem,
   1546 						      sizeof (*newp));
   1547 	      newp->name = search.name;
   1548 	      newp->size = sym->st_size;
   1549 	      newp->type = XELF_ST_TYPE (sym->st_info);
   1550 	      newp->symidx = cnt;
   1551 	      newp->outsymidx = 0;
   1552 	      newp->outdynsymidx = 0;
   1553 	      newp->scndx = shndx;
   1554 	      newp->file = fileinfo;
   1555 	      newp->defined = newp->scndx != SHN_UNDEF;
   1556 	      newp->common = newp->scndx == SHN_COMMON;
   1557 	      newp->weak = XELF_ST_BIND (sym->st_info) == STB_WEAK;
   1558 	      newp->added = 0;
   1559 	      newp->merged = 0;
   1560 	      newp->local = 0;
   1561 	      newp->hidden = 0;
   1562 	      newp->need_copy = 0;
   1563 	      newp->on_dsolist = 0;
   1564 	      newp->in_dso = secttype == SHT_DYNSYM;
   1565 	      newp->next_in_scn = NULL;
   1566 #ifndef NDEBUG
   1567 	      newp->next = NULL;
   1568 	      newp->previous = NULL;
   1569 #endif
   1570 
   1571 	      if (newp->scndx == SHN_UNDEF)
   1572 		{
   1573 		  CDBL_LIST_ADD_REAR (ld_state.unresolved, newp);
   1574 		  ++ld_state.nunresolved;
   1575 		  if (! newp->weak)
   1576 		    ++ld_state.nunresolved_nonweak;
   1577 		}
   1578 	      else if (newp->scndx == SHN_COMMON)
   1579 		{
   1580 		  /* Store the alignment requirement.  */
   1581 		  newp->merge.value = sym->st_value;
   1582 
   1583 		  CDBL_LIST_ADD_REAR (ld_state.common_syms, newp);
   1584 		}
   1585 
   1586 	      /* Insert the new symbol.  */
   1587 	      if (unlikely (ld_symbol_tab_insert (&ld_state.symbol_tab,
   1588 						  hval, newp) != 0))
   1589 		/* This cannot happen.  */
   1590 		abort ();
   1591 
   1592 	      fileinfo->symref[cnt] = newp;
   1593 
   1594 	      /* We have a few special symbols to recognize.  The symbols
   1595 		 _init and _fini are the initialization and finalization
   1596 		 functions respectively.  They have to be made known in
   1597 		 the dynamic section and therefore we have to find out
   1598 		 now whether these functions exist or not.  */
   1599 	      if (hval == 6685956 && strcmp (newp->name, "_init") == 0)
   1600 		ld_state.init_symbol = newp;
   1601 	      else if (hval == 6672457 && strcmp (newp->name, "_fini") == 0)
   1602 		ld_state.fini_symbol = newp;
   1603 	    }
   1604 	  else if (unlikely (check_definition (sym, shndx, cnt, fileinfo, oldp)
   1605 			     != 0))
   1606 	    /* A fatal error (multiple definition of a symbol)
   1607 	       occurred, no need to continue.  */
   1608 	    return 1;
   1609 	  else
   1610 	    /* Use the previously allocated symbol record.  It has
   1611 	       been updated in check_definition(), if necessary.  */
   1612 	    newp = fileinfo->symref[cnt] = oldp;
   1613 
   1614 	  /* Mark the section the symbol we need comes from as used.  */
   1615 	  if (shndx != SHN_UNDEF
   1616 	      && (shndx < SHN_LORESERVE || shndx > SHN_HIRESERVE))
   1617 	    {
   1618 	      struct scninfo *ignore;
   1619 
   1620 #ifndef NDEBUG
   1621 	      size_t shnum;
   1622 	      assert (elf_getshnum (fileinfo->elf, &shnum) == 0);
   1623 	      assert (shndx < shnum);
   1624 #endif
   1625 
   1626 	      /* Mark section (and all dependencies) as used.  */
   1627 	      mark_section_used (&fileinfo->scninfo[shndx], shndx, &ignore);
   1628 
   1629 	      /* Check whether the section is merge-able.  In this case we
   1630 		 have to record the symbol.  */
   1631 	      if (SCNINFO_SHDR (fileinfo->scninfo[shndx].shdr).sh_flags
   1632 		  & SHF_MERGE)
   1633 		{
   1634 		  if (fileinfo->scninfo[shndx].symbols == NULL)
   1635 		    fileinfo->scninfo[shndx].symbols = newp->next_in_scn
   1636 		      = newp;
   1637 		  else
   1638 		    {
   1639 		      newp->next_in_scn
   1640 			= fileinfo->scninfo[shndx].symbols->next_in_scn;
   1641 		      fileinfo->scninfo[shndx].symbols
   1642 			= fileinfo->scninfo[shndx].symbols->next_in_scn = newp;
   1643 		    }
   1644 		}
   1645 	    }
   1646 	}
   1647 
   1648       /* This file is used.  */
   1649       if (likely (fileinfo->file_type == relocatable_file_type))
   1650 	{
   1651 	  if (unlikely (ld_state.relfiles == NULL))
   1652 	    ld_state.relfiles = fileinfo->next = fileinfo;
   1653 	  else
   1654 	    {
   1655 	      fileinfo->next = ld_state.relfiles->next;
   1656 	      ld_state.relfiles = ld_state.relfiles->next = fileinfo;
   1657 	    }
   1658 
   1659 	  /* Update some summary information in the state structure.  */
   1660 	  ld_state.nsymtab += fileinfo->nsymtab;
   1661 	  ld_state.nlocalsymbols += fileinfo->nlocalsymbols;
   1662 	}
   1663       else if (likely (fileinfo->file_type == dso_file_type))
   1664 	{
   1665 	  CSNGL_LIST_ADD_REAR (ld_state.dsofiles, fileinfo);
   1666 	  ++ld_state.ndsofiles;
   1667 
   1668 	  if (fileinfo->lazyload)
   1669 	    /* We have to create another dynamic section entry for the
   1670 	       DT_POSFLAG_1 entry.
   1671 
   1672 	       XXX Once more functionality than the lazyloading flag
   1673 	       are suppported the test must be extended.  */
   1674 	    ++ld_state.ndsofiles;
   1675 	}
   1676     }
   1677 
   1678   return 0;
   1679 }
   1680 
   1681 
   1682 int
   1683 ld_handle_filename_list (struct filename_list *fnames)
   1684 {
   1685   struct filename_list *runp;
   1686   int res = 0;
   1687 
   1688   for (runp = fnames; runp != NULL; runp = runp->next)
   1689     {
   1690       struct usedfiles *curp;
   1691 
   1692       /* Create a record for the new file.  */
   1693       curp = runp->real = ld_new_inputfile (runp->name, relocatable_file_type);
   1694 
   1695       /* Set flags for group handling.  */
   1696       curp->group_start = runp->group_start;
   1697       curp->group_end = runp->group_end;
   1698 
   1699       /* Set as-needed flag from the file, not the command line.  */
   1700       curp->as_needed = runp->as_needed;
   1701 
   1702       /* Read the file and everything else which comes up, including
   1703 	 handling groups.  */
   1704       do
   1705 	res |= FILE_PROCESS (-1, curp, &ld_state, &curp);
   1706       while (curp != NULL);
   1707     }
   1708 
   1709   /* Free the list.  */
   1710   while (fnames != NULL)
   1711     {
   1712       runp = fnames;
   1713       fnames = fnames->next;
   1714       free (runp);
   1715     }
   1716 
   1717   return res;
   1718 }
   1719 
   1720 
   1721 /* Handle opening of the given file with ELF descriptor.  */
   1722 static int
   1723 open_elf (struct usedfiles *fileinfo, Elf *elf)
   1724 {
   1725   int res = 0;
   1726 
   1727   if (elf == NULL)
   1728     error (EXIT_FAILURE, 0,
   1729 	   gettext ("cannot get descriptor for ELF file (%s:%d): %s\n"),
   1730 	   __FILE__, __LINE__, elf_errmsg (-1));
   1731 
   1732   if (unlikely (elf_kind (elf) == ELF_K_NONE))
   1733     {
   1734       struct filename_list *fnames;
   1735 
   1736       /* We don't have to look at this file again.  */
   1737       fileinfo->status = closed;
   1738 
   1739       /* Let's see whether this is a linker script.  */
   1740       if (fileinfo->fd != -1)
   1741 	/* Create a stream from the file handle we know.  */
   1742 	ldin = fdopen (fileinfo->fd, "r");
   1743       else
   1744 	{
   1745 	  /* Get the memory for the archive member.  */
   1746 	  char *content;
   1747 	  size_t contentsize;
   1748 
   1749 	  /* Get the content of the file.  */
   1750 	  content = elf_rawfile (elf, &contentsize);
   1751 	  if (content == NULL)
   1752 	    {
   1753 	      fprintf (stderr, gettext ("%s: invalid ELF file (%s:%d)\n"),
   1754 		       fileinfo->rfname, __FILE__, __LINE__);
   1755 	      return 1;
   1756 	    }
   1757 
   1758 	  /* The content of the file is available in memory.  Read the
   1759 	     memory region as a stream.  */
   1760 	  ldin = fmemopen (content, contentsize, "r");
   1761 	}
   1762 
   1763       /* No need for locking.  */
   1764       __fsetlocking (ldin, FSETLOCKING_BYCALLER);
   1765 
   1766       if (ldin == NULL)
   1767 	error (EXIT_FAILURE, errno, gettext ("cannot open '%s'"),
   1768 	       fileinfo->rfname);
   1769 
   1770       /* Parse the file.  If it is a linker script no problems will be
   1771 	 reported.  */
   1772       ld_state.srcfiles = NULL;
   1773       ldlineno = 1;
   1774       ld_scan_version_script = 0;
   1775       ldin_fname = fileinfo->rfname;
   1776       res = ldparse ();
   1777 
   1778       fclose (ldin);
   1779       if (fileinfo->fd != -1 && !fileinfo->fd_passed)
   1780 	{
   1781 	  /* We won't need the file descriptor again.  */
   1782 	  close (fileinfo->fd);
   1783 	  fileinfo->fd = -1;
   1784 	}
   1785 
   1786       elf_end (elf);
   1787 
   1788       if (unlikely (res != 0))
   1789 	/* Something went wrong during parsing.  */
   1790 	return 1;
   1791 
   1792       /* This is no ELF file.  */
   1793       fileinfo->elf = NULL;
   1794 
   1795       /* Now we have to handle eventual INPUT and GROUP statements in
   1796 	 the script.  Read the files mentioned.  */
   1797       fnames = ld_state.srcfiles;
   1798       if (fnames != NULL)
   1799 	{
   1800 	  struct filename_list *oldp;
   1801 
   1802 	  /* Convert the list into a normal single-linked list.  */
   1803 	  oldp = fnames;
   1804 	  fnames = fnames->next;
   1805 	  oldp->next = NULL;
   1806 
   1807 	  /* Remove the list from the state structure.  */
   1808 	  ld_state.srcfiles = NULL;
   1809 
   1810 	  if (unlikely (ld_handle_filename_list (fnames) != 0))
   1811 	    return 1;
   1812 	}
   1813 
   1814       return 0;
   1815     }
   1816 
   1817   /* Store the file info.  */
   1818   fileinfo->elf = elf;
   1819 
   1820   /* The file is ready for action.  */
   1821   fileinfo->status = opened;
   1822 
   1823   return 0;
   1824 }
   1825 
   1826 
   1827 static int
   1828 add_whole_archive (struct usedfiles *fileinfo)
   1829 {
   1830   Elf *arelf;
   1831   Elf_Cmd cmd = ELF_C_READ_MMAP_PRIVATE;
   1832   int res = 0;
   1833 
   1834   while ((arelf = elf_begin (fileinfo->fd, cmd, fileinfo->elf)) != NULL)
   1835     {
   1836       Elf_Arhdr *arhdr = elf_getarhdr (arelf);
   1837       struct usedfiles *newp;
   1838 
   1839       if (arhdr == NULL)
   1840 	abort ();
   1841 
   1842       /* Just to be sure; since these are no files in the archive
   1843 	 these names should never be returned.  */
   1844       assert (strcmp (arhdr->ar_name, "/") != 0);
   1845       assert (strcmp (arhdr->ar_name, "//") != 0);
   1846 
   1847       newp = ld_new_inputfile (arhdr->ar_name, relocatable_file_type);
   1848       newp->archive_file = fileinfo;
   1849 
   1850       if (unlikely (ld_state.trace_files))
   1851 	print_file_name (stdout, newp, 1, 1);
   1852 
   1853       /* This shows that this file is contained in an archive.  */
   1854       newp->fd = -1;
   1855       /* Store the ELF descriptor.  */
   1856       newp->elf = arelf;
   1857       /* Show that we are open for business.  */
   1858       newp->status = opened;
   1859 
   1860       /* Proces the file, add all the symbols etc.  */
   1861       res = file_process2 (newp);
   1862       if (unlikely (res != 0))
   1863 	    break;
   1864 
   1865       /* Advance to the next archive element.  */
   1866       cmd = elf_next (arelf);
   1867     }
   1868 
   1869   return res;
   1870 }
   1871 
   1872 
   1873 static int
   1874 extract_from_archive (struct usedfiles *fileinfo)
   1875 {
   1876   static int archive_seq;
   1877   int res = 0;
   1878 
   1879   if (fileinfo->archive_seq == 0)
   1880     /* This is an archive we are not using completely.  Give it a
   1881        unique number.  */
   1882     fileinfo->archive_seq = ++archive_seq;
   1883 
   1884   /* If there are no unresolved symbols don't do anything.  */
   1885   assert (ld_state.extract_rule == defaultextract
   1886 	  || ld_state.extract_rule == weakextract);
   1887   if ((likely (ld_state.extract_rule == defaultextract)
   1888        ? ld_state.nunresolved_nonweak : ld_state.nunresolved) == 0)
   1889     return 0;
   1890 
   1891   Elf_Arsym *syms;
   1892   size_t nsyms;
   1893 
   1894   /* Get all the symbols.  */
   1895   syms = elf_getarsym (fileinfo->elf, &nsyms);
   1896   if (syms == NULL)
   1897     {
   1898     cannot_read_archive:
   1899       error (0, 0, gettext ("cannot read archive `%s': %s"),
   1900 	     fileinfo->rfname, elf_errmsg (-1));
   1901 
   1902       /* We cannot use this archive anymore.  */
   1903       fileinfo->status = closed;
   1904 
   1905       return 1;
   1906     }
   1907 
   1908   /* Now add all the symbols to the hash table.  Note that there
   1909      can potentially be duplicate definitions.  We'll always use
   1910      the first definition.  */
   1911   // XXX Is this a compatible behavior?
   1912   bool any_used;
   1913   do
   1914     {
   1915       any_used = false;
   1916 
   1917       size_t cnt;
   1918       for (cnt = 0; cnt < nsyms; ++cnt)
   1919 	{
   1920 	  struct symbol search = { .name = syms[cnt].as_name };
   1921 	  struct symbol *sym = ld_symbol_tab_find (&ld_state.symbol_tab,
   1922 						   syms[cnt].as_hash, &search);
   1923 	  if (sym != NULL && ! sym->defined)
   1924 	    {
   1925 	      /* The symbol is referenced and not defined.  */
   1926 	      Elf *arelf;
   1927 	      Elf_Arhdr *arhdr;
   1928 	      struct usedfiles *newp;
   1929 
   1930 	      /* Find the archive member for this symbol.  */
   1931 	      if (unlikely (elf_rand (fileinfo->elf, syms[cnt].as_off)
   1932 			    != syms[cnt].as_off))
   1933 		goto cannot_read_archive;
   1934 
   1935 	      /* Note: no test of a failing 'elf_begin' call.  That's fine
   1936 		 since 'elf'getarhdr' will report the problem.  */
   1937 	      arelf = elf_begin (fileinfo->fd, ELF_C_READ_MMAP_PRIVATE,
   1938 				 fileinfo->elf);
   1939 	      arhdr = elf_getarhdr (arelf);
   1940 	      if (arhdr == NULL)
   1941 		goto cannot_read_archive;
   1942 
   1943 	      /* We have all the information and an ELF handle for the
   1944 		 archive member.  Create the normal data structure for
   1945 		 a file now.  */
   1946 	      newp = ld_new_inputfile (obstack_strdup (&ld_state.smem,
   1947 						       arhdr->ar_name),
   1948 				       relocatable_file_type);
   1949 	      newp->archive_file = fileinfo;
   1950 
   1951 	      if (unlikely (ld_state.trace_files))
   1952 		print_file_name (stdout, newp, 1, 1);
   1953 
   1954 	      /* This shows that this file is contained in an archive.  */
   1955 	      newp->fd = -1;
   1956 	      /* Store the ELF descriptor.  */
   1957 	      newp->elf = arelf;
   1958 	      /* Show that we are open for business.  */
   1959 	      newp->status = in_archive;
   1960 
   1961 	      /* Now read the file and add all the symbols.  */
   1962 	      res = file_process2 (newp);
   1963 	      if (unlikely (res != 0))
   1964 		return res;
   1965 
   1966 	      any_used = true;
   1967 	    }
   1968 	}
   1969 
   1970       if (any_used)
   1971 	{
   1972 	  /* This is an archive therefore it must have a number.  */
   1973 	  assert (fileinfo->archive_seq != 0);
   1974 	  ld_state.last_archive_used = fileinfo->archive_seq;
   1975 	}
   1976     }
   1977   while (any_used);
   1978 
   1979   return res;
   1980 }
   1981 
   1982 
   1983 static int
   1984 file_process2 (struct usedfiles *fileinfo)
   1985 {
   1986   int res;
   1987 
   1988   if (likely (elf_kind (fileinfo->elf) == ELF_K_ELF))
   1989     {
   1990       /* The first time we get here we read the ELF header.  */
   1991 #if NATIVE_ELF != 0
   1992       if (likely (fileinfo->ehdr == NULL))
   1993 #else
   1994       if (likely (FILEINFO_EHDR (fileinfo->ehdr).e_type == ET_NONE))
   1995 #endif
   1996 	{
   1997 	  XElf_Ehdr *ehdr;
   1998 #if NATIVE_ELF != 0
   1999 	  ehdr = xelf_getehdr (fileinfo->elf, fileinfo->ehdr);
   2000 #else
   2001 	  xelf_getehdr_copy (fileinfo->elf, ehdr, fileinfo->ehdr);
   2002 #endif
   2003 	  if (ehdr == NULL)
   2004 	    {
   2005 	      fprintf (stderr, gettext ("%s: invalid ELF file (%s:%d)\n"),
   2006 		       fileinfo->rfname, __FILE__, __LINE__);
   2007 	      fileinfo->status = closed;
   2008 	      return 1;
   2009 	    }
   2010 
   2011 	  if (FILEINFO_EHDR (fileinfo->ehdr).e_type != ET_REL
   2012 	      && unlikely (FILEINFO_EHDR (fileinfo->ehdr).e_type != ET_DYN))
   2013 	    /* XXX Add ebl* function to query types which are allowed
   2014 	       to link in.  */
   2015 	    {
   2016 	      char buf[64];
   2017 
   2018 	      print_file_name (stderr, fileinfo, 1, 0);
   2019 	      fprintf (stderr,
   2020 		       gettext ("file of type %s cannot be linked in\n"),
   2021 		       ebl_object_type_name (ld_state.ebl,
   2022 					     FILEINFO_EHDR (fileinfo->ehdr).e_type,
   2023 					     buf, sizeof (buf)));
   2024 	      fileinfo->status = closed;
   2025 	      return 1;
   2026 	    }
   2027 
   2028 	  /* Make sure the file type matches the backend.  */
   2029 	  if (FILEINFO_EHDR (fileinfo->ehdr).e_machine
   2030 	      != ebl_get_elfmachine (ld_state.ebl))
   2031 	    {
   2032 	      fprintf (stderr, gettext ("\
   2033 %s: input file incompatible with ELF machine type %s\n"),
   2034 		       fileinfo->rfname,
   2035 		       ebl_backend_name (ld_state.ebl));
   2036 	      fileinfo->status = closed;
   2037 	      return 1;
   2038 	    }
   2039 
   2040 	  /* Determine the section header string table section index.  */
   2041 	  if (unlikely (elf_getshstrndx (fileinfo->elf, &fileinfo->shstrndx)
   2042 			< 0))
   2043 	    {
   2044 	      fprintf (stderr, gettext ("\
   2045 %s: cannot get section header string table index: %s\n"),
   2046 		       fileinfo->rfname, elf_errmsg (-1));
   2047 	      fileinfo->status = closed;
   2048 	      return 1;
   2049 	    }
   2050 	}
   2051 
   2052       /* Now handle the different types of files.  */
   2053       if (FILEINFO_EHDR (fileinfo->ehdr).e_type == ET_REL)
   2054 	{
   2055 	  /* Add all the symbol.  Relocatable files have symbol
   2056 	     tables.  */
   2057 	  res = add_relocatable_file (fileinfo, SHT_SYMTAB);
   2058 	}
   2059       else
   2060 	{
   2061 	  bool has_l_name = fileinfo->file_type == archive_file_type;
   2062 
   2063 	  assert (FILEINFO_EHDR (fileinfo->ehdr).e_type == ET_DYN);
   2064 
   2065 	  /* If the file is a DT_NEEDED dependency then the type is
   2066 	     already correctly specified.  */
   2067 	  if (fileinfo->file_type != dso_needed_file_type)
   2068 	    fileinfo->file_type = dso_file_type;
   2069 
   2070 	  /* We cannot use DSOs when generating relocatable objects.  */
   2071 	  if (ld_state.file_type == relocatable_file_type)
   2072 	    {
   2073 	      error (0, 0, gettext ("\
   2074 cannot use DSO '%s' when generating relocatable object file"),
   2075 		     fileinfo->fname);
   2076 	      return 1;
   2077 	    }
   2078 
   2079 	  /* Add all the symbols.  For DSOs we are looking at the
   2080 	     dynamic symbol table.  */
   2081 	  res = add_relocatable_file (fileinfo, SHT_DYNSYM);
   2082 
   2083 	  /* We always have to have a dynamic section.  */
   2084 	  assert (fileinfo->dynscn != NULL);
   2085 
   2086 	  /* We have to remember the dependencies for this object.  It
   2087 	     is necessary to look them up.  */
   2088 	  XElf_Shdr_vardef (dynshdr);
   2089 	  xelf_getshdr (fileinfo->dynscn, dynshdr);
   2090 
   2091 	  Elf_Data *dyndata = elf_getdata (fileinfo->dynscn, NULL);
   2092 	  /* XXX Should we flag the failure to get the dynamic section?  */
   2093 	  if (dynshdr != NULL)
   2094 	    {
   2095 	      int cnt = dynshdr->sh_size / dynshdr->sh_entsize;
   2096 	      XElf_Dyn_vardef (dyn);
   2097 
   2098 	      while (--cnt >= 0)
   2099 		{
   2100 		  xelf_getdyn (dyndata, cnt, dyn);
   2101 		  if (dyn != NULL)
   2102 		    {
   2103 		      if(dyn->d_tag == DT_NEEDED)
   2104 			{
   2105 			  struct usedfiles *newp;
   2106 
   2107 			  newp = ld_new_inputfile (elf_strptr (fileinfo->elf,
   2108 							       dynshdr->sh_link,
   2109 							       dyn->d_un.d_val),
   2110 						   dso_needed_file_type);
   2111 
   2112 			  /* Enqueue the newly found dependencies.  */
   2113 			  // XXX Check that there not already a file with the
   2114 			  // same name.
   2115 			  CSNGL_LIST_ADD_REAR (ld_state.needed, newp);
   2116 			}
   2117 		      else if (dyn->d_tag == DT_SONAME)
   2118 			{
   2119 			  /* We use the DT_SONAME (this is what's there
   2120 			     for).  */
   2121 			  fileinfo->soname = elf_strptr (fileinfo->elf,
   2122 							 dynshdr->sh_link,
   2123 							 dyn->d_un.d_val);
   2124 			  has_l_name = false;
   2125 			}
   2126 		    }
   2127 		}
   2128 	    }
   2129 
   2130 	  /* Construct the file name if the DSO has no SONAME and the
   2131 	     file name comes from a -lXX parameter on the comment
   2132 	     line.  */
   2133 	  if (unlikely (has_l_name))
   2134 	    {
   2135 	      /* The FNAME is the parameter the user specified on the
   2136 		 command line.  We prepend "lib" and append ".so".  */
   2137 	      size_t len = strlen (fileinfo->fname) + 7;
   2138 	      char *newp;
   2139 
   2140 	      newp = (char *) obstack_alloc (&ld_state.smem, len);
   2141 	      strcpy (stpcpy (stpcpy (newp, "lib"), fileinfo->fname), ".so");
   2142 
   2143 	      fileinfo->soname = newp;
   2144 	    }
   2145 	}
   2146     }
   2147   else if (likely (elf_kind (fileinfo->elf) == ELF_K_AR))
   2148     {
   2149       if (unlikely (ld_state.extract_rule == allextract))
   2150 	/* Which this option enabled we have to add all the object
   2151 	   files in the archive.  */
   2152 	res = add_whole_archive (fileinfo);
   2153       else if (ld_state.file_type == relocatable_file_type)
   2154 	{
   2155 	  /* When generating a relocatable object we don't find files
   2156 	     in archives.  */
   2157 	  if (verbose)
   2158 	    error (0, 0, gettext ("input file '%s' ignored"), fileinfo->fname);
   2159 
   2160 	  res = 0;
   2161 	}
   2162       else
   2163 	{
   2164 	  if (ld_state.group_start_requested
   2165 	      && ld_state.group_start_archive == NULL)
   2166 	    ld_state.group_start_archive = fileinfo;
   2167 
   2168 	  if (ld_state.archives == NULL)
   2169 	    ld_state.archives = fileinfo;
   2170 
   2171 	  if (ld_state.tailarchives != NULL)
   2172 	    ld_state.tailarchives->next = fileinfo;
   2173 	  ld_state.tailarchives = fileinfo;
   2174 
   2175 	  /* Extract only the members from the archive which are
   2176 	     currently referenced by unresolved symbols.  */
   2177 	  res = extract_from_archive (fileinfo);
   2178 	}
   2179     }
   2180   else
   2181     /* This should never happen, we know about no other types.  */
   2182     abort ();
   2183 
   2184   return res;
   2185 }
   2186 
   2187 
   2188 /* Process a given file.  The first parameter is a file descriptor for
   2189    the file which can be -1 to indicate the file has not yet been
   2190    found.  The second parameter describes the file to be opened, the
   2191    last one is the state of the linker which among other information
   2192    contain the paths we look at.  */
   2193 static int
   2194 ld_generic_file_process (int fd, struct usedfiles *fileinfo,
   2195 			 struct ld_state *statep, struct usedfiles **nextp)
   2196 {
   2197   int res = 0;
   2198 
   2199   /* By default we go to the next file in the list.  */
   2200   *nextp = fileinfo->next;
   2201 
   2202   /* Set the flag to signal we are looking for a group start.  */
   2203   if (unlikely (fileinfo->group_start))
   2204     {
   2205       ld_state.group_start_requested = true;
   2206       fileinfo->group_start = false;
   2207     }
   2208 
   2209   /* If the file isn't open yet, open it now.  */
   2210   if (likely (fileinfo->status == not_opened))
   2211     {
   2212       bool fd_passed = true;
   2213 
   2214       if (likely (fd == -1))
   2215 	{
   2216 	  /* Find the file ourselves.  */
   2217 	  int err = open_along_path (fileinfo);
   2218 	  if (unlikely (err != 0))
   2219 	    /* We allow libraries and DSOs to be named more than once.
   2220 	       Don't report an error to the caller.  */
   2221 	    return err == EAGAIN ? 0 : err;
   2222 
   2223 	  fd_passed = false;
   2224 	}
   2225       else
   2226 	fileinfo->fd = fd;
   2227 
   2228       /* Remember where we got the descriptor from.  */
   2229       fileinfo->fd_passed = fd_passed;
   2230 
   2231       /* We found the file.  Now test whether it is a file type we can
   2232 	 handle.
   2233 
   2234 	 XXX Do we need to have the ability to start from a given
   2235 	 position in the search path again to look for another file if
   2236 	 the one found has not the right type?  */
   2237       res = open_elf (fileinfo, elf_begin (fileinfo->fd,
   2238 					   is_dso_p (fileinfo->fd)
   2239 					   ? ELF_C_READ_MMAP
   2240 					   : ELF_C_READ_MMAP_PRIVATE, NULL));
   2241       if (unlikely (res != 0))
   2242 	return res;
   2243     }
   2244 
   2245   /* Now that we have opened the file start processing it.  */
   2246   if (likely (fileinfo->status != closed))
   2247     res = file_process2 (fileinfo);
   2248 
   2249   /* Determine which file to look at next.  */
   2250   if (unlikely (fileinfo->group_backref != NULL))
   2251     {
   2252       /* We only go back if an archive other than the one we would go
   2253 	 back to has been used in the last round.  */
   2254       if (ld_state.last_archive_used > fileinfo->group_backref->archive_seq)
   2255 	{
   2256 	  *nextp = fileinfo->group_backref;
   2257 	  ld_state.last_archive_used = 0;
   2258 	}
   2259       else
   2260 	{
   2261 	  /* If we come here this means that the archives we read so
   2262 	     far are not needed anymore.  We can free some of the data
   2263 	     now.  */
   2264 	  struct usedfiles *runp = ld_state.archives;
   2265 
   2266 	  do
   2267 	    {
   2268 	      /* We don't need the ELF descriptor anymore.  Unless there
   2269 		 are no files from the archive used this will not free
   2270 		 the whole file but only some data structures.  */
   2271 	      elf_end (runp->elf);
   2272 	      runp->elf = NULL;
   2273 
   2274 	      runp = runp->next;
   2275 	    }
   2276 	  while (runp != fileinfo->next);
   2277 
   2278 	  /* Do not do this again.  */
   2279 	  ld_state.archives = NULL;
   2280 
   2281 	  /* Do not move on to the next archive.  */
   2282 	  *nextp = fileinfo->next = NULL;
   2283 	}
   2284     }
   2285   else if (unlikely (fileinfo->group_end))
   2286     {
   2287       /* This is the end of a group.  We possibly have to go back.
   2288 	 Determine which file we would go back to and see whether it
   2289 	 makes sense.  If there has not been an archive we don't have
   2290 	 to do anything.  */
   2291       if (ld_state.group_start_requested)
   2292 	{
   2293 	  if (ld_state.group_start_archive != ld_state.tailarchives)
   2294 	    /* The loop includes more than one archive, add the pointer.  */
   2295 	    {
   2296 	      *nextp = ld_state.tailarchives->group_backref =
   2297 		ld_state.group_start_archive;
   2298 	      ld_state.last_archive_used = 0;
   2299 	    }
   2300 	  else
   2301 	    /* We might still have to go back to the beginning of the
   2302 	       group if since the last archive other files have been
   2303 	       added.  But we go back exactly once.  */
   2304 	    if (ld_state.tailarchives != fileinfo)
   2305 	      {
   2306 		*nextp = ld_state.group_start_archive;
   2307 		ld_state.last_archive_used = 0;
   2308 	      }
   2309 	}
   2310 
   2311       /* Clear the flags.  */
   2312       ld_state.group_start_requested = false;
   2313       ld_state.group_start_archive = NULL;
   2314       fileinfo->group_end = false;
   2315     }
   2316 
   2317   return res;
   2318 }
   2319 
   2320 
   2321 /* Library names passed to the linker as -lXX represent files named
   2322    libXX.YY.  The YY part can have different forms, depending on the
   2323    platform.  The generic set is .so and .a (in this order).  */
   2324 static const char **
   2325 ld_generic_lib_extensions (struct ld_state *statep __attribute__ ((__unused__)))
   2326 {
   2327   static const char *exts[] =
   2328     {
   2329       ".so", ".a", NULL
   2330     };
   2331 
   2332   return exts;
   2333 }
   2334 
   2335 
   2336 /* Flag unresolved symbols.  */
   2337 static int
   2338 ld_generic_flag_unresolved (struct ld_state *statep)
   2339 {
   2340   int retval = 0;
   2341 
   2342   if (ld_state.nunresolved_nonweak > 0)
   2343     {
   2344       /* Go through the list and determine the unresolved symbols.  */
   2345       struct symbol *first;
   2346       struct symbol *s;
   2347 
   2348       s = first = ld_state.unresolved->next;
   2349       do
   2350 	{
   2351 	  if (! s->defined && ! s->weak)
   2352 	    {
   2353 	      /* Two special symbol we recognize: the symbol for the
   2354 		 GOT and the dynamic section.  */
   2355 	      if (strcmp (s->name, "_GLOBAL_OFFSET_TABLE_") == 0
   2356 		  || strcmp (s->name, "_DYNAMIC") == 0)
   2357 		{
   2358 		  /* We will have to fill in more information later.  */
   2359 		  ld_state.need_got = true;
   2360 
   2361 		  /* Remember that we found it.  */
   2362 		  if (s->name[1] == 'G')
   2363 		    ld_state.got_symbol = s;
   2364 		  else
   2365 		    ld_state.dyn_symbol = s;
   2366 		}
   2367 	      else if (ld_state.file_type != dso_file_type || !ld_state.nodefs)
   2368 		{
   2369 		  /* XXX The error message should get better.  It should use
   2370 		     the debugging information if present to tell where in the
   2371 		     sources the undefined reference is.  */
   2372 		  error (0, 0, gettext ("undefined symbol `%s' in %s"),
   2373 			 s->name, s->file->fname);
   2374 
   2375 		  retval = 1;
   2376 		}
   2377 	    }
   2378 
   2379 	  /* We cannot decide here what to do with undefined
   2380 	     references which will come from DSO since we do not know
   2381 	     what kind of symbol we expect.  Only when looking at the
   2382 	     relocations we can see whether we need a PLT entry or
   2383 	     only a GOT entry.  */
   2384 
   2385 	  s = s->next;
   2386 	}
   2387       while (s != first);
   2388     }
   2389 
   2390   return retval;
   2391 }
   2392 
   2393 
   2394 /* Close the given file.  */
   2395 static int
   2396 ld_generic_file_close (struct usedfiles *fileinfo, struct ld_state *statep)
   2397 {
   2398   /* Close the ELF descriptor.  */
   2399   elf_end (fileinfo->elf);
   2400 
   2401   /* If we have opened the file descriptor close it.  But we might
   2402      have done this already in which case FD is -1.  */
   2403   if (!fileinfo->fd_passed && fileinfo->fd != -1)
   2404     close (fileinfo->fd);
   2405 
   2406   /* We allocated the resolved file name.  */
   2407   if (fileinfo->fname != fileinfo->rfname)
   2408     free ((char *) fileinfo->rfname);
   2409 
   2410   return 0;
   2411 }
   2412 
   2413 
   2414 static void
   2415 new_generated_scn (enum scn_kind kind, const char *name, int type, int flags,
   2416 		   int entsize, int align)
   2417 {
   2418   struct scnhead *newp;
   2419 
   2420   newp = (struct scnhead *) obstack_calloc (&ld_state.smem,
   2421 					    sizeof (struct scnhead));
   2422   newp->kind = kind;
   2423   newp->name = name;
   2424   newp->nameent = ebl_strtabadd (ld_state.shstrtab, name, 0);
   2425   newp->type = type;
   2426   newp->flags = flags;
   2427   newp->entsize = entsize;
   2428   newp->align = align;
   2429   newp->grp_signature = NULL;
   2430   newp->used = true;
   2431 
   2432   /* All is well.  Create now the data for the section and insert it
   2433      into the section table.  */
   2434   ld_section_tab_insert (&ld_state.section_tab, elf_hash (name), newp);
   2435 }
   2436 
   2437 
   2438 /* Create the sections which are generated by the linker and are not
   2439    present in the input file.  */
   2440 static void
   2441 ld_generic_generate_sections (struct ld_state *statep)
   2442 {
   2443   /* The relocation section type.  */
   2444   int rel_type = REL_TYPE (&ld_state) == DT_REL ? SHT_REL : SHT_RELA;
   2445 
   2446   /* When requested, every output file will have a build ID section.  */
   2447   if (statep->build_id != NULL)
   2448     new_generated_scn (scn_dot_note_gnu_build_id, ".note.gnu.build-id",
   2449 		       SHT_NOTE, SHF_ALLOC, 0, 4);
   2450 
   2451   /* When building dynamically linked object we have to include a
   2452      section containing a string describing the interpreter.  This
   2453      should be at the very beginning of the file together with the
   2454      other information the ELF loader (kernel or wherever) has to look
   2455      at.  We put it as the first section in the file.
   2456 
   2457      We also have to create the dynamic segment which is a special
   2458      section the dynamic linker locates through an entry in the
   2459      program header.  */
   2460   if (dynamically_linked_p ())
   2461     {
   2462       /* Use any versioning (defined or required)?  */
   2463       bool use_versioning = false;
   2464       /* Use version requirements?  */
   2465       bool need_version = false;
   2466 
   2467       /* First the .interp section.  */
   2468       if (ld_state.interp != NULL || ld_state.file_type != dso_file_type)
   2469 	new_generated_scn (scn_dot_interp, ".interp", SHT_PROGBITS, SHF_ALLOC,
   2470 			   0, 1);
   2471 
   2472       /* Now the .dynamic section.  */
   2473       new_generated_scn (scn_dot_dynamic, ".dynamic", SHT_DYNAMIC,
   2474 			 DYNAMIC_SECTION_FLAGS (&ld_state),
   2475 			 xelf_fsize (ld_state.outelf, ELF_T_DYN, 1),
   2476 			 xelf_fsize (ld_state.outelf, ELF_T_ADDR, 1));
   2477 
   2478       /* We will need in any case the dynamic symbol table (even in
   2479 	 the unlikely case that no symbol is exported or referenced
   2480 	 from a DSO).  */
   2481       ld_state.need_dynsym = true;
   2482       new_generated_scn (scn_dot_dynsym, ".dynsym", SHT_DYNSYM, SHF_ALLOC,
   2483 			 xelf_fsize (ld_state.outelf, ELF_T_SYM, 1),
   2484 			 xelf_fsize (ld_state.outelf, ELF_T_ADDR, 1));
   2485       /* It comes with a string table.  */
   2486       new_generated_scn (scn_dot_dynstr, ".dynstr", SHT_STRTAB, SHF_ALLOC,
   2487 			 0, 1);
   2488       /* And a hashing table.  */
   2489       // XXX For Linux/Alpha we need other sizes unless they change...
   2490       if (GENERATE_SYSV_HASH)
   2491 	new_generated_scn (scn_dot_hash, ".hash", SHT_HASH, SHF_ALLOC,
   2492 			   sizeof (Elf32_Word), sizeof (Elf32_Word));
   2493       if (GENERATE_GNU_HASH)
   2494 	new_generated_scn (scn_dot_gnu_hash, ".gnu.hash", SHT_GNU_HASH,
   2495 			   SHF_ALLOC, sizeof (Elf32_Word),
   2496 			   sizeof (Elf32_Word));
   2497 
   2498       /* Create the section associated with the PLT if necessary.  */
   2499       if (ld_state.nplt > 0)
   2500 	{
   2501 	  /* Create the .plt section.  */
   2502 	  /* XXX We might need a function which returns the section flags.  */
   2503 	  new_generated_scn (scn_dot_plt, ".plt", SHT_PROGBITS,
   2504 			     SHF_ALLOC | SHF_EXECINSTR,
   2505 			     /* XXX Is the size correct?  */
   2506 			     xelf_fsize (ld_state.outelf, ELF_T_ADDR, 1),
   2507 			     xelf_fsize (ld_state.outelf, ELF_T_ADDR, 1));
   2508 
   2509 	  /* Create the relocation section for the .plt.  This is always
   2510 	     separate even if the other relocation sections are combined.  */
   2511 	  new_generated_scn (scn_dot_pltrel, ".rel.plt", rel_type, SHF_ALLOC,
   2512 			     rel_type == SHT_REL
   2513 			     ? xelf_fsize (ld_state.outelf, ELF_T_REL, 1)
   2514 			     : xelf_fsize (ld_state.outelf, ELF_T_RELA, 1),
   2515 			     xelf_fsize (ld_state.outelf, ELF_T_ADDR, 1));
   2516 
   2517 	  /* XXX We might need a function which returns the section flags.  */
   2518 	  new_generated_scn (scn_dot_gotplt, ".got.plt", SHT_PROGBITS,
   2519 			     SHF_ALLOC | SHF_WRITE,
   2520 			     xelf_fsize (ld_state.outelf, ELF_T_ADDR, 1),
   2521 			     xelf_fsize (ld_state.outelf, ELF_T_ADDR, 1));
   2522 
   2523 	  /* Mark all used DSOs as used.  Determine whether any referenced
   2524 	     object uses symbol versioning.  */
   2525 	  if (ld_state.from_dso != NULL)
   2526 	    {
   2527 	      struct symbol *srunp = ld_state.from_dso;
   2528 
   2529 	      do
   2530 		{
   2531 		  srunp->file->used = true;
   2532 
   2533 		  if (srunp->file->verdefdata != NULL)
   2534 		    {
   2535 		      XElf_Versym versym;
   2536 
   2537 		      /* The input DSO uses versioning.  */
   2538 		      use_versioning = true;
   2539 		      /* We reference versions.  */
   2540 		      need_version = true;
   2541 
   2542 		      if (xelf_getversym_copy (srunp->file->versymdata,
   2543 					       srunp->symidx, versym) == NULL)
   2544 			assert (! "xelf_getversym failed");
   2545 
   2546 		      /* We cannot link explicitly with an older
   2547 			 version of a symbol.  */
   2548 		      assert ((versym & 0x8000) == 0);
   2549 		      /* We cannot reference local (index 0) or plain
   2550 			 global (index 1) versions.  */
   2551 		      assert (versym > 1);
   2552 
   2553 		      /* Check whether we have already seen the
   2554 			 version and if not add it to the referenced
   2555 			 versions in the output file.  */
   2556 		      if (! srunp->file->verdefused[versym])
   2557 			{
   2558 			  srunp->file->verdefused[versym] = 1;
   2559 
   2560 			  if (++srunp->file->nverdefused == 1)
   2561 			    /* Count the file if it is using versioning.  */
   2562 			    ++ld_state.nverdeffile;
   2563 			  ++ld_state.nverdefused;
   2564 			}
   2565 		    }
   2566 		}
   2567 	      while ((srunp = srunp->next) != ld_state.from_dso);
   2568 	    }
   2569 
   2570 	  /* Create the sections used to record version dependencies.  */
   2571 	  if (need_version)
   2572 	    new_generated_scn (scn_dot_version_r, ".gnu.version_r",
   2573 			       SHT_GNU_verneed, SHF_ALLOC, 0,
   2574 			       xelf_fsize (ld_state.outelf, ELF_T_WORD, 1));
   2575 	}
   2576 
   2577       /* Now count the used DSOs since this is what the user
   2578 	 wants.  */
   2579       int ndt_needed = 0;
   2580       if (ld_state.ndsofiles > 0)
   2581 	{
   2582 	  struct usedfiles *frunp = ld_state.dsofiles;
   2583 
   2584 	  do
   2585 	    if (! frunp->as_needed || frunp->used)
   2586 	      {
   2587 		++ndt_needed;
   2588 		if (frunp->lazyload)
   2589 		  /* We have to create another dynamic section
   2590 		     entry for the DT_POSFLAG_1 entry.
   2591 
   2592 		     XXX Once more functionality than the lazyloading
   2593 		     flag are suppported the test must be
   2594 		     extended.  */
   2595 		  ++ndt_needed;
   2596 	      }
   2597 	  while ((frunp = frunp->next) != ld_state.dsofiles);
   2598 	}
   2599 
   2600       if (use_versioning)
   2601 	new_generated_scn (scn_dot_version, ".gnu.version", SHT_GNU_versym,
   2602 			   SHF_ALLOC,
   2603 			   xelf_fsize (ld_state.outelf, ELF_T_HALF, 1),
   2604 			   xelf_fsize (ld_state.outelf, ELF_T_HALF, 1));
   2605 
   2606       /* We need some entries all the time.  */
   2607       ld_state.ndynamic = (7 + (ld_state.runpath != NULL
   2608 				|| ld_state.rpath != NULL)
   2609 			   + ndt_needed
   2610 			   + (ld_state.init_symbol != NULL ? 1 : 0)
   2611 			   + (ld_state.fini_symbol != NULL ? 1 : 0)
   2612 			   + (use_versioning ? 1 : 0)
   2613 			   + (need_version ? 2 : 0)
   2614 			   + (ld_state.nplt > 0 ? 4 : 0)
   2615 			   + (ld_state.relsize_total > 0 ? 3 : 0));
   2616     }
   2617 
   2618   /* When creating a relocatable file or when we are not stripping the
   2619      output file we create a symbol table.  */
   2620   ld_state.need_symtab = (ld_state.file_type == relocatable_file_type
   2621 			  || ld_state.strip == strip_none);
   2622 
   2623   /* Add the .got section if needed.  */
   2624   if (ld_state.need_got)
   2625     /* XXX We might need a function which returns the section flags.  */
   2626     new_generated_scn (scn_dot_got, ".got", SHT_PROGBITS,
   2627 		       SHF_ALLOC | SHF_WRITE,
   2628 		       xelf_fsize (ld_state.outelf, ELF_T_ADDR, 1),
   2629 		       xelf_fsize (ld_state.outelf, ELF_T_ADDR, 1));
   2630 
   2631   /* Add the .rel.dyn section.  */
   2632   if (ld_state.relsize_total > 0)
   2633     new_generated_scn (scn_dot_dynrel, ".rel.dyn", rel_type, SHF_ALLOC,
   2634 		       rel_type == SHT_REL
   2635 		       ? xelf_fsize (ld_state.outelf, ELF_T_REL, 1)
   2636 		       : xelf_fsize (ld_state.outelf, ELF_T_RELA, 1),
   2637 		       xelf_fsize (ld_state.outelf, ELF_T_ADDR, 1));
   2638 }
   2639 
   2640 
   2641 /* Callback function registered with on_exit to make sure the temporary
   2642    files gets removed if something goes wrong.  */
   2643 static void
   2644 remove_tempfile (int status, void *arg)
   2645 {
   2646   if (status != 0 && ld_state.tempfname != NULL)
   2647     unlink (ld_state.tempfname);
   2648 }
   2649 
   2650 
   2651 /* Create the output file.  The file name is given or "a.out".  We
   2652    create as much of the ELF structure as possible.  */
   2653 static int
   2654 ld_generic_open_outfile (struct ld_state *statep, int machine, int klass,
   2655 			 int data)
   2656 {
   2657   /* We do not create the new file right away with the final name.
   2658      This would destroy an existing file with this name before a
   2659      replacement is finalized.  We create instead a temporary file in
   2660      the same directory.  */
   2661   if (ld_state.outfname == NULL)
   2662     ld_state.outfname = "a.out";
   2663 
   2664   size_t outfname_len = strlen (ld_state.outfname);
   2665   char *tempfname = (char *) obstack_alloc (&ld_state.smem,
   2666 					    outfname_len + sizeof (".XXXXXX"));
   2667   ld_state.tempfname = tempfname;
   2668 
   2669   int fd;
   2670   int try = 0;
   2671   while (1)
   2672     {
   2673       strcpy (mempcpy (tempfname, ld_state.outfname, outfname_len), ".XXXXXX");
   2674 
   2675       /* The use of mktemp() here is fine.  We do not want to use
   2676 	 mkstemp() since then the umask isn't used.  And the output
   2677 	 file will have these permissions anyhow.  Any intruder could
   2678 	 change the file later if it would be possible now.  */
   2679       if (mktemp (tempfname) != NULL
   2680 	  && (fd = open (tempfname, O_RDWR | O_EXCL | O_CREAT | O_NOFOLLOW,
   2681 			 ld_state.file_type == relocatable_file_type
   2682 			 ? DEFFILEMODE : ACCESSPERMS)) != -1)
   2683 	break;
   2684 
   2685       /* Failed this round.  We keep trying a number of times.  */
   2686       if (++try >= 10)
   2687 	error (EXIT_FAILURE, errno, gettext ("cannot create output file"));
   2688     }
   2689   ld_state.outfd = fd;
   2690 
   2691   /* Make sure we remove the temporary file in case something goes
   2692      wrong.  */
   2693   on_exit (remove_tempfile, NULL);
   2694 
   2695   /* Create the ELF file data for the output file.  */
   2696   Elf *elf = ld_state.outelf = elf_begin (fd,
   2697 					  conserve_memory
   2698 					  ? ELF_C_WRITE : ELF_C_WRITE_MMAP,
   2699 					  NULL);
   2700   if (elf == NULL)
   2701     error (EXIT_FAILURE, 0,
   2702 	   gettext ("cannot create ELF descriptor for output file: %s"),
   2703 	   elf_errmsg (-1));
   2704 
   2705   /* Create the basic data structures.  */
   2706   if (! xelf_newehdr (elf, klass))
   2707     /* Couldn't create the ELF header.  Very bad.  */
   2708     error (EXIT_FAILURE, 0,
   2709 	   gettext ("could not create ELF header for output file: %s"),
   2710 	   elf_errmsg (-1));
   2711 
   2712   /* And get the current header so that we can modify it.  */
   2713   XElf_Ehdr_vardef (ehdr);
   2714   xelf_getehdr (elf, ehdr);
   2715   assert (ehdr != NULL);
   2716 
   2717   /* Set the machine type.  */
   2718   ehdr->e_machine = machine;
   2719 
   2720   /* Modify it according to the info we have here and now.  */
   2721   if (ld_state.file_type == executable_file_type)
   2722     ehdr->e_type = ET_EXEC;
   2723   else if (ld_state.file_type == dso_file_type)
   2724     ehdr->e_type = ET_DYN;
   2725   else
   2726     {
   2727       assert (ld_state.file_type == relocatable_file_type);
   2728       ehdr->e_type = ET_REL;
   2729     }
   2730 
   2731   /* Set the ELF version.  */
   2732   ehdr->e_version = EV_CURRENT;
   2733 
   2734   /* Set the endianness.  */
   2735   ehdr->e_ident[EI_DATA] = data;
   2736 
   2737   /* Write the ELF header information back.  */
   2738   (void) xelf_update_ehdr (elf, ehdr);
   2739 
   2740   return 0;
   2741 }
   2742 
   2743 
   2744 /* We compute the offsets of the various copied objects and the total
   2745    size of the memory needed.  */
   2746 // XXX The method used here is simple: go from front to back and pack
   2747 // the objects in this order.  A more space efficient way would
   2748 // actually trying to pack the objects as dense as possible.  But this
   2749 // is more expensive.
   2750 static void
   2751 compute_copy_reloc_offset (XElf_Shdr *shdr)
   2752 {
   2753   struct symbol *runp = ld_state.from_dso;
   2754   assert (runp != NULL);
   2755 
   2756   XElf_Off maxalign = 1;
   2757   XElf_Off offset = 0;
   2758 
   2759   do
   2760     if (runp->need_copy)
   2761       {
   2762 	/* Determine alignment for the symbol.  */
   2763 	// XXX The question is how?  The symbol record itself does not
   2764 	// have the information.  So we have to be conservative and
   2765 	// assume the alignment of the section the symbol is in.
   2766 
   2767 	// XXX We can be more precise.  Use the offset from the beginning
   2768 	// of the section and determine the largest power of two with
   2769 	// module zero.
   2770 	XElf_Off symalign = MAX (SCNINFO_SHDR (runp->file->scninfo[runp->scndx].shdr).sh_addralign, 1);
   2771 	/* Keep track of the maximum alignment requirement.  */
   2772 	maxalign = MAX (maxalign, symalign);
   2773 
   2774 	/* Align current position.  */
   2775 	offset = (offset + symalign - 1) & ~(symalign - 1);
   2776 
   2777 	runp->merge.value = offset;
   2778 
   2779 	offset += runp->size;
   2780       }
   2781   while ((runp = runp->next) != ld_state.from_dso);
   2782 
   2783   shdr->sh_type = SHT_NOBITS;
   2784   shdr->sh_size = offset;
   2785   shdr->sh_addralign = maxalign;
   2786 }
   2787 
   2788 
   2789 static void
   2790 compute_common_symbol_offset (XElf_Shdr *shdr)
   2791 {
   2792   struct symbol *runp = ld_state.common_syms;
   2793   assert (runp != NULL);
   2794 
   2795   XElf_Off maxalign = 1;
   2796   XElf_Off offset = 0;
   2797 
   2798   do
   2799     {
   2800       /* Determine alignment for the symbol.  */
   2801       XElf_Off symalign = runp->merge.value;
   2802 
   2803       /* Keep track of the maximum alignment requirement.  */
   2804       maxalign = MAX (maxalign, symalign);
   2805 
   2806       /* Align current position.  */
   2807       offset = (offset + symalign - 1) & ~(symalign - 1);
   2808 
   2809       runp->merge.value = offset;
   2810 
   2811       offset += runp->size;
   2812     }
   2813   while ((runp = runp->next) != ld_state.common_syms);
   2814 
   2815   shdr->sh_type = SHT_NOBITS;
   2816   shdr->sh_size = offset;
   2817   shdr->sh_addralign = maxalign;
   2818 }
   2819 
   2820 
   2821 static void
   2822 sort_sections_generic (void)
   2823 {
   2824   /* XXX TBI */
   2825   abort ();
   2826 }
   2827 
   2828 
   2829 static int
   2830 match_section (const char *osectname, struct filemask_section_name *sectmask,
   2831 	       struct scnhead **scnhead, bool new_section, size_t segment_nr)
   2832 {
   2833   struct scninfo *prevp;
   2834   struct scninfo *runp;
   2835   struct scninfo *notused;
   2836 
   2837   if (fnmatch (sectmask->section_name->name, (*scnhead)->name, 0) != 0)
   2838     /* The section name does not match.  */
   2839     return new_section;
   2840 
   2841   /* If this is a section generated by the linker it doesn't contain
   2842      the regular information (i.e., input section data etc) and must
   2843      be handle special.  */
   2844   if ((*scnhead)->kind != scn_normal)
   2845     {
   2846       (*scnhead)->name = osectname;
   2847       (*scnhead)->segment_nr = segment_nr;
   2848 
   2849       /* We have to count note section since they get their own
   2850 	 program header entry.  */
   2851       if ((*scnhead)->type == SHT_NOTE)
   2852 	++ld_state.nnotesections;
   2853 
   2854       ld_state.allsections[ld_state.nallsections++] = (*scnhead);
   2855       return true;
   2856     }
   2857 
   2858   /* Now we have to match the file names of the input files.  Some of
   2859      the sections here might not match.    */
   2860   runp = (*scnhead)->last->next;
   2861   prevp = (*scnhead)->last;
   2862   notused = NULL;
   2863 
   2864   do
   2865     {
   2866       /* Base of the file name the section comes from.  */
   2867       const char *brfname = basename (runp->fileinfo->rfname);
   2868 
   2869       /* If the section isn't used, the name doesn't match the positive
   2870 	 inclusion list, or the name does match the negative inclusion
   2871 	 list, ignore the section.  */
   2872       if (!runp->used
   2873 	  || (sectmask->filemask != NULL
   2874 	      && fnmatch (sectmask->filemask, brfname, 0) != 0)
   2875 	  || (sectmask->excludemask != NULL
   2876 	      && fnmatch (sectmask->excludemask, brfname, 0) == 0))
   2877 	{
   2878 	  /* This file does not match the file name masks.  */
   2879 	  if (notused == NULL)
   2880 	    notused = runp;
   2881 
   2882 	  prevp = runp;
   2883 	  runp = runp->next;
   2884 	  if (runp == notused)
   2885 	    runp = NULL;
   2886 	}
   2887       /* The section fulfills all requirements, add it to the output
   2888 	 file with the correct section name etc.  */
   2889       else
   2890 	{
   2891 	  struct scninfo *found = runp;
   2892 
   2893 	  /* Remove this input section data buffer from the list.  */
   2894 	  if (prevp != runp)
   2895 	    runp = prevp->next = runp->next;
   2896 	  else
   2897 	    {
   2898 	      free (*scnhead);
   2899 	      *scnhead = NULL;
   2900 	      runp = NULL;
   2901 	    }
   2902 
   2903 	  /* Create a new section for the output file if the 'new_section'
   2904 	     flag says so.  Otherwise append the buffer to the last
   2905 	     section which we created in one of the last calls.  */
   2906 	  if (new_section)
   2907 	    {
   2908 	      struct scnhead *newp;
   2909 
   2910 	      newp = (struct scnhead *) obstack_calloc (&ld_state.smem,
   2911 							sizeof (*newp));
   2912 	      newp->kind = scn_normal;
   2913 	      newp->name = osectname;
   2914 	      newp->type = SCNINFO_SHDR (found->shdr).sh_type;
   2915 	      /* Executable or DSO do not have section groups.  Drop that
   2916 		 information.  */
   2917 	      newp->flags = SCNINFO_SHDR (found->shdr).sh_flags & ~SHF_GROUP;
   2918 	      newp->segment_nr = segment_nr;
   2919 	      newp->last = found->next = found;
   2920 	      newp->used = true;
   2921 	      newp->relsize = found->relsize;
   2922 	      newp->entsize = SCNINFO_SHDR (found->shdr).sh_entsize;
   2923 
   2924 	      /* We have to count note section since they get their own
   2925 		 program header entry.  */
   2926 	      if (newp->type == SHT_NOTE)
   2927 		++ld_state.nnotesections;
   2928 
   2929 	      ld_state.allsections[ld_state.nallsections++] = newp;
   2930 	      new_section = false;
   2931 	    }
   2932 	  else
   2933 	    {
   2934 	      struct scnhead *queued;
   2935 
   2936 	      queued = ld_state.allsections[ld_state.nallsections - 1];
   2937 
   2938 	      found->next = queued->last->next;
   2939 	      queued->last = queued->last->next = found;
   2940 
   2941 	      /* If the linker script forces us to add incompatible
   2942 		 sections together do so.  But reflect this in the
   2943 		 type and flags of the resulting file.  */
   2944 	      if (queued->type != SCNINFO_SHDR (found->shdr).sh_type)
   2945 		/* XXX Any better choice?  */
   2946 		queued->type = SHT_PROGBITS;
   2947 	      if (queued->flags != SCNINFO_SHDR (found->shdr).sh_flags)
   2948 		/* Executable or DSO do not have section groups.  Drop that
   2949 		   information.  */
   2950 		queued->flags = ebl_sh_flags_combine (ld_state.ebl,
   2951 						      queued->flags,
   2952 						      SCNINFO_SHDR (found->shdr).sh_flags
   2953 						      & ~SHF_GROUP);
   2954 
   2955 	      /* Accumulate the relocation section size.  */
   2956 	      queued->relsize += found->relsize;
   2957 	    }
   2958 	}
   2959     }
   2960   while (runp != NULL);
   2961 
   2962   return new_section;
   2963 }
   2964 
   2965 
   2966 static void
   2967 sort_sections_lscript (void)
   2968 {
   2969   struct scnhead *temp[ld_state.nallsections];
   2970 
   2971   /* Make a copy of the section head pointer array.  */
   2972   memcpy (temp, ld_state.allsections,
   2973 	  ld_state.nallsections * sizeof (temp[0]));
   2974   size_t nallsections = ld_state.nallsections;
   2975 
   2976   /* Convert the output segment list in a single-linked list.  */
   2977   struct output_segment *segment = ld_state.output_segments->next;
   2978   ld_state.output_segments->next = NULL;
   2979   ld_state.output_segments = segment;
   2980 
   2981   /* Put the sections in the correct order in the array in the state
   2982      structure.  This might involve merging of sections and also
   2983      renaming the containing section in the output file.  */
   2984   ld_state.nallsections = 0;
   2985   size_t segment_nr;
   2986   size_t last_writable = ~0ul;
   2987   for (segment_nr = 0; segment != NULL; segment = segment->next, ++segment_nr)
   2988     {
   2989       struct output_rule *orule;
   2990 
   2991       for (orule = segment->output_rules; orule != NULL; orule = orule->next)
   2992 	if (orule->tag == output_section)
   2993 	  {
   2994 	    struct input_rule *irule;
   2995 	    bool new_section = true;
   2996 
   2997 	    for (irule = orule->val.section.input; irule != NULL;
   2998 		 irule = irule->next)
   2999 	      if (irule->tag == input_section)
   3000 		{
   3001 		  size_t cnt;
   3002 
   3003 		  for (cnt = 0; cnt < nallsections; ++cnt)
   3004 		    if (temp[cnt] != NULL)
   3005 		      new_section =
   3006 			match_section (orule->val.section.name,
   3007 				       irule->val.section, &temp[cnt],
   3008 				       new_section, segment_nr);
   3009 		}
   3010 	  }
   3011 
   3012       if ((segment->mode & PF_W) != 0)
   3013 	last_writable = ld_state.nallsections - 1;
   3014     }
   3015 
   3016   /* In case we have to create copy relocations or we have common
   3017      symbols, find the last writable segment and add one more data
   3018      block.  It will be a NOBITS block and take up no disk space.
   3019      This is why it is important to get the last block.  */
   3020   if (ld_state.ncopy > 0 || ld_state.common_syms !=  NULL)
   3021     {
   3022       if (last_writable == ~0ul)
   3023 	error (EXIT_FAILURE, 0, "no writable segment");
   3024 
   3025       if (ld_state.allsections[last_writable]->type != SHT_NOBITS)
   3026 	{
   3027 	  /* Make room in the ALLSECTIONS array for a new section.
   3028 	     There is guaranteed room in the array.  We add the new
   3029 	     entry after the last writable section.  */
   3030 	  ++last_writable;
   3031 	  memmove (&ld_state.allsections[last_writable + 1],
   3032 		   &ld_state.allsections[last_writable],
   3033 		   (ld_state.nallsections - last_writable)
   3034 		   * sizeof (ld_state.allsections[0]));
   3035 
   3036 	  ld_state.allsections[last_writable] = (struct scnhead *)
   3037 	    obstack_calloc (&ld_state.smem, sizeof (struct scnhead));
   3038 
   3039 	  /* Name for the new section.  */
   3040 	  ld_state.allsections[last_writable]->name = ".bss";
   3041 	  /* Type: NOBITS.  */
   3042 	  ld_state.allsections[last_writable]->type = SHT_NOBITS;
   3043 	  /* Same segment as the last writable section.  */
   3044 	  ld_state.allsections[last_writable]->segment_nr
   3045 	    = ld_state.allsections[last_writable - 1]->segment_nr;
   3046 	}
   3047     }
   3048 
   3049   /* Create common symbol data block.  */
   3050   if (ld_state.ncopy > 0)
   3051     {
   3052 #if NATIVE_ELF
   3053       struct scninfo *si = (struct scninfo *)
   3054 	obstack_calloc (&ld_state.smem, sizeof (*si) + sizeof (XElf_Shdr));
   3055       si->shdr = (XElf_Shdr *) (si + 1);
   3056 #else
   3057       struct scninfo *si = (struct scninfo *) obstack_calloc (&ld_state.smem,
   3058 							      sizeof (*si));
   3059 #endif
   3060 
   3061       /* Get the information regarding the symbols with copy relocations.  */
   3062       compute_copy_reloc_offset (&SCNINFO_SHDR (si->shdr));
   3063 
   3064       /* This section is needed.  */
   3065       si->used = true;
   3066       /* Remember for later the section data structure.  */
   3067       ld_state.copy_section = si;
   3068 
   3069       if (likely (ld_state.allsections[last_writable]->last != NULL))
   3070 	{
   3071 	  si->next = ld_state.allsections[last_writable]->last->next;
   3072 	  ld_state.allsections[last_writable]->last->next = si;
   3073 	  ld_state.allsections[last_writable]->last = si;
   3074 	}
   3075       else
   3076 	ld_state.allsections[last_writable]->last = si->next = si;
   3077     }
   3078 
   3079   /* Create common symbol data block.  */
   3080   if (ld_state.common_syms != NULL)
   3081     {
   3082 #if NATIVE_ELF
   3083       struct scninfo *si = (struct scninfo *)
   3084 	obstack_calloc (&ld_state.smem, sizeof (*si) + sizeof (XElf_Shdr));
   3085       si->shdr = (XElf_Shdr *) (si + 1);
   3086 #else
   3087       struct scninfo *si = (struct scninfo *) obstack_calloc (&ld_state.smem,
   3088 							      sizeof (*si));
   3089 #endif
   3090 
   3091       /* Get the information regarding the symbols with copy relocations.  */
   3092       compute_common_symbol_offset (&SCNINFO_SHDR (si->shdr));
   3093 
   3094       /* This section is needed.  */
   3095       si->used = true;
   3096       /* Remember for later the section data structure.  */
   3097       ld_state.common_section = si;
   3098 
   3099       if (likely (ld_state.allsections[last_writable]->last != NULL))
   3100 	{
   3101 	  si->next = ld_state.allsections[last_writable]->last->next;
   3102 	  ld_state.allsections[last_writable]->last->next = si;
   3103 	  ld_state.allsections[last_writable]->last = si;
   3104 	}
   3105       else
   3106 	ld_state.allsections[last_writable]->last = si->next = si;
   3107     }
   3108 }
   3109 
   3110 
   3111 /* Create the output sections now.  This requires knowledge about all
   3112    the sections we will need.  It may be necessary to sort sections in
   3113    the order they are supposed to appear in the executable.  The
   3114    sorting use many different kinds of information to optimize the
   3115    resulting binary.  Important is to respect segment boundaries and
   3116    the needed alignment.  The mode of the segments will be determined
   3117    afterwards automatically by the output routines.
   3118 
   3119    The generic sorting routines work in one of two possible ways:
   3120 
   3121    - if a linker script specifies the sections to be used in the
   3122      output and assigns them to a segment this information is used;
   3123 
   3124    - otherwise the linker will order the sections based on permissions
   3125      and some special knowledge about section names.*/
   3126 static void
   3127 ld_generic_create_sections (struct ld_state *statep)
   3128 {
   3129   struct scngroup *groups;
   3130   size_t cnt;
   3131 
   3132   /* For relocatable object we don't have to bother sorting the
   3133      sections and we do want to preserve the relocation sections as
   3134      they appear in the input files.  */
   3135   if (ld_state.file_type != relocatable_file_type)
   3136     {
   3137       /* Collect all the relocation sections.  They are handled
   3138 	 separately.  */
   3139       struct scninfo *list = NULL;
   3140       for (cnt = 0; cnt < ld_state.nallsections; ++cnt)
   3141 	if ((ld_state.allsections[cnt]->type == SHT_REL
   3142 	     || ld_state.allsections[cnt]->type == SHT_RELA)
   3143 	    /* The generated relocation sections are not of any
   3144 	       interest here.  */
   3145 	    && ld_state.allsections[cnt]->last != NULL)
   3146 	  {
   3147 	    if (list == NULL)
   3148 	      list = ld_state.allsections[cnt]->last;
   3149 	    else
   3150 	      {
   3151 		/* Merge the sections list.  */
   3152 		struct scninfo *first = list->next;
   3153 		list->next = ld_state.allsections[cnt]->last->next;
   3154 		ld_state.allsections[cnt]->last->next = first;
   3155 		list = ld_state.allsections[cnt]->last;
   3156 	      }
   3157 
   3158 	    /* Remove the entry from the section list.  */
   3159 	    ld_state.allsections[cnt] = NULL;
   3160 	  }
   3161       ld_state.rellist = list;
   3162 
   3163       if (ld_state.output_segments == NULL)
   3164 	/* Sort using builtin rules.  */
   3165 	sort_sections_generic ();
   3166       else
   3167 	sort_sections_lscript ();
   3168     }
   3169 
   3170   /* Now iterate over the input sections and create the sections in the
   3171      order they are required in the output file.  */
   3172   for (cnt = 0; cnt < ld_state.nallsections; ++cnt)
   3173     {
   3174       struct scnhead *head = ld_state.allsections[cnt];
   3175       Elf_Scn *scn;
   3176       XElf_Shdr_vardef (shdr);
   3177 
   3178       /* Don't handle unused sections.  */
   3179       if (!head->used)
   3180 	continue;
   3181 
   3182       /* We first have to create the section group if necessary.
   3183 	 Section group sections must come (in section index order)
   3184 	 before any of the section contained.  This all is necessary
   3185 	 only for relocatable object as other object types are not
   3186 	 allowed to contain section groups.  */
   3187       if (ld_state.file_type == relocatable_file_type
   3188 	  && unlikely (head->flags & SHF_GROUP))
   3189 	{
   3190 	  /* There is at least one section which is contained in a
   3191 	     section group in the input file.  This means we must
   3192 	     create a section group here as well.  The only problem is
   3193 	     that not all input files have to have to same kind of
   3194 	     partitioning of the sections.  I.e., sections A and B in
   3195 	     one input file and sections B and C in another input file
   3196 	     can be in one group.  That will result in a group
   3197 	     containing the sections A, B, and C in the output
   3198 	     file.  */
   3199 	  struct scninfo *runp;
   3200 	  Elf32_Word here_groupidx = 0;
   3201 	  struct scngroup *here_group;
   3202 	  struct member *newp;
   3203 
   3204 	  /* First check whether any section is already in a group.
   3205 	     In this case we have to add this output section, too.  */
   3206 	  runp = head->last;
   3207 	  do
   3208 	    {
   3209 	      assert (runp->grpid != 0);
   3210 
   3211 	      here_groupidx = runp->fileinfo->scninfo[runp->grpid].outscnndx;
   3212 	      if (here_groupidx != 0)
   3213 		break;
   3214 	    }
   3215 	  while ((runp = runp->next) != head->last);
   3216 
   3217 	  if (here_groupidx == 0)
   3218 	    {
   3219 	      /* We need a new section group section.  */
   3220 	      scn = elf_newscn (ld_state.outelf);
   3221 	      xelf_getshdr (scn, shdr);
   3222 	      if (shdr == NULL)
   3223 		error (EXIT_FAILURE, 0,
   3224 		       gettext ("cannot create section for output file: %s"),
   3225 		       elf_errmsg (-1));
   3226 
   3227 	      here_group = (struct scngroup *) xmalloc (sizeof (*here_group));
   3228 	      here_group->outscnidx = here_groupidx = elf_ndxscn (scn);
   3229 	      here_group->nscns = 0;
   3230 	      here_group->member = NULL;
   3231 	      here_group->next = ld_state.groups;
   3232 	      /* Pick a name for the section.  To keep it meaningful
   3233 		 we use a name used in the input files.  If the
   3234 		 section group in the output file should contain
   3235 		 section which were in section groups of different
   3236 		 names in the input files this is the users
   3237 		 problem.  */
   3238 	      here_group->nameent
   3239 		= ebl_strtabadd (ld_state.shstrtab,
   3240 				 elf_strptr (runp->fileinfo->elf,
   3241 					     runp->fileinfo->shstrndx,
   3242 					     SCNINFO_SHDR (runp->shdr).sh_name),
   3243 				 0);
   3244 	      /* Signature symbol.  */
   3245 	      here_group->symbol
   3246 		= runp->fileinfo->scninfo[runp->grpid].symbols;
   3247 
   3248 	      ld_state.groups = here_group;
   3249 	    }
   3250 	  else
   3251 	    {
   3252 	      /* Search for the group with this index.  */
   3253 	      here_group = ld_state.groups;
   3254 	      while (here_group->outscnidx != here_groupidx)
   3255 		here_group = here_group->next;
   3256 	    }
   3257 
   3258 	  /* Add the new output section.  */
   3259 	  newp = (struct member *) alloca (sizeof (*newp));
   3260 	  newp->scn = head;
   3261 #ifndef NDT_NEEDED
   3262 	  newp->next = NULL;
   3263 #endif
   3264 	  CSNGL_LIST_ADD_REAR (here_group->member, newp);
   3265 	  ++here_group->nscns;
   3266 
   3267 	  /* Store the section group index in all input files.  */
   3268 	  runp = head->last;
   3269 	  do
   3270 	    {
   3271 	      assert (runp->grpid != 0);
   3272 
   3273 	      if (runp->fileinfo->scninfo[runp->grpid].outscnndx == 0)
   3274 		runp->fileinfo->scninfo[runp->grpid].outscnndx = here_groupidx;
   3275 	      else
   3276 		assert (runp->fileinfo->scninfo[runp->grpid].outscnndx
   3277 			== here_groupidx);
   3278 	    }
   3279 	  while ((runp = runp->next) != head->last);
   3280 	}
   3281 
   3282       /* We'll use this section so get it's name in the section header
   3283 	 string table.  */
   3284       if (head->kind == scn_normal)
   3285 	head->nameent = ebl_strtabadd (ld_state.shstrtab, head->name, 0);
   3286 
   3287       /* Create a new section in the output file and add all data
   3288 	 from all the sections we read.  */
   3289       scn = elf_newscn (ld_state.outelf);
   3290       head->scnidx = elf_ndxscn (scn);
   3291       xelf_getshdr (scn, shdr);
   3292       if (shdr == NULL)
   3293 	error (EXIT_FAILURE, 0,
   3294 	       gettext ("cannot create section for output file: %s"),
   3295 	       elf_errmsg (-1));
   3296 
   3297       assert (head->type != SHT_NULL);
   3298       assert (head->type != SHT_SYMTAB);
   3299       assert (head->type != SHT_DYNSYM || head->kind != scn_normal);
   3300       assert (head->type != SHT_STRTAB || head->kind != scn_normal);
   3301       assert (head->type != SHT_GROUP);
   3302       shdr->sh_type = head->type;
   3303       shdr->sh_flags = head->flags;
   3304       shdr->sh_addralign = head->align;
   3305       shdr->sh_entsize = head->entsize;
   3306       assert (shdr->sh_entsize != 0 || (shdr->sh_flags & SHF_MERGE) == 0);
   3307       (void) xelf_update_shdr (scn, shdr);
   3308 
   3309       /* We have to know the section index of the dynamic symbol table
   3310 	 right away.  */
   3311       if (head->kind == scn_dot_dynsym)
   3312 	ld_state.dynsymscnidx = elf_ndxscn (scn);
   3313     }
   3314 
   3315   /* Actually create the section group sections.  */
   3316   groups = ld_state.groups;
   3317   while (groups != NULL)
   3318     {
   3319       Elf_Scn *scn;
   3320       Elf_Data *data;
   3321       Elf32_Word *grpdata;
   3322       struct member *runp;
   3323 
   3324       scn = elf_getscn (ld_state.outelf, groups->outscnidx);
   3325       assert (scn != NULL);
   3326 
   3327       data = elf_newdata (scn);
   3328       if (data == NULL)
   3329 	error (EXIT_FAILURE, 0,
   3330 	       gettext ("cannot create section for output file: %s"),
   3331 	       elf_errmsg (-1));
   3332 
   3333       data->d_size = (groups->nscns + 1) * sizeof (Elf32_Word);
   3334       data->d_buf = grpdata = (Elf32_Word *) xmalloc (data->d_size);
   3335       data->d_type = ELF_T_WORD;
   3336       data->d_version = EV_CURRENT;
   3337       data->d_off = 0;
   3338       /* XXX What better to use?  */
   3339       data->d_align = sizeof (Elf32_Word);
   3340 
   3341       /* The first word in the section is the flag word.  */
   3342       /* XXX Set COMDATA flag is necessary.  */
   3343       grpdata[0] = 0;
   3344 
   3345       runp = groups->member->next;
   3346       cnt = 1;
   3347       do
   3348 	/* Fill in the index of the section.  */
   3349 	grpdata[cnt++] = runp->scn->scnidx;
   3350       while ((runp = runp->next) != groups->member->next);
   3351 
   3352       groups = groups->next;
   3353     }
   3354 }
   3355 
   3356 
   3357 static bool
   3358 reduce_symbol_p (XElf_Sym *sym, struct Ebl_Strent *strent)
   3359 {
   3360   const char *str;
   3361   const char *version;
   3362   struct id_list search;
   3363   struct id_list *verp;
   3364   bool result = ld_state.default_bind_local;
   3365 
   3366   if (XELF_ST_BIND (sym->st_info) == STB_LOCAL || sym->st_shndx == SHN_UNDEF)
   3367     /* We don't have to do anything to local symbols here.  */
   3368     /* XXX Any section value in [SHN_LORESERVER,SHN_XINDEX) need
   3369        special treatment?  */
   3370     return false;
   3371 
   3372   /* XXX Handle other symbol bindings.  */
   3373   assert (XELF_ST_BIND (sym->st_info) == STB_GLOBAL
   3374 	  || XELF_ST_BIND (sym->st_info) == STB_WEAK);
   3375 
   3376   str = ebl_string (strent);
   3377   version = strchr (str, VER_CHR);
   3378   if (version != NULL)
   3379     {
   3380       search.id = strndupa (str, version - str);
   3381       if (*++version == VER_CHR)
   3382 	/* Skip the second '@' signaling a default definition.  */
   3383 	++version;
   3384     }
   3385   else
   3386     {
   3387       search.id = str;
   3388       version = "";
   3389     }
   3390 
   3391   verp = ld_version_str_tab_find (&ld_state.version_str_tab,
   3392 				  elf_hash (search.id), &search);
   3393   while (verp != NULL)
   3394     {
   3395       /* We have this symbol in the version hash table.  Now match the
   3396 	 version name.  */
   3397       if (strcmp (verp->u.s.versionname, version) == 0)
   3398 	/* Match!  */
   3399 	return verp->u.s.local;
   3400 
   3401       verp = verp->next;
   3402     }
   3403 
   3404   /* XXX Add test for wildcard version symbols.  */
   3405 
   3406   return result;
   3407 }
   3408 
   3409 
   3410 static XElf_Addr
   3411 eval_expression (struct expression *expr, XElf_Addr addr)
   3412 {
   3413   XElf_Addr val = ~((XElf_Addr) 0);
   3414 
   3415   switch (expr->tag)
   3416     {
   3417     case exp_num:
   3418       val = expr->val.num;
   3419       break;
   3420 
   3421     case exp_sizeof_headers:
   3422       {
   3423 	/* The 'elf_update' call determine the offset of the first
   3424 	   section.  The the size of the header.  */
   3425 	XElf_Shdr_vardef (shdr);
   3426 
   3427 	xelf_getshdr (elf_getscn (ld_state.outelf, 1), shdr);
   3428 	assert (shdr != NULL);
   3429 
   3430 	val = shdr->sh_offset;
   3431       }
   3432       break;
   3433 
   3434     case exp_pagesize:
   3435       val = ld_state.pagesize;
   3436       break;
   3437 
   3438     case exp_id:
   3439       /* We are here computing only address expressions.  It seems not
   3440 	 to be necessary to handle any variable but ".".  Let's avoid
   3441 	 the complication.  If it turns up to be needed we can add
   3442 	 it.  */
   3443       if (strcmp (expr->val.str, ".") != 0)
   3444 	error (EXIT_FAILURE, 0, gettext ("\
   3445 address computation expression contains variable '%s'"),
   3446 	       expr->val.str);
   3447 
   3448       val = addr;
   3449       break;
   3450 
   3451     case exp_mult:
   3452       val = (eval_expression (expr->val.binary.left, addr)
   3453 	     * eval_expression (expr->val.binary.right, addr));
   3454       break;
   3455 
   3456     case exp_div:
   3457       val = (eval_expression (expr->val.binary.left, addr)
   3458 	     / eval_expression (expr->val.binary.right, addr));
   3459       break;
   3460 
   3461     case exp_mod:
   3462       val = (eval_expression (expr->val.binary.left, addr)
   3463 	     % eval_expression (expr->val.binary.right, addr));
   3464       break;
   3465 
   3466     case exp_plus:
   3467       val = (eval_expression (expr->val.binary.left, addr)
   3468 	     + eval_expression (expr->val.binary.right, addr));
   3469       break;
   3470 
   3471     case exp_minus:
   3472       val = (eval_expression (expr->val.binary.left, addr)
   3473 	     - eval_expression (expr->val.binary.right, addr));
   3474       break;
   3475 
   3476     case exp_and:
   3477       val = (eval_expression (expr->val.binary.left, addr)
   3478 	     & eval_expression (expr->val.binary.right, addr));
   3479       break;
   3480 
   3481     case exp_or:
   3482       val = (eval_expression (expr->val.binary.left, addr)
   3483 	     | eval_expression (expr->val.binary.right, addr));
   3484       break;
   3485 
   3486     case exp_align:
   3487       val = eval_expression (expr->val.child, addr);
   3488       if ((val & (val - 1)) != 0)
   3489 	error (EXIT_FAILURE, 0, gettext ("argument '%" PRIuMAX "' of ALIGN in address computation expression is no power of two"),
   3490 	       (uintmax_t) val);
   3491       val = (addr + val - 1) & ~(val - 1);
   3492       break;
   3493     }
   3494 
   3495   return val;
   3496 }
   3497 
   3498 
   3499 /* Find a good as possible size for the hash table so that all the
   3500    non-zero entries in HASHCODES don't collide too much and the table
   3501    isn't too large.  There is no exact formular for this so we use a
   3502    heuristic.  Depending on the optimization level the search is
   3503    longer or shorter.  */
   3504 static size_t
   3505 optimal_bucket_size (Elf32_Word *hashcodes, size_t maxcnt, int optlevel)
   3506 {
   3507   size_t minsize;
   3508   size_t maxsize;
   3509   size_t bestsize;
   3510   uint64_t bestcost;
   3511   size_t size;
   3512   uint32_t *counts;
   3513   uint32_t *lengths;
   3514 
   3515   if (maxcnt == 0)
   3516     return 0;
   3517 
   3518   /* When we are not optimizing we run only very few tests.  */
   3519   if (optlevel <= 0)
   3520     {
   3521       minsize = maxcnt;
   3522       maxsize = maxcnt + 10000 / maxcnt;
   3523     }
   3524   else
   3525     {
   3526       /* Does not make much sense to start with a smaller table than
   3527 	 one which has at least four collisions.  */
   3528       minsize = MAX (1, maxcnt / 4);
   3529       /* We look for a best fit in the range of up to eigth times the
   3530 	 number of elements.  */
   3531       maxsize = 2 * maxcnt + (6 * MIN (optlevel, 100) * maxcnt) / 100;
   3532     }
   3533   bestsize = maxcnt;
   3534   bestcost = UINT_MAX;
   3535 
   3536   /* Array for counting the collisions and chain lengths.  */
   3537   counts = (uint32_t *) xmalloc ((maxcnt + 1 + maxsize) * sizeof (uint32_t));
   3538   lengths = &counts[maxcnt + 1];
   3539 
   3540   for (size = minsize; size <= maxsize; ++size)
   3541     {
   3542       size_t inner;
   3543       uint64_t cost;
   3544       uint32_t maxlength;
   3545       uint64_t success;
   3546       uint32_t acc;
   3547       double factor;
   3548 
   3549       memset (lengths, '\0', size * sizeof (uint32_t));
   3550       memset (counts, '\0', (maxcnt + 1) * sizeof (uint32_t));
   3551 
   3552       /* Determine how often each hash bucket is used.  */
   3553       assert (hashcodes[0] == 0);
   3554       for (inner = 1; inner < maxcnt; ++inner)
   3555 	++lengths[hashcodes[inner] % size];
   3556 
   3557       /* Determine the lengths.  */
   3558       maxlength = 0;
   3559       for (inner = 0; inner < size; ++inner)
   3560 	{
   3561 	  ++counts[lengths[inner]];
   3562 
   3563 	  if (lengths[inner] > maxlength)
   3564 	    maxlength = lengths[inner];
   3565 	}
   3566 
   3567       /* Determine successful lookup length.  */
   3568       acc = 0;
   3569       success = 0;
   3570       for (inner = 0; inner <= maxlength; ++inner)
   3571 	{
   3572 	  acc += inner;
   3573 	  success += counts[inner] * acc;
   3574 	}
   3575 
   3576       /* We can compute two factors now: the average length of a
   3577 	 positive search and the average length of a negative search.
   3578 	 We count the number of comparisons which have to look at the
   3579 	 names themselves.  Recognizing that the chain ended is not
   3580 	 accounted for since it's almost for free.
   3581 
   3582 	 Which lookup is more important depends on the kind of DSO.
   3583 	 If it is a system DSO like libc it is expected that most
   3584 	 lookups succeed.  Otherwise most lookups fail.  */
   3585       if (ld_state.is_system_library)
   3586 	factor = (1.0 * (double) success / (double) maxcnt
   3587 		  + 0.3 * (double) maxcnt / (double) size);
   3588       else
   3589 	factor = (0.3 * (double) success / (double) maxcnt
   3590 		  + 1.0 * (double) maxcnt / (double) size);
   3591 
   3592       /* Combine the lookup cost factor.  The 1/16th addend adds
   3593 	 penalties for too large table sizes.  */
   3594       cost = (2 + maxcnt + size) * (factor + 1.0 / 16.0);
   3595 
   3596 #if 0
   3597       printf ("maxcnt = %d, size = %d, cost = %Ld, success = %g, fail = %g, factor = %g\n",
   3598 	      maxcnt, size, cost, (double) success / (double) maxcnt, (double) maxcnt / (double) size, factor);
   3599 #endif
   3600 
   3601       /* Compare with current best results.  */
   3602       if (cost < bestcost)
   3603 	{
   3604 	  bestcost = cost;
   3605 	  bestsize = size;
   3606 	}
   3607     }
   3608 
   3609   free (counts);
   3610 
   3611   return bestsize;
   3612 }
   3613 
   3614 
   3615 static void
   3616 optimal_gnu_hash_size (Elf32_Word *hashcodes, size_t maxcnt, int optlevel,
   3617 		       size_t *bitmask_nwords, size_t *shift, size_t *nbuckets)
   3618 {
   3619   // XXX Implement something real
   3620   *bitmask_nwords = 256;
   3621   *shift = 6;
   3622   *nbuckets = 3 * maxcnt / 2;
   3623 }
   3624 
   3625 
   3626 static XElf_Addr
   3627 find_entry_point (void)
   3628 {
   3629   XElf_Addr result;
   3630 
   3631   if (ld_state.entry != NULL)
   3632     {
   3633       struct symbol search = { .name = ld_state.entry };
   3634       struct symbol *syment;
   3635 
   3636       syment = ld_symbol_tab_find (&ld_state.symbol_tab,
   3637 				   elf_hash (ld_state.entry), &search);
   3638       if (syment != NULL && syment->defined)
   3639 	{
   3640 	  /* We found the symbol.  */
   3641 	  Elf_Data *data = elf_getdata (elf_getscn (ld_state.outelf,
   3642 						    ld_state.symscnidx), NULL);
   3643 
   3644 	  XElf_Sym_vardef (sym);
   3645 
   3646 	  sym = NULL;
   3647 	  if (data != NULL)
   3648 	    xelf_getsym (data, ld_state.dblindirect[syment->outsymidx], sym);
   3649 
   3650 	  if (sym == NULL && ld_state.need_dynsym && syment->outdynsymidx != 0)
   3651 	    {
   3652 	      /* Use the dynamic symbol table if available.  */
   3653 	      data = elf_getdata (elf_getscn (ld_state.outelf,
   3654 					      ld_state.dynsymscnidx), NULL);
   3655 
   3656 	      sym = NULL;
   3657 	      if (data != NULL)
   3658 		xelf_getsym (data, syment->outdynsymidx, sym);
   3659 	    }
   3660 
   3661 	  if (sym != NULL)
   3662 	    return sym->st_value;
   3663 
   3664 	  /* XXX What to do if the output has no non-dynamic symbol
   3665 	     table and the dynamic symbol table does not contain the
   3666 	     symbol?  */
   3667 	  assert (ld_state.need_symtab);
   3668 	  assert (ld_state.symscnidx != 0);
   3669 	}
   3670     }
   3671 
   3672   /* We couldn't find the symbol or none was given.  Use the first
   3673      address of the ".text" section then.  */
   3674 
   3675 
   3676   result = 0;
   3677 
   3678   /* In DSOs this is no fatal error.  They usually have no entry
   3679      points.  In this case we set the entry point to zero, which makes
   3680      sure it will always fail.  */
   3681   if (ld_state.file_type == executable_file_type)
   3682     {
   3683       if (ld_state.entry != NULL)
   3684 	error (0, 0, gettext ("\
   3685 cannot find entry symbol '%s': defaulting to %#0*" PRIx64),
   3686 	       ld_state.entry,
   3687 	       xelf_getclass (ld_state.outelf) == ELFCLASS32 ? 10 : 18,
   3688 	       (uint64_t) result);
   3689       else
   3690 	error (0, 0, gettext ("\
   3691 no entry symbol specified: defaulting to %#0*" PRIx64),
   3692 	       xelf_getclass (ld_state.outelf) == ELFCLASS32 ? 10 : 18,
   3693 	       (uint64_t) result);
   3694     }
   3695 
   3696   return result;
   3697 }
   3698 
   3699 
   3700 static void
   3701 fillin_special_symbol (struct symbol *symst, size_t scnidx, size_t nsym,
   3702 		       Elf_Data *symdata, struct Ebl_Strtab *strtab)
   3703 {
   3704   assert (ld_state.file_type != relocatable_file_type);
   3705 
   3706   XElf_Sym_vardef (sym);
   3707   xelf_getsym_ptr (symdata, nsym, sym);
   3708 
   3709   /* The name offset will be filled in later.  */
   3710   sym->st_name = 0;
   3711   /* Traditionally: globally visible.  */
   3712   sym->st_info = XELF_ST_INFO (symst->local ? STB_LOCAL : STB_GLOBAL,
   3713 			       symst->type);
   3714   sym->st_other = symst->hidden ? STV_HIDDEN : STV_DEFAULT;
   3715   /* Reference to the GOT or dynamic section.  Since the GOT and
   3716      dynamic section are only created for executables and DSOs it
   3717      cannot be that the section index is too large.  */
   3718   assert (scnidx != 0);
   3719   assert (scnidx < SHN_LORESERVE || scnidx == SHN_ABS);
   3720   sym->st_shndx = scnidx;
   3721   /* We want the beginning of the section.  */
   3722   sym->st_value = 0;
   3723   // XXX What size?
   3724   sym->st_size = 0;
   3725 
   3726   /* Determine the size of the section.  */
   3727   if (scnidx != SHN_ABS)
   3728     {
   3729       Elf_Data *data = elf_getdata (elf_getscn (ld_state.outelf, scnidx),
   3730 				    NULL);
   3731       assert (data != NULL);
   3732       sym->st_size = data->d_size;
   3733       /* Make sure there is no second data block.  */
   3734       assert (elf_getdata (elf_getscn (ld_state.outelf, scnidx), data)
   3735 	      == NULL);
   3736     }
   3737 
   3738   /* Insert symbol into the symbol table.  Note that we do not have to
   3739      use xelf_update_symshdx.  */
   3740   (void) xelf_update_sym (symdata, nsym, sym);
   3741 
   3742   /* Cross-references.  */
   3743   ndxtosym[nsym] = symst;
   3744   symst->outsymidx = nsym;
   3745 
   3746   /* Add the name to the string table.  */
   3747   symstrent[nsym] = ebl_strtabadd (strtab, symst->name, 0);
   3748 }
   3749 
   3750 
   3751 static void
   3752 new_dynamic_entry (Elf_Data *data, int idx, XElf_Sxword tag, XElf_Addr val)
   3753 {
   3754   XElf_Dyn_vardef (dyn);
   3755   xelf_getdyn_ptr (data, idx, dyn);
   3756   dyn->d_tag = tag;
   3757   dyn->d_un.d_ptr = val;
   3758   (void) xelf_update_dyn (data, idx, dyn);
   3759 }
   3760 
   3761 
   3762 static void
   3763 allocate_version_names (struct usedfiles *runp, struct Ebl_Strtab *dynstrtab)
   3764 {
   3765   /* If this DSO has no versions skip it.  */
   3766   if (runp->status != opened || runp->verdefdata == NULL)
   3767     return;
   3768 
   3769   /* Add the object name.  */
   3770   int offset = 0;
   3771   while (1)
   3772     {
   3773       XElf_Verdef_vardef (def);
   3774       XElf_Verdaux_vardef (aux);
   3775 
   3776       /* Get data at the next offset.  */
   3777       xelf_getverdef (runp->verdefdata, offset, def);
   3778       assert (def != NULL);
   3779       xelf_getverdaux (runp->verdefdata, offset + def->vd_aux, aux);
   3780       assert (aux != NULL);
   3781 
   3782       assert (def->vd_ndx <= runp->nverdef);
   3783       if (def->vd_ndx == 1 || runp->verdefused[def->vd_ndx] != 0)
   3784 	{
   3785 	  runp->verdefent[def->vd_ndx]
   3786 	    = ebl_strtabadd (dynstrtab, elf_strptr (runp->elf,
   3787 						    runp->dynsymstridx,
   3788 						    aux->vda_name), 0);
   3789 
   3790 	  if (def->vd_ndx > 1)
   3791 	    runp->verdefused[def->vd_ndx] = ld_state.nextveridx++;
   3792 	}
   3793 
   3794       if (def->vd_next == 0)
   3795 	/* That were all versions.  */
   3796 	break;
   3797 
   3798       offset += def->vd_next;
   3799     }
   3800 }
   3801 
   3802 
   3803 static XElf_Off
   3804 create_verneed_data (XElf_Off offset, Elf_Data *verneeddata,
   3805 		     struct usedfiles *runp, int *ntotal)
   3806 {
   3807   size_t verneed_size = xelf_fsize (ld_state.outelf, ELF_T_VNEED, 1);
   3808   size_t vernaux_size = xelf_fsize (ld_state.outelf, ELF_T_VNAUX, 1);
   3809   int need_offset;
   3810   bool filled = false;
   3811   GElf_Verneed verneed;
   3812   GElf_Vernaux vernaux;
   3813   int ndef = 0;
   3814   size_t cnt;
   3815 
   3816   /* If this DSO has no versions skip it.  */
   3817   if (runp->nverdefused == 0)
   3818     return offset;
   3819 
   3820   /* We fill in the Verneed record last.  Remember the offset.  */
   3821   need_offset = offset;
   3822   offset += verneed_size;
   3823 
   3824   for (cnt = 2; cnt <= runp->nverdef; ++cnt)
   3825     if (runp->verdefused[cnt] != 0)
   3826       {
   3827 	assert (runp->verdefent[cnt] != NULL);
   3828 
   3829 	if (filled)
   3830 	  {
   3831 	    vernaux.vna_next = vernaux_size;
   3832 	    (void) gelf_update_vernaux (verneeddata, offset, &vernaux);
   3833 	    offset += vernaux_size;
   3834 	  }
   3835 
   3836 	vernaux.vna_hash = elf_hash (ebl_string (runp->verdefent[cnt]));
   3837 	vernaux.vna_flags = 0;
   3838 	vernaux.vna_other = runp->verdefused[cnt];
   3839 	vernaux.vna_name = ebl_strtaboffset (runp->verdefent[cnt]);
   3840 	filled = true;
   3841 	++ndef;
   3842       }
   3843 
   3844   assert (filled);
   3845   vernaux.vna_next = 0;
   3846   (void) gelf_update_vernaux (verneeddata, offset, &vernaux);
   3847   offset += vernaux_size;
   3848 
   3849   verneed.vn_version = VER_NEED_CURRENT;
   3850   verneed.vn_cnt = ndef;
   3851   verneed.vn_file = ebl_strtaboffset (runp->verdefent[1]);
   3852   /* The first auxiliary entry is always found directly
   3853      after the verneed entry.  */
   3854   verneed.vn_aux = verneed_size;
   3855   verneed.vn_next = --*ntotal > 0 ? offset - need_offset : 0;
   3856   (void) gelf_update_verneed (verneeddata, need_offset, &verneed);
   3857 
   3858   return offset;
   3859 }
   3860 
   3861 
   3862 /* Callback for qsort to sort dynamic string table.  */
   3863 static Elf32_Word *global_hashcodes;
   3864 static size_t global_nbuckets;
   3865 static int
   3866 sortfct_hashval (const void *p1, const void *p2)
   3867 {
   3868   size_t idx1 = *(size_t *) p1;
   3869   size_t idx2 = *(size_t *) p2;
   3870 
   3871   int def1 = ndxtosym[idx1]->defined && !ndxtosym[idx1]->in_dso;
   3872   int def2 = ndxtosym[idx2]->defined && !ndxtosym[idx2]->in_dso;
   3873 
   3874   if (! def1 && def2)
   3875     return -1;
   3876   if (def1 && !def2)
   3877     return 1;
   3878   if (! def1)
   3879     return 0;
   3880 
   3881   Elf32_Word hval1 = (global_hashcodes[ndxtosym[idx1]->outdynsymidx]
   3882 		      % global_nbuckets);
   3883   Elf32_Word hval2 = (global_hashcodes[ndxtosym[idx2]->outdynsymidx]
   3884 		      % global_nbuckets);
   3885 
   3886   if (hval1 < hval2)
   3887     return -1;
   3888   if (hval1 > hval2)
   3889     return 1;
   3890   return 0;
   3891 }
   3892 
   3893 
   3894 /* Sort the dynamic symbol table.  The GNU hash table lookup assumes
   3895    that all symbols with the same hash value module the bucket table
   3896    size follow one another.  This avoids the extra hash chain table.
   3897    There is no need (and no way) to perform this operation if we do
   3898    not use the new hash table format.  */
   3899 static void
   3900 create_gnu_hash (size_t nsym_local, size_t nsym, size_t nsym_dyn,
   3901 		 Elf32_Word *gnuhashcodes)
   3902 {
   3903   size_t gnu_bitmask_nwords = 0;
   3904   size_t gnu_shift = 0;
   3905   size_t gnu_nbuckets = 0;
   3906   Elf32_Word *gnu_bitmask = NULL;
   3907   Elf32_Word *gnu_buckets = NULL;
   3908   Elf32_Word *gnu_chain = NULL;
   3909   XElf_Shdr_vardef (shdr);
   3910 
   3911   /* Determine the "optimal" bucket size.  */
   3912   optimal_gnu_hash_size (gnuhashcodes, nsym_dyn, ld_state.optlevel,
   3913 			 &gnu_bitmask_nwords, &gnu_shift, &gnu_nbuckets);
   3914 
   3915   /* Create the .gnu.hash section data structures.  */
   3916   Elf_Scn *hashscn = elf_getscn (ld_state.outelf, ld_state.gnuhashscnidx);
   3917   xelf_getshdr (hashscn, shdr);
   3918   Elf_Data *hashdata = elf_newdata (hashscn);
   3919   if (shdr == NULL || hashdata == NULL)
   3920     error (EXIT_FAILURE, 0, gettext ("\
   3921 cannot create GNU hash table section for output file: %s"),
   3922 	   elf_errmsg (-1));
   3923 
   3924   shdr->sh_link = ld_state.dynsymscnidx;
   3925   (void) xelf_update_shdr (hashscn, shdr);
   3926 
   3927   hashdata->d_size = (xelf_fsize (ld_state.outelf, ELF_T_ADDR,
   3928 				  gnu_bitmask_nwords)
   3929 		      + (4 + gnu_nbuckets + nsym_dyn) * sizeof (Elf32_Word));
   3930   hashdata->d_buf = xcalloc (1, hashdata->d_size);
   3931   hashdata->d_align = sizeof (Elf32_Word);
   3932   hashdata->d_type = ELF_T_WORD;
   3933   hashdata->d_off = 0;
   3934 
   3935   ((Elf32_Word *) hashdata->d_buf)[0] = gnu_nbuckets;
   3936   ((Elf32_Word *) hashdata->d_buf)[2] = gnu_bitmask_nwords;
   3937   ((Elf32_Word *) hashdata->d_buf)[3] = gnu_shift;
   3938   gnu_bitmask = &((Elf32_Word *) hashdata->d_buf)[4];
   3939   gnu_buckets = &gnu_bitmask[xelf_fsize (ld_state.outelf, ELF_T_ADDR,
   3940 					 gnu_bitmask_nwords)
   3941 			     / sizeof (*gnu_buckets)];
   3942   gnu_chain = &gnu_buckets[gnu_nbuckets];
   3943 #ifndef NDEBUG
   3944   void *endp = &gnu_chain[nsym_dyn];
   3945 #endif
   3946   assert (endp == (void *) ((char *) hashdata->d_buf + hashdata->d_size));
   3947 
   3948 
   3949   size_t *remap = xmalloc (nsym_dyn * sizeof (size_t));
   3950 #ifndef NDEBUG
   3951   size_t nsym_dyn_cnt = 1;
   3952 #endif
   3953   for (size_t cnt = nsym_local; cnt < nsym; ++cnt)
   3954     if (symstrent[cnt] != NULL)
   3955       {
   3956 	assert (ndxtosym[cnt]->outdynsymidx > 0);
   3957 	assert (ndxtosym[cnt]->outdynsymidx < nsym_dyn);
   3958 	remap[ndxtosym[cnt]->outdynsymidx] = cnt;
   3959 #ifndef NDEBUG
   3960 	++nsym_dyn_cnt;
   3961 #endif
   3962       }
   3963   assert (nsym_dyn_cnt == nsym_dyn);
   3964 
   3965   // XXX Until we can rely on qsort_r use global variables.
   3966   global_hashcodes = gnuhashcodes;
   3967   global_nbuckets = gnu_nbuckets;
   3968   qsort (remap + 1, nsym_dyn - 1, sizeof (size_t), sortfct_hashval);
   3969 
   3970   bool bm32 = (xelf_fsize (ld_state.outelf, ELF_T_ADDR, 1)
   3971 	       ==  sizeof (Elf32_Word));
   3972 
   3973   size_t first_defined = 0;
   3974   Elf64_Word bitmask_idxbits = gnu_bitmask_nwords - 1;
   3975   Elf32_Word last_bucket = 0;
   3976   for (size_t cnt = 1; cnt < nsym_dyn; ++cnt)
   3977     {
   3978       if (first_defined == 0)
   3979 	{
   3980 	  if (! ndxtosym[remap[cnt]]->defined
   3981 	      || ndxtosym[remap[cnt]]->in_dso)
   3982 	    goto next;
   3983 
   3984 	  ((Elf32_Word *) hashdata->d_buf)[1] = first_defined = cnt;
   3985 	}
   3986 
   3987       Elf32_Word hval = gnuhashcodes[ndxtosym[remap[cnt]]->outdynsymidx];
   3988 
   3989       if (bm32)
   3990 	{
   3991 	  Elf32_Word *bsw = &gnu_bitmask[(hval / 32) & bitmask_idxbits];
   3992 	  assert ((void *) gnu_bitmask <= (void *) bsw);
   3993 	  assert ((void *) bsw < (void *) gnu_buckets);
   3994 	  *bsw |= 1 << (hval & 31);
   3995 	  *bsw |= 1 << ((hval >> gnu_shift) & 31);
   3996 	}
   3997       else
   3998 	{
   3999 	  Elf64_Word *bsw = &((Elf64_Word *) gnu_bitmask)[(hval / 64)
   4000 							  & bitmask_idxbits];
   4001 	  assert ((void *) gnu_bitmask <= (void *) bsw);
   4002 	  assert ((void *) bsw < (void *) gnu_buckets);
   4003 	  *bsw |= 1 << (hval & 63);
   4004 	  *bsw |= 1 << ((hval >> gnu_shift) & 63);
   4005 	}
   4006 
   4007       size_t this_bucket = hval % gnu_nbuckets;
   4008       if (cnt == first_defined || this_bucket != last_bucket)
   4009 	{
   4010 	  if (cnt != first_defined)
   4011 	    {
   4012 	      /* Terminate the previous chain.  */
   4013 	      assert ((void *) &gnu_chain[cnt - first_defined - 1] < endp);
   4014 	      gnu_chain[cnt - first_defined - 1] |= 1;
   4015 	    }
   4016 
   4017 	  assert (this_bucket < gnu_nbuckets);
   4018 	  gnu_buckets[this_bucket] = cnt;
   4019 	  last_bucket = this_bucket;
   4020 	}
   4021 
   4022       assert (cnt >= first_defined);
   4023       assert (cnt - first_defined < nsym_dyn);
   4024       gnu_chain[cnt - first_defined] = hval & ~1u;
   4025 
   4026     next:
   4027       ndxtosym[remap[cnt]]->outdynsymidx = cnt;
   4028     }
   4029 
   4030   /* Terminate the last chain.  */
   4031   if (first_defined != 0)
   4032     {
   4033       assert (nsym_dyn > first_defined);
   4034       assert (nsym_dyn - first_defined - 1 < nsym_dyn);
   4035       gnu_chain[nsym_dyn - first_defined - 1] |= 1;
   4036 
   4037       hashdata->d_size -= first_defined * sizeof (Elf32_Word);
   4038     }
   4039   else
   4040     /* We do not need any hash table.  */
   4041     // XXX
   4042     do { } while (0);
   4043 
   4044   free (remap);
   4045 }
   4046 
   4047 
   4048 /* Create the SysV-style hash table.  */
   4049 static void
   4050 create_hash (size_t nsym_local, size_t nsym, size_t nsym_dyn,
   4051 	     Elf32_Word *hashcodes)
   4052 {
   4053   size_t nbucket = 0;
   4054   Elf32_Word *bucket = NULL;
   4055   Elf32_Word *chain = NULL;
   4056   XElf_Shdr_vardef (shdr);
   4057 
   4058   /* Determine the "optimal" bucket size.  If we also generate the
   4059      new-style hash function there is no need to waste effort and
   4060      space on the old one which should not be used.  Make it as small
   4061      as possible.  */
   4062   if (GENERATE_GNU_HASH)
   4063     nbucket = 1;
   4064   else
   4065     nbucket = optimal_bucket_size (hashcodes, nsym_dyn, ld_state.optlevel);
   4066   /* Create the .hash section data structures.  */
   4067   Elf_Scn *hashscn = elf_getscn (ld_state.outelf, ld_state.hashscnidx);
   4068   xelf_getshdr (hashscn, shdr);
   4069   Elf_Data *hashdata = elf_newdata (hashscn);
   4070   if (shdr == NULL || hashdata == NULL)
   4071     error (EXIT_FAILURE, 0, gettext ("\
   4072 cannot create hash table section for output file: %s"),
   4073 	   elf_errmsg (-1));
   4074 
   4075   shdr->sh_link = ld_state.dynsymscnidx;
   4076   (void) xelf_update_shdr (hashscn, shdr);
   4077 
   4078   hashdata->d_size = (2 + nsym_dyn + nbucket) * sizeof (Elf32_Word);
   4079   hashdata->d_buf = xcalloc (1, hashdata->d_size);
   4080   hashdata->d_align = sizeof (Elf32_Word);
   4081   hashdata->d_type = ELF_T_WORD;
   4082   hashdata->d_off = 0;
   4083 
   4084   ((Elf32_Word *) hashdata->d_buf)[0] = nbucket;
   4085   ((Elf32_Word *) hashdata->d_buf)[1] = nsym_dyn;
   4086   bucket = &((Elf32_Word *) hashdata->d_buf)[2];
   4087   chain = &((Elf32_Word *) hashdata->d_buf)[2 + nbucket];
   4088 
   4089   for (size_t cnt = nsym_local; cnt < nsym; ++cnt)
   4090     if (symstrent[cnt] != NULL)
   4091       {
   4092 	size_t dynidx = ndxtosym[cnt]->outdynsymidx;
   4093 	size_t hashidx = hashcodes[dynidx] % nbucket;
   4094 	if (bucket[hashidx] == 0)
   4095 	  bucket[hashidx] = dynidx;
   4096 	else
   4097 	  {
   4098 	    hashidx = bucket[hashidx];
   4099 	    while (chain[hashidx] != 0)
   4100 	      hashidx = chain[hashidx];
   4101 
   4102 	    chain[hashidx] = dynidx;
   4103 	  }
   4104       }
   4105 }
   4106 
   4107 
   4108 static void
   4109 create_build_id_section (Elf_Scn *scn)
   4110 {
   4111   /* We know how large the section will be so we can create it now.  */
   4112   Elf_Data *d = elf_newdata (scn);
   4113   if (d == NULL)
   4114     error (EXIT_FAILURE, 0, gettext ("cannot create build ID section: %s"),
   4115 	   elf_errmsg (-1));
   4116 
   4117   d->d_type = ELF_T_BYTE;
   4118   d->d_version = EV_CURRENT;
   4119 
   4120   /* The note section header.  */
   4121   assert (sizeof (Elf32_Nhdr) == sizeof (Elf64_Nhdr));
   4122   d->d_size = sizeof (GElf_Nhdr);
   4123   /* The string is four bytes long.  */
   4124   d->d_size += sizeof (ELF_NOTE_GNU);
   4125   assert (d->d_size % 4 == 0);
   4126 
   4127   if (strcmp (ld_state.build_id, "md5") == 0
   4128       || strcmp (ld_state.build_id, "uuid") == 0)
   4129     d->d_size += 16;
   4130   else if (strcmp (ld_state.build_id, "sha1") == 0)
   4131     d->d_size += 20;
   4132   else
   4133     {
   4134       assert (ld_state.build_id[0] == '0' && ld_state.build_id[1] == 'x');
   4135       /* Use an upper limit of the possible number of bytes generated
   4136 	 from the string.  */
   4137       d->d_size += strlen (ld_state.build_id) / 2;
   4138     }
   4139 
   4140   d->d_buf = xcalloc (d->d_size, 1);
   4141   d->d_off = 0;
   4142   d->d_align = 0;
   4143 }
   4144 
   4145 
   4146 static void
   4147 compute_hash_sum (void (*hashfct) (const void *, size_t, void *), void *ctx)
   4148 {
   4149   /* The call cannot fail.  */
   4150   size_t shstrndx;
   4151   (void) elf_getshstrndx (ld_state.outelf, &shstrndx);
   4152 
   4153   const char *ident = elf_getident (ld_state.outelf, NULL);
   4154   bool same_byte_order = ((ident[EI_DATA] == ELFDATA2LSB
   4155 			   && __BYTE_ORDER == __LITTLE_ENDIAN)
   4156 			  || (ident[EI_DATA] == ELFDATA2MSB
   4157 			      && __BYTE_ORDER == __BIG_ENDIAN));
   4158 
   4159   /* Iterate over all sections to find those which are not strippable.  */
   4160   Elf_Scn *scn = NULL;
   4161   while ((scn = elf_nextscn (ld_state.outelf, scn)) != NULL)
   4162     {
   4163       /* Get the section header.  */
   4164       GElf_Shdr shdr_mem;
   4165       GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem);
   4166       assert (shdr != NULL);
   4167 
   4168       if (SECTION_STRIP_P (shdr, elf_strptr (ld_state.outelf, shstrndx,
   4169 					     shdr->sh_name), true))
   4170 	/* The section can be stripped.  Don't use it.  */
   4171 	continue;
   4172 
   4173       /* Do not look at NOBITS sections.  */
   4174       if (shdr->sh_type == SHT_NOBITS)
   4175 	continue;
   4176 
   4177       /* Iterate through the list of data blocks.  */
   4178       Elf_Data *data = NULL;
   4179       while ((data = INTUSE(elf_getdata) (scn, data)) != NULL)
   4180 	/* If the file byte order is the same as the host byte order
   4181 	   process the buffer directly.  If the data is just a stream
   4182 	   of bytes which the library will not convert we can use it
   4183 	   as well.  */
   4184 	if (likely (same_byte_order) || data->d_type == ELF_T_BYTE)
   4185 	  hashfct (data->d_buf, data->d_size, ctx);
   4186 	else
   4187 	  {
   4188 	    /* Convert the data to file byte order.  */
   4189 	    if (gelf_xlatetof (ld_state.outelf, data, data, ident[EI_DATA])
   4190 		== NULL)
   4191 	      error (EXIT_FAILURE, 0, gettext ("\
   4192 cannot convert section data to file format: %s"),
   4193 		     elf_errmsg (-1));
   4194 
   4195 	    hashfct (data->d_buf, data->d_size, ctx);
   4196 
   4197 	    /* And convert it back.  */
   4198 	    if (gelf_xlatetom (ld_state.outelf, data, data, ident[EI_DATA])
   4199 		== NULL)
   4200 	      error (EXIT_FAILURE, 0, gettext ("\
   4201 cannot convert section data to memory format: %s"),
   4202 		     elf_errmsg (-1));
   4203 	  }
   4204     }
   4205 }
   4206 
   4207 
   4208 /* Iterate over the sections */
   4209 static void
   4210 compute_build_id (void)
   4211 {
   4212   Elf_Data *d = elf_getdata (elf_getscn (ld_state.outelf,
   4213 					 ld_state.buildidscnidx), NULL);
   4214   assert (d != NULL);
   4215 
   4216   GElf_Nhdr *hdr = d->d_buf;
   4217   hdr->n_namesz = sizeof (ELF_NOTE_GNU);
   4218   hdr->n_type = NT_GNU_BUILD_ID;
   4219   char *dp = mempcpy (hdr + 1, ELF_NOTE_GNU, sizeof (ELF_NOTE_GNU));
   4220 
   4221   if (strcmp (ld_state.build_id, "sha1") == 0)
   4222     {
   4223       /* Compute the SHA1 sum of various parts of the generated file.
   4224 	 We compute the hash sum over the external representation.  */
   4225       struct sha1_ctx ctx;
   4226       sha1_init_ctx (&ctx);
   4227 
   4228       /* Compute the hash sum by running over all sections.  */
   4229       compute_hash_sum ((void (*) (const void *, size_t, void *)) sha1_process_bytes,
   4230 			&ctx);
   4231 
   4232       /* We are done computing the checksum.  */
   4233       (void) sha1_finish_ctx (&ctx, dp);
   4234 
   4235       hdr->n_descsz = SHA1_DIGEST_SIZE;
   4236     }
   4237   else if (strcmp (ld_state.build_id, "md5") == 0)
   4238     {
   4239       /* Compute the MD5 sum of various parts of the generated file.
   4240 	 We compute the hash sum over the external representation.  */
   4241       struct md5_ctx ctx;
   4242       md5_init_ctx (&ctx);
   4243 
   4244       /* Compute the hash sum by running over all sections.  */
   4245       compute_hash_sum ((void (*) (const void *, size_t, void *)) md5_process_bytes,
   4246 			&ctx);
   4247 
   4248       /* We are done computing the checksum.  */
   4249       (void) md5_finish_ctx (&ctx, dp);
   4250 
   4251       hdr->n_descsz = MD5_DIGEST_SIZE;
   4252     }
   4253   else if (strcmp (ld_state.build_id, "uuid") == 0)
   4254     {
   4255       int fd = open ("/dev/urandom", O_RDONLY);
   4256       if (fd == -1)
   4257 	error (EXIT_FAILURE, errno, gettext ("cannot open '%s'"),
   4258 	       "/dev/urandom");
   4259 
   4260       if (TEMP_FAILURE_RETRY (read (fd, dp, 16)) != 16)
   4261 	error (EXIT_FAILURE, 0, gettext ("cannot read enough data for UUID"));
   4262 
   4263       close (fd);
   4264 
   4265       hdr->n_descsz = 16;
   4266     }
   4267   else
   4268     {
   4269       const char *cp = ld_state.build_id + 2;
   4270 
   4271       /* The form of the string has been verified before so here we can
   4272 	 simplify the scanning.  */
   4273       do
   4274 	{
   4275 	  if (isxdigit (cp[0]))
   4276 	    {
   4277 	      char ch1 = tolower (cp[0]);
   4278 	      char ch2 = tolower (cp[1]);
   4279 
   4280 	      *dp++ = (((isdigit (ch1) ? ch1 - '0' : ch1 - 'a' + 10) << 4)
   4281 		       | (isdigit (ch2) ? ch2 - '0' : ch2 - 'a' + 10));
   4282 	    }
   4283 	  else
   4284 	    ++cp;
   4285 	}
   4286       while (*cp != '\0');
   4287     }
   4288 }
   4289 
   4290 
   4291 /* Create the output file.
   4292 
   4293    For relocatable files what basically has to happen is that all
   4294    sections from all input files are written into the output file.
   4295    Sections with the same name are combined (offsets adjusted
   4296    accordingly).  The symbol tables are combined in one single table.
   4297    When stripping certain symbol table entries are omitted.
   4298 
   4299    For executables (shared or not) we have to create the program header,
   4300    additional sections like the .interp, eventually (in addition) create
   4301    a dynamic symbol table and a dynamic section.  Also the relocations
   4302    have to be processed differently.  */
   4303 static int
   4304 ld_generic_create_outfile (struct ld_state *statep)
   4305 {
   4306   struct scnlist
   4307   {
   4308     size_t scnidx;
   4309     struct scninfo *scninfo;
   4310     struct scnlist *next;
   4311   };
   4312   struct scnlist *rellist = NULL;
   4313   size_t cnt;
   4314   Elf_Scn *symscn = NULL;
   4315   Elf_Scn *xndxscn = NULL;
   4316   Elf_Scn *strscn = NULL;
   4317   struct Ebl_Strtab *strtab = NULL;
   4318   struct Ebl_Strtab *dynstrtab = NULL;
   4319   XElf_Shdr_vardef (shdr);
   4320   Elf_Data *data;
   4321   Elf_Data *symdata = NULL;
   4322   Elf_Data *xndxdata = NULL;
   4323   struct usedfiles *file;
   4324   size_t nsym;
   4325   size_t nsym_local;
   4326   size_t nsym_allocated;
   4327   size_t nsym_dyn = 0;
   4328   Elf32_Word *dblindirect = NULL;
   4329 #ifndef NDEBUG
   4330   bool need_xndx;
   4331 #endif
   4332   Elf_Scn *shstrtab_scn;
   4333   size_t shstrtab_ndx;
   4334   XElf_Ehdr_vardef (ehdr);
   4335   struct Ebl_Strent *symtab_ent = NULL;
   4336   struct Ebl_Strent *xndx_ent = NULL;
   4337   struct Ebl_Strent *strtab_ent = NULL;
   4338   struct Ebl_Strent *shstrtab_ent;
   4339   struct scngroup *groups;
   4340   Elf_Scn *dynsymscn = NULL;
   4341   Elf_Data *dynsymdata = NULL;
   4342   Elf_Data *dynstrdata = NULL;
   4343   Elf32_Word *hashcodes = NULL;
   4344   Elf32_Word *gnuhashcodes = NULL;
   4345   size_t nsym_dyn_allocated = 0;
   4346   Elf_Scn *versymscn = NULL;
   4347   Elf_Data *versymdata = NULL;
   4348 
   4349   if (ld_state.need_symtab)
   4350     {
   4351       /* First create the symbol table.  We need the symbol section itself
   4352 	 and the string table for it.  */
   4353       symscn = elf_newscn (ld_state.outelf);
   4354       ld_state.symscnidx = elf_ndxscn (symscn);
   4355       symdata = elf_newdata (symscn);
   4356       if (symdata == NULL)
   4357 	error (EXIT_FAILURE, 0,
   4358 	       gettext ("cannot create symbol table for output file: %s"),
   4359 	       elf_errmsg (-1));
   4360 
   4361       symdata->d_type = ELF_T_SYM;
   4362       /* This is an estimated size, but it will definitely cap the real value.
   4363 	 We might have to adjust the number later.  */
   4364       nsym_allocated = (1 + ld_state.nsymtab + ld_state.nplt + ld_state.ngot
   4365 			+ ld_state.nusedsections + ld_state.nlscript_syms);
   4366       symdata->d_size = xelf_fsize (ld_state.outelf, ELF_T_SYM,
   4367 				    nsym_allocated);
   4368 
   4369       /* Optionally the extended section table.  */
   4370       /* XXX Is SHN_LORESERVE correct?  Do we need some other sections?  */
   4371       if (unlikely (ld_state.nusedsections >= SHN_LORESERVE))
   4372 	{
   4373 	  xndxscn = elf_newscn (ld_state.outelf);
   4374 	  ld_state.xndxscnidx = elf_ndxscn (xndxscn);
   4375 
   4376 	  xndxdata = elf_newdata (xndxscn);
   4377 	  if (xndxdata == NULL)
   4378 	    error (EXIT_FAILURE, 0,
   4379 		   gettext ("cannot create symbol table for output file: %s"),
   4380 		   elf_errmsg (-1));
   4381 
   4382 	  /* The following relies on the fact that Elf32_Word and Elf64_Word
   4383 	     have the same size.  */
   4384 	  xndxdata->d_type = ELF_T_WORD;
   4385 	  /* This is an estimated size, but it will definitely cap the
   4386 	     real value.  we might have to adjust the number later.  */
   4387 	  xndxdata->d_size = xelf_fsize (ld_state.outelf, ELF_T_WORD,
   4388 					 nsym_allocated);
   4389 	  /* The first entry is left empty, clear it here and now.  */
   4390 	  xndxdata->d_buf = memset (xmalloc (xndxdata->d_size), '\0',
   4391 				    xelf_fsize (ld_state.outelf, ELF_T_WORD,
   4392 						1));
   4393 	  xndxdata->d_off = 0;
   4394 	  /* XXX Should use an ebl function.  */
   4395 	  xndxdata->d_align = sizeof (Elf32_Word);
   4396 	}
   4397     }
   4398   else
   4399     {
   4400       assert (ld_state.need_dynsym);
   4401 
   4402       /* First create the symbol table.  We need the symbol section itself
   4403 	 and the string table for it.  */
   4404       symscn = elf_getscn (ld_state.outelf, ld_state.dynsymscnidx);
   4405       symdata = elf_newdata (symscn);
   4406       if (symdata == NULL)
   4407 	error (EXIT_FAILURE, 0,
   4408 	       gettext ("cannot create symbol table for output file: %s"),
   4409 	       elf_errmsg (-1));
   4410 
   4411       symdata->d_version = EV_CURRENT;
   4412       symdata->d_type = ELF_T_SYM;
   4413       /* This is an estimated size, but it will definitely cap the real value.
   4414 	 We might have to adjust the number later.  */
   4415       nsym_allocated = (1 + ld_state.nsymtab + ld_state.nplt + ld_state.ngot
   4416 			- ld_state.nlocalsymbols + ld_state.nlscript_syms);
   4417       symdata->d_size = xelf_fsize (ld_state.outelf, ELF_T_SYM,
   4418 				    nsym_allocated);
   4419     }
   4420 
   4421   /* The first entry is left empty, clear it here and now.  */
   4422   symdata->d_buf = memset (xmalloc (symdata->d_size), '\0',
   4423 			   xelf_fsize (ld_state.outelf, ELF_T_SYM, 1));
   4424   symdata->d_off = 0;
   4425   /* XXX This is ugly but how else can it be done.  */
   4426   symdata->d_align = xelf_fsize (ld_state.outelf, ELF_T_ADDR, 1);
   4427 
   4428   /* Allocate another array to keep track of the handles for the symbol
   4429      names.  */
   4430   symstrent = (struct Ebl_Strent **) xcalloc (nsym_allocated,
   4431 					      sizeof (struct Ebl_Strent *));
   4432 
   4433   /* By starting at 1 we effectively add a null entry.  */
   4434   nsym = 1;
   4435 
   4436   /* Iteration over all sections.  */
   4437   for (cnt = 0; cnt < ld_state.nallsections; ++cnt)
   4438     {
   4439       struct scnhead *head = ld_state.allsections[cnt];
   4440       Elf_Scn *scn;
   4441       struct scninfo *runp;
   4442       XElf_Off offset;
   4443       Elf32_Word xndx;
   4444 
   4445       /* Don't handle unused sections at all.  */
   4446       if (!head->used)
   4447 	continue;
   4448 
   4449       /* Get the section handle.  */
   4450       scn = elf_getscn (ld_state.outelf, head->scnidx);
   4451 
   4452       if (unlikely (head->kind == scn_dot_interp))
   4453 	{
   4454 	  Elf_Data *outdata = elf_newdata (scn);
   4455 	  if (outdata == NULL)
   4456 	    error (EXIT_FAILURE, 0,
   4457 		   gettext ("cannot create section for output file: %s"),
   4458 		   elf_errmsg (-1));
   4459 
   4460 	  /* This is the string we'll put in the section.  */
   4461 	  const char *interp = ld_state.interp ?: "/lib/ld.so.1";
   4462 
   4463 	  /* Create the section data.  */
   4464 	  outdata->d_buf = (void *) interp;
   4465 	  outdata->d_size = strlen (interp) + 1;
   4466 	  outdata->d_type = ELF_T_BYTE;
   4467 	  outdata->d_off = 0;
   4468 	  outdata->d_align = 1;
   4469 	  outdata->d_version = EV_CURRENT;
   4470 
   4471 	  /* Remember the index of this section.  */
   4472 	  ld_state.interpscnidx = head->scnidx;
   4473 
   4474 	  continue;
   4475 	}
   4476 
   4477       if (unlikely (head->kind == scn_dot_got))
   4478 	{
   4479 	  /* Remember the index of this section.  */
   4480 	  ld_state.gotscnidx = elf_ndxscn (scn);
   4481 
   4482 	  /* Give the backend the change to initialize the section.  */
   4483 	  INITIALIZE_GOT (&ld_state, scn);
   4484 
   4485 	  continue;
   4486 	}
   4487 
   4488       if (unlikely (head->kind == scn_dot_gotplt))
   4489 	{
   4490 	  /* Remember the index of this section.  */
   4491 	  ld_state.gotpltscnidx = elf_ndxscn (scn);
   4492 
   4493 	  /* Give the backend the change to initialize the section.  */
   4494 	  INITIALIZE_GOTPLT (&ld_state, scn);
   4495 
   4496 	  continue;
   4497 	}
   4498 
   4499       if (unlikely (head->kind == scn_dot_dynrel))
   4500 	{
   4501 	  Elf_Data *outdata;
   4502 
   4503 	  outdata = elf_newdata (scn);
   4504 	  if (outdata == NULL)
   4505 	    error (EXIT_FAILURE, 0,
   4506 		   gettext ("cannot create section for output file: %s"),
   4507 		   elf_errmsg (-1));
   4508 
   4509 	  outdata->d_size = ld_state.relsize_total;
   4510 	  outdata->d_buf = xmalloc (outdata->d_size);
   4511 	  outdata->d_type = (REL_TYPE (&ld_state) == DT_REL
   4512 			     ? ELF_T_REL : ELF_T_RELA);
   4513 	  outdata->d_off = 0;
   4514 	  outdata->d_align = xelf_fsize (ld_state.outelf, ELF_T_ADDR, 1);
   4515 
   4516 	  /* Remember the index of this section.  */
   4517 	  ld_state.reldynscnidx = elf_ndxscn (scn);
   4518 
   4519 	  continue;
   4520 	}
   4521 
   4522       if (unlikely (head->kind == scn_dot_dynamic))
   4523 	{
   4524 	  /* Only create the data for now.  */
   4525 	  Elf_Data *outdata;
   4526 
   4527 	  /* Account for a few more entries we have to add.  */
   4528 	  if (ld_state.dt_flags != 0)
   4529 	    ++ld_state.ndynamic;
   4530 	  if (ld_state.dt_flags_1 != 0)
   4531 	    ++ld_state.ndynamic;
   4532 	  if (ld_state.dt_feature_1 != 0)
   4533 	    ++ld_state.ndynamic;
   4534 
   4535 	  outdata = elf_newdata (scn);
   4536 	  if (outdata == NULL)
   4537 	    error (EXIT_FAILURE, 0,
   4538 		   gettext ("cannot create section for output file: %s"),
   4539 		   elf_errmsg (-1));
   4540 
   4541 	  /* Create the section data.  */
   4542 	  outdata->d_size = xelf_fsize (ld_state.outelf, ELF_T_DYN,
   4543 					ld_state.ndynamic);
   4544 	  outdata->d_buf = xcalloc (1, outdata->d_size);
   4545 	  outdata->d_type = ELF_T_DYN;
   4546 	  outdata->d_off = 0;
   4547 	  outdata->d_align = xelf_fsize (ld_state.outelf, ELF_T_ADDR, 1);
   4548 
   4549 	  /* Remember the index of this section.  */
   4550 	  ld_state.dynamicscnidx = elf_ndxscn (scn);
   4551 
   4552 	  continue;
   4553 	}
   4554 
   4555       if (unlikely (head->kind == scn_dot_dynsym))
   4556 	{
   4557 	  /* We already know the section index.  */
   4558 	  assert (ld_state.dynsymscnidx == elf_ndxscn (scn));
   4559 
   4560 	  continue;
   4561 	}
   4562 
   4563       if (unlikely (head->kind == scn_dot_dynstr))
   4564 	{
   4565 	  /* Remember the index of this section.  */
   4566 	  ld_state.dynstrscnidx = elf_ndxscn (scn);
   4567 
   4568 	  /* Create the string table.  */
   4569 	  dynstrtab = ebl_strtabinit (true);
   4570 
   4571 	  /* XXX TBI
   4572 	     We have to add all the strings which are needed in the
   4573 	     dynamic section here.  This means DT_FILTER,
   4574 	     DT_AUXILIARY, ... entries.  */
   4575 	  if (ld_state.ndsofiles > 0)
   4576 	    {
   4577 	      struct usedfiles *frunp = ld_state.dsofiles;
   4578 
   4579 	      do
   4580 		if (! frunp->as_needed || frunp->used)
   4581 		  frunp->sonameent = ebl_strtabadd (dynstrtab, frunp->soname,
   4582 						    0);
   4583 	      while ((frunp = frunp->next) != ld_state.dsofiles);
   4584 	    }
   4585 
   4586 
   4587 	  /* Add the runtime path information.  The strings are stored
   4588 	     in the .dynstr section.  If both rpath and runpath are defined
   4589 	     the runpath information is used.  */
   4590 	  if (ld_state.runpath != NULL || ld_state.rpath != NULL)
   4591 	    {
   4592 	      struct pathelement *startp;
   4593 	      struct pathelement *prunp;
   4594 	      int tag;
   4595 	      size_t len;
   4596 	      char *str;
   4597 	      char *cp;
   4598 
   4599 	      if (ld_state.runpath != NULL)
   4600 		{
   4601 		  startp = ld_state.runpath;
   4602 		  tag = DT_RUNPATH;
   4603 		}
   4604 	      else
   4605 		{
   4606 		  startp = ld_state.rpath;
   4607 		  tag = DT_RPATH;
   4608 		}
   4609 
   4610 	      /* Determine how long the string will be.  */
   4611 	      for (len = 0, prunp = startp; prunp != NULL; prunp = prunp->next)
   4612 		len += strlen (prunp->pname) + 1;
   4613 
   4614 	      cp = str = (char *) obstack_alloc (&ld_state.smem, len);
   4615 	      /* Copy the string.  */
   4616 	      for (prunp = startp; prunp != NULL; prunp = prunp->next)
   4617 		{
   4618 		  cp = stpcpy (cp, prunp->pname);
   4619 		  *cp++ = ':';
   4620 		}
   4621 	      /* Remove the last colon.  */
   4622 	      cp[-1] = '\0';
   4623 
   4624 	      /* Remember the values until we can generate the dynamic
   4625 		 section.  */
   4626 	      ld_state.rxxpath_strent = ebl_strtabadd (dynstrtab, str, len);
   4627 	      ld_state.rxxpath_tag = tag;
   4628 	    }
   4629 
   4630 	  continue;
   4631 	}
   4632 
   4633       if (unlikely (head->kind == scn_dot_hash))
   4634 	{
   4635 	  /* Remember the index of this section.  */
   4636 	  ld_state.hashscnidx = elf_ndxscn (scn);
   4637 
   4638 	  continue;
   4639 	}
   4640 
   4641       if (unlikely (head->kind == scn_dot_gnu_hash))
   4642 	{
   4643 	  /* Remember the index of this section.  */
   4644 	  ld_state.gnuhashscnidx = elf_ndxscn (scn);
   4645 
   4646 	  continue;
   4647 	}
   4648 
   4649       if (unlikely (head->kind == scn_dot_plt))
   4650 	{
   4651 	  /* Remember the index of this section.  */
   4652 	  ld_state.pltscnidx = elf_ndxscn (scn);
   4653 
   4654 	  /* Give the backend the change to initialize the section.  */
   4655 	  INITIALIZE_PLT (&ld_state, scn);
   4656 
   4657 	  continue;
   4658 	}
   4659 
   4660       if (unlikely (head->kind == scn_dot_pltrel))
   4661 	{
   4662 	  /* Remember the index of this section.  */
   4663 	  ld_state.pltrelscnidx = elf_ndxscn (scn);
   4664 
   4665 	  /* Give the backend the change to initialize the section.  */
   4666 	  INITIALIZE_PLTREL (&ld_state, scn);
   4667 
   4668 	  continue;
   4669 	}
   4670 
   4671       if (unlikely (head->kind == scn_dot_version))
   4672 	{
   4673 	  /* Remember the index of this section.  */
   4674 	  ld_state.versymscnidx = elf_ndxscn (scn);
   4675 
   4676 	  continue;
   4677 	}
   4678 
   4679       if (unlikely (head->kind == scn_dot_version_r))
   4680 	{
   4681 	  /* Remember the index of this section.  */
   4682 	  ld_state.verneedscnidx = elf_ndxscn (scn);
   4683 
   4684 	  continue;
   4685 	}
   4686 
   4687       if (unlikely (head->kind == scn_dot_note_gnu_build_id))
   4688 	{
   4689 	  /* Remember the index of this section.  */
   4690 	  ld_state.buildidscnidx = elf_ndxscn (scn);
   4691 
   4692 	  create_build_id_section (scn);
   4693 
   4694 	  continue;
   4695 	}
   4696 
   4697       /* If we come here we must be handling a normal section.  */
   4698       assert (head->kind == scn_normal);
   4699 
   4700       /* Create an STT_SECTION entry in the symbol table.  But not for
   4701 	 the symbolic symbol table.  */
   4702       if (ld_state.need_symtab)
   4703 	{
   4704 	  /* XXX Can we be cleverer and do this only if needed?  */
   4705 	  XElf_Sym_vardef (sym);
   4706 
   4707 	  /* Optimization ahead: in the native linker we get a pointer
   4708 	     to the final location so that the following code writes
   4709 	     directly in the correct place.  Otherwise we write into
   4710 	     the local variable first.  */
   4711 	  xelf_getsym_ptr (symdata, nsym, sym);
   4712 
   4713 	  /* Usual section symbol: local, no specific information,
   4714 	     except the section index.  The offset here is zero, the
   4715 	     start address will later be added.  */
   4716 	  sym->st_name = 0;
   4717 	  sym->st_info = XELF_ST_INFO (STB_LOCAL, STT_SECTION);
   4718 	  sym->st_other = 0;
   4719 	  sym->st_value = 0;
   4720 	  sym->st_size = 0;
   4721 	  /* In relocatable files the section index can be too big for
   4722 	     the ElfXX_Sym struct.  we have to deal with the extended
   4723 	     symbol table.  */
   4724 	  if (likely (head->scnidx < SHN_LORESERVE))
   4725 	    {
   4726 	      sym->st_shndx = head->scnidx;
   4727 	      xndx = 0;
   4728 	    }
   4729 	  else
   4730 	    {
   4731 	      sym->st_shndx = SHN_XINDEX;
   4732 	      xndx = head->scnidx;
   4733 	    }
   4734 	  /* Commit the change.  See the optimization above, this does
   4735 	     not change the symbol table entry.  But the extended
   4736 	     section index table entry is always written, if there is
   4737 	     such a table.  */
   4738 	  assert (nsym < nsym_allocated);
   4739 	  xelf_update_symshndx (symdata, xndxdata, nsym, sym, xndx, 0);
   4740 
   4741 	  /* Remember the symbol's index in the symbol table.  */
   4742 	  head->scnsymidx = nsym++;
   4743 	}
   4744 
   4745       if (head->type == SHT_REL || head->type == SHT_RELA)
   4746 	{
   4747 	  /* Remember that we have to fill in the symbol table section
   4748 	     index.  */
   4749 	  if (ld_state.file_type == relocatable_file_type)
   4750 	    {
   4751 	      struct scnlist *newp;
   4752 
   4753 	      newp = (struct scnlist *) alloca (sizeof (*newp));
   4754 	      newp->scnidx = head->scnidx;
   4755 	      newp->scninfo = head->last->next;
   4756 #ifndef NDEBUG
   4757 	      newp->next = NULL;
   4758 #endif
   4759 	      SNGL_LIST_PUSH (rellist, newp);
   4760 	    }
   4761 	  else
   4762 	    {
   4763 	      /* When we create an executable or a DSO we don't simply
   4764 		 copy the existing relocations.  Instead many will be
   4765 		 resolved, others will be converted.  Create a data buffer
   4766 		 large enough to contain the contents which we will fill
   4767 		 in later.  */
   4768 	      int type = head->type == SHT_REL ? ELF_T_REL : ELF_T_RELA;
   4769 
   4770 	      data = elf_newdata (scn);
   4771 	      if (data == NULL)
   4772 		error (EXIT_FAILURE, 0,
   4773 		       gettext ("cannot create section for output file: %s"),
   4774 		       elf_errmsg (-1));
   4775 
   4776 	      data->d_size = xelf_fsize (ld_state.outelf, type, head->relsize);
   4777 	      data->d_buf = xcalloc (data->d_size, 1);
   4778 	      data->d_type = type;
   4779 	      data->d_align = xelf_fsize (ld_state.outelf, ELF_T_ADDR, 1);
   4780 	      data->d_off = 0;
   4781 
   4782 	      continue;
   4783 	    }
   4784 	}
   4785 
   4786       /* Recognize string and merge flag and handle them.  */
   4787       if (head->flags & SHF_MERGE)
   4788 	{
   4789 	  /* We merge the contents of the sections.  For this we do
   4790 	     not look at the contents of section directly.  Instead we
   4791 	     look at the symbols of the section.  */
   4792 	  Elf_Data *outdata;
   4793 
   4794 	  /* Concatenate the lists of symbols for all sections.
   4795 
   4796 	     XXX In case any input section has no symbols associated
   4797 	     (this happens for debug sections) we cannot use this
   4798 	     method.  Implement parsing the other debug sections and
   4799 	     find the string pointers.  For now we don't merge.  */
   4800 	  runp = head->last->next;
   4801 	  if (runp->symbols == NULL)
   4802 	    {
   4803 	      head->flags &= ~SHF_MERGE;
   4804 	      goto no_merge;
   4805 	    }
   4806 	  head->symbols = runp->symbols;
   4807 
   4808 	  while ((runp = runp->next) != head->last->next)
   4809 	    {
   4810 	      if (runp->symbols == NULL)
   4811 		{
   4812 		  head->flags &= ~SHF_MERGE;
   4813 		  head->symbols = NULL;
   4814 		  goto no_merge;
   4815 		}
   4816 
   4817 	      struct symbol *oldhead = head->symbols->next_in_scn;
   4818 
   4819 	      head->symbols->next_in_scn = runp->symbols->next_in_scn;
   4820 	      runp->symbols->next_in_scn = oldhead;
   4821 	      head->symbols = runp->symbols;
   4822 	    }
   4823 
   4824 	  /* Create the output section.  */
   4825 	  outdata = elf_newdata (scn);
   4826 	  if (outdata == NULL)
   4827 	    error (EXIT_FAILURE, 0,
   4828 		   gettext ("cannot create section for output file: %s"),
   4829 		   elf_errmsg (-1));
   4830 
   4831 	  /* We use different merging algorithms for performance
   4832 	     reasons.  We can easily handle single-byte and
   4833 	     wchar_t-wide character strings.  All other cases (which
   4834 	     really should happen in real life) are handled by the
   4835 	     generic code.  */
   4836 	  if (SCNINFO_SHDR (head->last->shdr).sh_entsize == 1
   4837 	      && (head->flags & SHF_STRINGS))
   4838 	    {
   4839 	      /* Simple, single-byte string matching.  */
   4840 	      struct Ebl_Strtab *mergestrtab;
   4841 	      struct symbol *symrunp;
   4842 	      Elf_Data *locsymdata = NULL;
   4843 	      Elf_Data *locdata = NULL;
   4844 
   4845 	      mergestrtab = ebl_strtabinit (false);
   4846 
   4847 	      symrunp = head->symbols->next_in_scn;
   4848 	      file = NULL;
   4849 	      do
   4850 		{
   4851 		  /* Accelarate the loop.  We cache the file
   4852 		     information since it might very well be the case
   4853 		     that the previous entry was from the same
   4854 		     file.  */
   4855 		  if (symrunp->file != file)
   4856 		    {
   4857 		      /* Remember the file.  */
   4858 		      file = symrunp->file;
   4859 		      /* Symbol table data from that file.  */
   4860 		      locsymdata = file->symtabdata;
   4861 		      /* String section data.  */
   4862 		      locdata = elf_rawdata (file->scninfo[symrunp->scndx].scn,
   4863 					     NULL);
   4864 		      assert (locdata != NULL);
   4865 		      /* While we are at it, remember the output
   4866 			 section.  If we don't access the string data
   4867 			 section the section won't be in the output
   4868 			 file.  So it is sufficient to do the work
   4869 			 here.  */
   4870 		      file->scninfo[symrunp->scndx].outscnndx = head->scnidx;
   4871 		    }
   4872 
   4873 		  /* Get the symbol information.  This provides us the
   4874 		     offset into the string data section.  */
   4875 		  XElf_Sym_vardef (sym);
   4876 		  xelf_getsym (locsymdata, symrunp->symidx, sym);
   4877 		  assert (sym != NULL);
   4878 
   4879 		  /* Get the data from the file.  Note that we access
   4880 		     the raw section data; no endian-ness issues with
   4881 		     single-byte strings.  */
   4882 		  symrunp->merge.handle
   4883 		    = ebl_strtabadd (mergestrtab,
   4884 				     (char *) locdata->d_buf + sym->st_value,
   4885 				     0);
   4886 		}
   4887 	      while ((symrunp = symrunp->next_in_scn)
   4888 		     != head->symbols->next_in_scn);
   4889 
   4890 	      /* All strings have been added.  Create the final table.  */
   4891 	      ebl_strtabfinalize (mergestrtab, outdata);
   4892 
   4893 	      /* Compute the final offsets in the section.  */
   4894 	      symrunp = runp->symbols;
   4895 	      do
   4896 		{
   4897 		  symrunp->merge.value
   4898 		    = ebl_strtaboffset (symrunp->merge.handle);
   4899 		  symrunp->merged = 1;
   4900 		}
   4901 	      while ((symrunp = symrunp->next_in_scn) != runp->symbols);
   4902 
   4903 	      /* We don't need the string table anymore.  */
   4904 	      ebl_strtabfree (mergestrtab);
   4905 	    }
   4906 	  else if (likely (SCNINFO_SHDR (head->last->shdr).sh_entsize
   4907 			   == sizeof (wchar_t))
   4908 		   && likely (head->flags & SHF_STRINGS))
   4909 	    {
   4910 	      /* Simple, wchar_t string merging.  */
   4911 	      struct Ebl_WStrtab *mergestrtab;
   4912 	      struct symbol *symrunp;
   4913 	      Elf_Data *locsymdata = NULL;
   4914 	      Elf_Data *locdata = NULL;
   4915 
   4916 	      mergestrtab = ebl_wstrtabinit (false);
   4917 
   4918 	      symrunp = runp->symbols;
   4919 	      file = NULL;
   4920 	      do
   4921 		{
   4922 		  /* Accelarate the loop.  We cache the file
   4923 		     information since it might very well be the case
   4924 		     that the previous entry was from the same
   4925 		     file.  */
   4926 		  if (symrunp->file != file)
   4927 		    {
   4928 		      /* Remember the file.  */
   4929 		      file = symrunp->file;
   4930 		      /* Symbol table data from that file.  */
   4931 		      locsymdata = file->symtabdata;
   4932 		      /* String section data.  */
   4933 		      locdata = elf_rawdata (file->scninfo[symrunp->scndx].scn,
   4934 					     NULL);
   4935 		      assert (locdata != NULL);
   4936 
   4937 		      /* While we are at it, remember the output
   4938 			 section.  If we don't access the string data
   4939 			 section the section won't be in the output
   4940 			 file.  So it is sufficient to do the work
   4941 			 here.  */
   4942 		      file->scninfo[symrunp->scndx].outscnndx = head->scnidx;
   4943 		    }
   4944 
   4945 		  /* Get the symbol information.  This provides us the
   4946 		     offset into the string data section.  */
   4947 		  XElf_Sym_vardef (sym);
   4948 		  xelf_getsym (locsymdata, symrunp->symidx, sym);
   4949 		  assert (sym != NULL);
   4950 
   4951 		  /* Get the data from the file.  Using the raw
   4952 		     section data here is possible since we don't
   4953 		     interpret the string themselves except for
   4954 		     looking for the wide NUL character.  The NUL
   4955 		     character has fortunately the same representation
   4956 		     regardless of the byte order.  */
   4957 		  symrunp->merge.handle
   4958 		    = ebl_wstrtabadd (mergestrtab,
   4959 				      (wchar_t *) ((char *) locdata->d_buf
   4960 						   + sym->st_value), 0);
   4961 		}
   4962 	      while ((symrunp = symrunp->next_in_scn) != runp->symbols);
   4963 
   4964 	      /* All strings have been added.  Create the final table.  */
   4965 	      ebl_wstrtabfinalize (mergestrtab, outdata);
   4966 
   4967 	      /* Compute the final offsets in the section.  */
   4968 	      symrunp = runp->symbols;
   4969 	      do
   4970 		{
   4971 		  symrunp->merge.value
   4972 		    = ebl_wstrtaboffset (symrunp->merge.handle);
   4973 		  symrunp->merged = 1;
   4974 		}
   4975 	      while ((symrunp = symrunp->next_in_scn) != runp->symbols);
   4976 
   4977 	      /* We don't need the string table anymore.  */
   4978 	      ebl_wstrtabfree (mergestrtab);
   4979 	    }
   4980 	  else
   4981 	    {
   4982 	      /* Non-standard merging.  */
   4983 	      struct Ebl_GStrtab *mergestrtab;
   4984 	      struct symbol *symrunp;
   4985 	      Elf_Data *locsymdata = NULL;
   4986 	      Elf_Data *locdata = NULL;
   4987 	      /* If this is no string section the length of each "string"
   4988 		 is always one.  */
   4989 	      unsigned int len = (head->flags & SHF_STRINGS) ? 0 : 1;
   4990 
   4991 	      /* This is the generic string table functionality.  Much
   4992 		 slower than the specialized code.  */
   4993 	      mergestrtab
   4994 		= ebl_gstrtabinit (SCNINFO_SHDR (head->last->shdr).sh_entsize,
   4995 				   false);
   4996 
   4997 	      symrunp = runp->symbols;
   4998 	      file = NULL;
   4999 	      do
   5000 		{
   5001 		  /* Accelarate the loop.  We cache the file
   5002 		     information since it might very well be the case
   5003 		     that the previous entry was from the same
   5004 		     file.  */
   5005 		  if (symrunp->file != file)
   5006 		    {
   5007 		      /* Remember the file.  */
   5008 		      file = symrunp->file;
   5009 		      /* Symbol table data from that file.  */
   5010 		      locsymdata = file->symtabdata;
   5011 		      /* String section data.  */
   5012 		      locdata = elf_rawdata (file->scninfo[symrunp->scndx].scn,
   5013 					     NULL);
   5014 		      assert (locdata != NULL);
   5015 
   5016 		      /* While we are at it, remember the output
   5017 			 section.  If we don't access the string data
   5018 			 section the section won't be in the output
   5019 			 file.  So it is sufficient to do the work
   5020 			 here.  */
   5021 		      file->scninfo[symrunp->scndx].outscnndx = head->scnidx;
   5022 		    }
   5023 
   5024 		  /* Get the symbol information.  This provides us the
   5025 		     offset into the string data section.  */
   5026 		  XElf_Sym_vardef (sym);
   5027 		  xelf_getsym (locsymdata, symrunp->symidx, sym);
   5028 		  assert (sym != NULL);
   5029 
   5030 		  /* Get the data from the file.  Using the raw
   5031 		     section data here is possible since we don't
   5032 		     interpret the string themselves except for
   5033 		     looking for the wide NUL character.  The NUL
   5034 		     character has fortunately the same representation
   5035 		     regardless of the byte order.  */
   5036 		  symrunp->merge.handle
   5037 		    = ebl_gstrtabadd (mergestrtab,
   5038 				      (char *) locdata->d_buf + sym->st_value,
   5039 				      len);
   5040 		}
   5041 	      while ((symrunp = symrunp->next_in_scn) != runp->symbols);
   5042 
   5043 	      /* Create the final table.  */
   5044 	      ebl_gstrtabfinalize (mergestrtab, outdata);
   5045 
   5046 	      /* Compute the final offsets in the section.  */
   5047 	      symrunp = runp->symbols;
   5048 	      do
   5049 		{
   5050 		  symrunp->merge.value
   5051 		    = ebl_gstrtaboffset (symrunp->merge.handle);
   5052 		  symrunp->merged = 1;
   5053 		}
   5054 	      while ((symrunp = symrunp->next_in_scn) != runp->symbols);
   5055 
   5056 	      /* We don't need the string table anymore.  */
   5057 	      ebl_gstrtabfree (mergestrtab);
   5058 	    }
   5059 	}
   5060       else
   5061 	{
   5062 	no_merge:
   5063 	  assert (head->scnidx == elf_ndxscn (scn));
   5064 
   5065 	  /* It is important to start with the first list entry (and
   5066 	     not just any one) to add the sections in the correct
   5067 	     order.  */
   5068 	  runp = head->last->next;
   5069 	  offset = 0;
   5070 	  do
   5071 	    {
   5072 	      Elf_Data *outdata = elf_newdata (scn);
   5073 	      if (outdata == NULL)
   5074 		error (EXIT_FAILURE, 0,
   5075 		       gettext ("cannot create section for output file: %s"),
   5076 		       elf_errmsg (-1));
   5077 
   5078 	      /* Exceptional case: if we synthesize a data block SCN
   5079 		 is NULL and the sectio header info must be for a
   5080 		 SHT_NOBITS block and the size and alignment are
   5081 		 filled in.  */
   5082 	      if (likely (runp->scn != NULL))
   5083 		{
   5084 		  data = elf_getdata (runp->scn, NULL);
   5085 		  assert (data != NULL);
   5086 
   5087 		  /* We reuse the data buffer in the input file.  */
   5088 		  *outdata = *data;
   5089 
   5090 		  /* Given that we read the input file from disk we know there
   5091 		     cannot be another data part.  */
   5092 		  assert (elf_getdata (runp->scn, data) == NULL);
   5093 		}
   5094 	      else
   5095 		{
   5096 		  /* Must be a NOBITS section.  */
   5097 		  assert  (SCNINFO_SHDR (runp->shdr).sh_type == SHT_NOBITS);
   5098 
   5099 		  outdata->d_buf = NULL;	/* Not needed.  */
   5100 		  outdata->d_type = ELF_T_BYTE;
   5101 		  outdata->d_version = EV_CURRENT;
   5102 		  outdata->d_size = SCNINFO_SHDR (runp->shdr).sh_size;
   5103 		  outdata->d_align = SCNINFO_SHDR (runp->shdr).sh_addralign;
   5104 		}
   5105 
   5106 	      XElf_Off align =  MAX (1, outdata->d_align);
   5107 	      assert (powerof2 (align));
   5108 	      offset = ((offset + align - 1) & ~(align - 1));
   5109 
   5110 	      runp->offset = offset;
   5111 	      runp->outscnndx = head->scnidx;
   5112 	      runp->allsectionsidx = cnt;
   5113 
   5114 	      outdata->d_off = offset;
   5115 
   5116 	      offset += outdata->d_size;
   5117 	    }
   5118 	  while ((runp = runp->next) != head->last->next);
   5119 
   5120 	  /* If necessary add the additional line to the .comment section.  */
   5121 	  if (ld_state.add_ld_comment
   5122 	      && head->flags == 0
   5123 	      && head->type == SHT_PROGBITS
   5124 	      && strcmp (head->name, ".comment") == 0
   5125 	      && head->entsize == 0)
   5126 	    {
   5127 	      Elf_Data *outdata = elf_newdata (scn);
   5128 
   5129 	      if (outdata == NULL)
   5130 		error (EXIT_FAILURE, 0,
   5131 		       gettext ("cannot create section for output file: %s"),
   5132 		       elf_errmsg (-1));
   5133 
   5134 	      outdata->d_buf = (void *) "\0ld (" PACKAGE_NAME ") " PACKAGE_VERSION;
   5135 	      outdata->d_size = strlen ((char *) outdata->d_buf + 1) + 2;
   5136 	      outdata->d_off = offset;
   5137 	      outdata->d_type = ELF_T_BYTE;
   5138 	      outdata->d_align = 1;
   5139 	    }
   5140 	  /* XXX We should create a .comment section if none exists.
   5141 	     This requires that we early on detect that no such
   5142 	     section exists.  This should probably be implemented
   5143 	     together with some merging of the section contents.
   5144 	     Currently identical entries are not merged.  */
   5145 	}
   5146     }
   5147 
   5148   /* The table we collect the strings in.  */
   5149   strtab = ebl_strtabinit (true);
   5150   if (strtab == NULL)
   5151     error (EXIT_FAILURE, errno, gettext ("cannot create string table"));
   5152 
   5153 
   5154 #ifndef NDEBUG
   5155   /* Keep track of the use of the XINDEX.  */
   5156   need_xndx = false;
   5157 #endif
   5158 
   5159   /* We we generate a normal symbol table for an executable and the
   5160      --export-dynamic option is not given, we need an extra table
   5161      which keeps track of the symbol entry belonging to the symbol
   5162      table entry.  Note that EXPORT_ALL_DYNAMIC is always set if we
   5163      generate a DSO so we do not have to test this separately.  */
   5164   ndxtosym = (struct symbol **) xcalloc (nsym_allocated,
   5165 					 sizeof (struct symbol));
   5166 
   5167   /* Create the special symbol for the GOT section.  */
   5168   if (ld_state.got_symbol != NULL)
   5169     {
   5170       assert (nsym < nsym_allocated);
   5171       // XXX Fix so that it works even if no PLT is needed.
   5172       fillin_special_symbol (ld_state.got_symbol, ld_state.gotpltscnidx,
   5173 			     nsym++, symdata, strtab);
   5174     }
   5175 
   5176   /* Similarly for the dynamic section symbol.  */
   5177   if (ld_state.dyn_symbol != NULL)
   5178     {
   5179       assert (nsym < nsym_allocated);
   5180       fillin_special_symbol (ld_state.dyn_symbol, ld_state.dynamicscnidx,
   5181 			     nsym++, symdata, strtab);
   5182     }
   5183 
   5184   /* Create symbol table entries for the symbols defined in the linker
   5185      script.  */
   5186   if (ld_state.lscript_syms != NULL)
   5187     {
   5188       struct symbol *rsym = ld_state.lscript_syms;
   5189       do
   5190 	{
   5191 	  assert (nsym < nsym_allocated);
   5192 	  fillin_special_symbol (rsym, SHN_ABS, nsym++, symdata, strtab);
   5193 	}
   5194       while ((rsym = rsym->next) != NULL);
   5195     }
   5196 
   5197   /* Iterate over all input files to collect the symbols.  */
   5198   file = ld_state.relfiles->next;
   5199   symdata = elf_getdata (elf_getscn (ld_state.outelf, ld_state.symscnidx),
   5200 			 NULL);
   5201 
   5202   do
   5203     {
   5204       size_t maxcnt;
   5205       Elf_Data *insymdata;
   5206       Elf_Data *inxndxdata;
   5207 
   5208       /* There must be no dynamic symbol table when creating
   5209 	 relocatable files.  */
   5210       assert (ld_state.file_type != relocatable_file_type
   5211 	      || file->dynsymtabdata == NULL);
   5212 
   5213       insymdata = file->symtabdata;
   5214       assert (insymdata != NULL);
   5215       inxndxdata = file->xndxdata;
   5216 
   5217       maxcnt = file->nsymtab;
   5218 
   5219       file->symindirect = (Elf32_Word *) xcalloc (maxcnt, sizeof (Elf32_Word));
   5220 
   5221       /* The dynamic symbol table does not contain local symbols.  So
   5222          we skip those entries.  */
   5223       for (cnt = ld_state.need_symtab ? 1 : file->nlocalsymbols; cnt < maxcnt;
   5224 	   ++cnt)
   5225 	{
   5226 	  XElf_Sym_vardef (sym);
   5227 	  Elf32_Word xndx;
   5228 	  struct symbol *defp = NULL;
   5229 
   5230 	  xelf_getsymshndx (insymdata, inxndxdata, cnt, sym, xndx);
   5231 	  assert (sym != NULL);
   5232 
   5233 	  if (unlikely (XELF_ST_TYPE (sym->st_info) == STT_SECTION))
   5234 	    {
   5235 	      /* Section symbols should always be local but who knows...  */
   5236 	      if (ld_state.need_symtab)
   5237 		{
   5238 		  /* Determine the real section index in the source file.
   5239 		     Use the XINDEX section content if necessary.  We don't
   5240 		     add this information to the dynamic symbol table.  */
   5241 		  if (sym->st_shndx != SHN_XINDEX)
   5242 		    xndx = sym->st_shndx;
   5243 
   5244 		  assert (file->scninfo[xndx].allsectionsidx
   5245 			  < ld_state.nallsections);
   5246 		  file->symindirect[cnt] = ld_state.allsections[file->scninfo[xndx].allsectionsidx]->scnsymidx;
   5247 		  /* Note that the resulting index can be zero here.  There is
   5248 		     no guarantee that the output file will contain all the
   5249 		     sections the input file did.  */
   5250 		}
   5251 	      continue;
   5252 	    }
   5253 
   5254 	  if ((ld_state.strip >= strip_all || !ld_state.need_symtab)
   5255 	      /* XXX Do we need these entries?  */
   5256 	      && XELF_ST_TYPE (sym->st_info) == STT_FILE)
   5257 	    continue;
   5258 
   5259 #if NATIVE_ELF != 0
   5260 	  /* Copy old data.  We create a temporary copy because the
   5261 	     symbol might still be discarded.  */
   5262 	  XElf_Sym sym_mem;
   5263 	  sym_mem = *sym;
   5264 	  sym = &sym_mem;
   5265 #endif
   5266 
   5267 	  if (sym->st_shndx != SHN_UNDEF
   5268 	      && (sym->st_shndx < SHN_LORESERVE
   5269 		  || sym->st_shndx == SHN_XINDEX))
   5270 	    {
   5271 	      /* If we are creating an executable with no normal
   5272 		 symbol table and we do not export all symbols and
   5273 		 this symbol is not defined in a DSO as well, ignore
   5274 		 it.  */
   5275 	      if (!ld_state.export_all_dynamic && !ld_state.need_symtab)
   5276 		{
   5277 		  assert (cnt >= file->nlocalsymbols);
   5278 		  defp = file->symref[cnt];
   5279 		  assert (defp != NULL);
   5280 
   5281 		  if (!defp->in_dso)
   5282 		    /* Ignore it.  */
   5283 		    continue;
   5284 		}
   5285 
   5286 	      /* Determine the real section index in the source file.  Use
   5287 		 the XINDEX section content if necessary.  */
   5288 	      if (sym->st_shndx != SHN_XINDEX)
   5289 		xndx = sym->st_shndx;
   5290 
   5291 	      sym->st_value += file->scninfo[xndx].offset;
   5292 
   5293 	      assert (file->scninfo[xndx].outscnndx < SHN_LORESERVE
   5294 		      || file->scninfo[xndx].outscnndx > SHN_HIRESERVE);
   5295 	      if (unlikely (file->scninfo[xndx].outscnndx > SHN_LORESERVE))
   5296 		{
   5297 		  /* It is not possible to have an extended section index
   5298 		     table for the dynamic symbol table.  */
   5299 		  if (!ld_state.need_symtab)
   5300 		    error (EXIT_FAILURE, 0, gettext ("\
   5301 section index too large in dynamic symbol table"));
   5302 
   5303 		  assert (xndxdata != NULL);
   5304 		  sym->st_shndx = SHN_XINDEX;
   5305 		  xndx = file->scninfo[xndx].outscnndx;
   5306 #ifndef NDEBUG
   5307 		  need_xndx = true;
   5308 #endif
   5309 		}
   5310 	      else
   5311 		{
   5312 		  sym->st_shndx = file->scninfo[xndx].outscnndx;
   5313 		  xndx = 0;
   5314 		}
   5315 	    }
   5316 	  else if (sym->st_shndx == SHN_COMMON || sym->st_shndx == SHN_UNDEF)
   5317 	    {
   5318 	      /* Check whether we have a (real) definition for this
   5319 		 symbol.  If this is the case we skip this symbol
   5320 		 table entry.  */
   5321 	      assert (cnt >= file->nlocalsymbols);
   5322 	      defp = file->symref[cnt];
   5323 	      assert (defp != NULL);
   5324 
   5325 	      assert (sym->st_shndx != SHN_COMMON || defp->defined);
   5326 
   5327 	      if ((sym->st_shndx == SHN_COMMON && !defp->common)
   5328 		  || (sym->st_shndx == SHN_UNDEF && defp->defined)
   5329 		  || defp->added)
   5330 		/* Ignore this symbol table entry, there is a
   5331 		   "better" one or we already added it.  */
   5332 		continue;
   5333 
   5334 	      /* Remember that we already added this symbol.  */
   5335 	      defp->added = 1;
   5336 
   5337 	      /* Adjust the section number for common symbols.  */
   5338 	      if (sym->st_shndx == SHN_COMMON)
   5339 		{
   5340 		  sym->st_value = (ld_state.common_section->offset
   5341 				   + file->symref[cnt]->merge.value);
   5342 		  assert (ld_state.common_section->outscnndx < SHN_LORESERVE);
   5343 		  sym->st_shndx = ld_state.common_section->outscnndx;
   5344 		  xndx = 0;
   5345 		}
   5346 	    }
   5347 	  else if (unlikely (sym->st_shndx != SHN_ABS))
   5348 	    {
   5349 	      if (SPECIAL_SECTION_NUMBER_P (&ld_state, sym->st_shndx))
   5350 		/* XXX Add code to handle machine specific special
   5351 		   sections.  */
   5352 		abort ();
   5353 	    }
   5354 
   5355 	  /* Add the symbol name to the string table.  If the user
   5356 	     chooses the highest level of stripping avoid adding names
   5357 	     for local symbols in the string table.  */
   5358 	  if (sym->st_name != 0
   5359 	      && (ld_state.strip < strip_everything
   5360 		  || XELF_ST_BIND (sym->st_info) != STB_LOCAL))
   5361 	    symstrent[nsym] = ebl_strtabadd (strtab,
   5362 					     elf_strptr (file->elf,
   5363 							 file->symstridx,
   5364 							 sym->st_name), 0);
   5365 
   5366 	  /* Once we know the name this field will get the correct
   5367 	     offset.  For now set it to zero which means no name
   5368 	     associated.  */
   5369 	  GElf_Word st_name = sym->st_name;
   5370 	  sym->st_name = 0;
   5371 
   5372 	  /* If we had to merge sections we have a completely new
   5373 	     offset for the symbol.  */
   5374 	  if (file->has_merge_sections && file->symref[cnt] != NULL
   5375 	      && file->symref[cnt]->merged)
   5376 	    sym->st_value = file->symref[cnt]->merge.value;
   5377 
   5378 	  /* Create the record in the output sections.  */
   5379 	  assert (nsym < nsym_allocated);
   5380 	  xelf_update_symshndx (symdata, xndxdata, nsym, sym, xndx, 1);
   5381 
   5382 	  /* Add the reference to the symbol record in case we need it.
   5383 	     Find the symbol if this has not happened yet.  We do
   5384 	     not need the information for local symbols.  */
   5385 	  if (defp == NULL && cnt >= file->nlocalsymbols)
   5386 	    {
   5387 	      defp = file->symref[cnt];
   5388 
   5389 	      if (defp == NULL)
   5390 		{
   5391 		  /* This is a symbol in a discarded COMDAT section.
   5392 		     Find the definition we actually use.  */
   5393 		  // XXX The question is: do we have to do this here
   5394 		  // XXX or can we do it earlier when we discard the
   5395 		  // XXX section.
   5396 		  struct symbol search;
   5397 		  search.name = elf_strptr (file->elf, file->symstridx,
   5398 					    st_name);
   5399 		  struct symbol *realp
   5400 		    = ld_symbol_tab_find (&ld_state.symbol_tab,
   5401 					  elf_hash (search.name), &search);
   5402 		  if (realp == NULL)
   5403 		    // XXX What to do here?
   5404 		    error (EXIT_FAILURE, 0,
   5405 			   "couldn't find symbol from COMDAT section");
   5406 
   5407 		  file->symref[cnt] = realp;
   5408 
   5409 		  continue;
   5410 		}
   5411 	    }
   5412 
   5413 	  /* Store the reference to the symbol record.  The sorting
   5414 	     code will have to keep this array in the correct order, too.  */
   5415 	  ndxtosym[nsym] = defp;
   5416 
   5417 	  /* One more entry finished.  */
   5418 	  if (cnt >= file->nlocalsymbols)
   5419 	    {
   5420 	      assert (file->symref[cnt]->outsymidx == 0);
   5421 	      file->symref[cnt]->outsymidx = nsym;
   5422 	    }
   5423 	  file->symindirect[cnt] = nsym++;
   5424 	}
   5425     }
   5426   while ((file = file->next) != ld_state.relfiles->next);
   5427   /* Make sure we didn't create the extended section index table for
   5428      nothing.  */
   5429   assert (xndxdata == NULL || need_xndx);
   5430 
   5431   /* Create the version related sections.  */
   5432   if (ld_state.verneedscnidx != 0)
   5433     {
   5434       /* We know the number of input files and total number of
   5435 	 referenced versions.  This allows us to allocate the memory
   5436 	 and then we iterate over the DSOs to get the version
   5437 	 information.  */
   5438       struct usedfiles *runp;
   5439 
   5440       runp = ld_state.dsofiles->next;
   5441       do
   5442 	allocate_version_names (runp, dynstrtab);
   5443       while ((runp = runp->next) != ld_state.dsofiles->next);
   5444 
   5445       if (ld_state.needed != NULL)
   5446 	{
   5447 	  runp = ld_state.needed->next;
   5448 	  do
   5449 	    allocate_version_names (runp, dynstrtab);
   5450 	  while ((runp = runp->next) != ld_state.needed->next);
   5451 	}
   5452     }
   5453 
   5454   /* At this point we should hide symbols and so on.  */
   5455   if (ld_state.default_bind_local || ld_state.version_str_tab.filled > 0)
   5456     /* XXX Add one more test when handling of wildcard symbol names
   5457        is supported.  */
   5458     {
   5459     /* Check all non-local symbols whether they are on the export list.  */
   5460       bool any_reduced = false;
   5461 
   5462       for (cnt = 1; cnt < nsym; ++cnt)
   5463 	{
   5464 	  XElf_Sym_vardef (sym);
   5465 
   5466 	  /* Note that we don't have to use 'xelf_getsymshndx' since we
   5467 	     only need the binding and the symbol name.  */
   5468 	  xelf_getsym (symdata, cnt, sym);
   5469 	  assert (sym != NULL);
   5470 
   5471 	  if (reduce_symbol_p (sym, symstrent[cnt]))
   5472 	    {
   5473 	      // XXX Check whether this is correct...
   5474 	      assert (ndxtosym[cnt]->outdynsymidx != 0);
   5475 	      ndxtosym[cnt]->outdynsymidx = 0;
   5476 
   5477 	      sym->st_info = XELF_ST_INFO (STB_LOCAL,
   5478 					   XELF_ST_TYPE (sym->st_info));
   5479 	      (void) xelf_update_sym (symdata, cnt, sym);
   5480 
   5481 	      /* Show that we don't need this string anymore.  */
   5482 	      if (ld_state.strip == strip_everything)
   5483 		{
   5484 		  symstrent[cnt] = NULL;
   5485 		  any_reduced = true;
   5486 		}
   5487 	    }
   5488 	}
   5489 
   5490       if (unlikely (any_reduced))
   5491 	{
   5492 	  /* Since we will not write names of local symbols in the
   5493 	     output file and we have reduced the binding of some
   5494 	     symbols the string table previously constructed contains
   5495 	     too many string.  Correct it.  */
   5496 	  struct Ebl_Strtab *newp = ebl_strtabinit (true);
   5497 
   5498 	  for (cnt = 1; cnt < nsym; ++cnt)
   5499 	    if (symstrent[cnt] != NULL)
   5500 	      symstrent[cnt] = ebl_strtabadd (newp,
   5501 					      ebl_string (symstrent[cnt]), 0);
   5502 
   5503 	  ebl_strtabfree (strtab);
   5504 	  strtab = newp;
   5505 	}
   5506     }
   5507 
   5508   /* Add the references to DSOs.  We can add these entries this late
   5509      (after sorting out versioning) because references to DSOs are not
   5510      effected.  */
   5511   if (ld_state.from_dso != NULL)
   5512     {
   5513       struct symbol *runp;
   5514       size_t plt_base = nsym + ld_state.nfrom_dso - ld_state.nplt;
   5515       size_t plt_idx = 0;
   5516       size_t obj_idx = 0;
   5517 
   5518       assert (ld_state.nfrom_dso >= ld_state.nplt);
   5519       runp = ld_state.from_dso;
   5520       do
   5521 	{
   5522 	  // XXX What about functions which are only referenced via
   5523 	  // pointers and not PLT entries?  Can we distinguish such uses?
   5524 	  size_t idx;
   5525 	  if (runp->type == STT_FUNC)
   5526 	    {
   5527 	      /* Store the PLT entry number.  */
   5528 	      runp->merge.value = plt_idx + 1;
   5529 	      idx = plt_base + plt_idx++;
   5530 	    }
   5531 	  else
   5532 	    idx = nsym + obj_idx++;
   5533 
   5534 	  XElf_Sym_vardef (sym);
   5535 	  xelf_getsym_ptr (symdata, idx, sym);
   5536 
   5537 	  sym->st_value = 0;
   5538 	  sym->st_size = runp->size;
   5539 	  sym->st_info = XELF_ST_INFO (runp->weak ? STB_WEAK : STB_GLOBAL,
   5540 				       runp->type);
   5541 	  sym->st_other = STV_DEFAULT;
   5542 	  sym->st_shndx = SHN_UNDEF;
   5543 
   5544 	  /* Create the record in the output sections.  */
   5545 	  xelf_update_symshndx (symdata, xndxdata, idx, sym, 0, 0);
   5546 
   5547 	  const char *name = runp->name;
   5548 	  size_t namelen = 0;
   5549 
   5550 	  if (runp->file->verdefdata != NULL)
   5551 	    {
   5552 	      // XXX Is it useful to add the versym value to struct symbol?
   5553 	      XElf_Versym versym;
   5554 
   5555 	      (void) xelf_getversym_copy (runp->file->versymdata, runp->symidx,
   5556 					  versym);
   5557 
   5558 	      /* One can only link with the default version.  */
   5559 	      assert ((versym & 0x8000) == 0);
   5560 
   5561 	      const char *versname
   5562 		= ebl_string (runp->file->verdefent[versym]);
   5563 
   5564 	      size_t versname_len = strlen (versname) + 1;
   5565 	      namelen = strlen (name) + versname_len + 2;
   5566 	      char *newp = (char *) obstack_alloc (&ld_state.smem, namelen);
   5567 	      memcpy (stpcpy (stpcpy (newp, name), "@@"),
   5568 		      versname, versname_len);
   5569 	      name = newp;
   5570 	    }
   5571 
   5572 	  symstrent[idx] = ebl_strtabadd (strtab, name, namelen);
   5573 
   5574 	  /* Record the initial index in the symbol table.  */
   5575 	  runp->outsymidx = idx;
   5576 
   5577 	  /* Remember the symbol record this ELF symbol came from.  */
   5578 	  ndxtosym[idx] = runp;
   5579 	}
   5580       while ((runp = runp->next) != ld_state.from_dso);
   5581 
   5582       assert (nsym + obj_idx == plt_base);
   5583       assert (plt_idx == ld_state.nplt);
   5584       nsym = plt_base + plt_idx;
   5585     }
   5586 
   5587   /* Now we know how many symbols will be in the output file.  Adjust
   5588      the count in the section data.  */
   5589   symdata->d_size = xelf_fsize (ld_state.outelf, ELF_T_SYM, nsym);
   5590   if (unlikely (xndxdata != NULL))
   5591     xndxdata->d_size = xelf_fsize (ld_state.outelf, ELF_T_WORD, nsym);
   5592 
   5593   /* Create the symbol string table section.  */
   5594   strscn = elf_newscn (ld_state.outelf);
   5595   ld_state.strscnidx = elf_ndxscn (strscn);
   5596   data = elf_newdata (strscn);
   5597   xelf_getshdr (strscn, shdr);
   5598   if (data == NULL || shdr == NULL)
   5599     error (EXIT_FAILURE, 0,
   5600 	   gettext ("cannot create section for output file: %s"),
   5601 	   elf_errmsg (-1));
   5602 
   5603   /* Create a compact string table, allocate the memory for it, and
   5604      fill in the section data information.  */
   5605   ebl_strtabfinalize (strtab, data);
   5606 
   5607   shdr->sh_type = SHT_STRTAB;
   5608   assert (shdr->sh_entsize == 0);
   5609 
   5610   if (unlikely (xelf_update_shdr (strscn, shdr) == 0))
   5611     error (EXIT_FAILURE, 0,
   5612 	   gettext ("cannot create section for output file: %s"),
   5613 	   elf_errmsg (-1));
   5614 
   5615   /* Fill in the offsets of the symbol names.  */
   5616   for (cnt = 1; cnt < nsym; ++cnt)
   5617     if (symstrent[cnt] != NULL)
   5618       {
   5619 	XElf_Sym_vardef (sym);
   5620 
   5621 	/* Note that we don't have to use 'xelf_getsymshndx' since we don't
   5622 	   modify the section index.  */
   5623 	xelf_getsym (symdata, cnt, sym);
   5624 	/* This better worked, we did it before.  */
   5625 	assert (sym != NULL);
   5626 	sym->st_name = ebl_strtaboffset (symstrent[cnt]);
   5627 	(void) xelf_update_sym (symdata, cnt, sym);
   5628       }
   5629 
   5630   /* Since we are going to reorder the symbol table but still have to
   5631      be able to find the new position based on the old one (since the
   5632      latter is stored in 'symindirect' information of the input file
   5633      data structure) we have to create yet another indirection
   5634      table.  */
   5635   ld_state.dblindirect = dblindirect
   5636     = (Elf32_Word *) xmalloc (nsym * sizeof (Elf32_Word));
   5637 
   5638   /* Sort the symbol table so that the local symbols come first.  */
   5639   /* XXX We don't use stable sorting here.  It seems not necessary and
   5640      would be more expensive.  If it turns out to be necessary this can
   5641      be fixed easily.  */
   5642   nsym_local = 1;
   5643   cnt = nsym - 1;
   5644   while (nsym_local < cnt)
   5645     {
   5646       XElf_Sym_vardef (locsym);
   5647       Elf32_Word locxndx;
   5648       XElf_Sym_vardef (globsym);
   5649       Elf32_Word globxndx;
   5650 
   5651       do
   5652 	{
   5653 	  xelf_getsymshndx (symdata, xndxdata, nsym_local, locsym, locxndx);
   5654 	  /* This better works.  */
   5655 	  assert (locsym != NULL);
   5656 
   5657 	  if (XELF_ST_BIND (locsym->st_info) != STB_LOCAL
   5658 	      && (ld_state.need_symtab || ld_state.export_all_dynamic))
   5659 	    {
   5660 	      do
   5661 		{
   5662 		  xelf_getsymshndx (symdata, xndxdata, cnt, globsym, globxndx);
   5663 		  /* This better works.  */
   5664 		  assert (globsym != NULL);
   5665 
   5666 		  if (unlikely (XELF_ST_BIND (globsym->st_info) == STB_LOCAL))
   5667 		    {
   5668 		      /* We swap the two entries.  */
   5669 #if NATIVE_ELF != 0
   5670 		      /* Since we directly modify the data in the ELF
   5671 			 data structure we have to make a copy of one
   5672 			 of the entries.  */
   5673 		      XElf_Sym locsym_copy = *locsym;
   5674 		      locsym = &locsym_copy;
   5675 #endif
   5676 		      xelf_update_symshndx (symdata, xndxdata, nsym_local,
   5677 					    globsym, globxndx, 1);
   5678 		      xelf_update_symshndx (symdata, xndxdata, cnt,
   5679 					    locsym, locxndx, 1);
   5680 
   5681 		      /* Also swap the cross references.  */
   5682 		      dblindirect[nsym_local] = cnt;
   5683 		      dblindirect[cnt] = nsym_local;
   5684 
   5685 		      /* And the entries for the symbol names.  */
   5686 		      struct Ebl_Strent *strtmp = symstrent[nsym_local];
   5687 		      symstrent[nsym_local] = symstrent[cnt];
   5688 		      symstrent[cnt] = strtmp;
   5689 
   5690 		      /* And the mapping from symbol table entry to
   5691 			 struct symbol record.  */
   5692 		      struct symbol *symtmp = ndxtosym[nsym_local];
   5693 		      ndxtosym[nsym_local] = ndxtosym[cnt];
   5694 		      ndxtosym[cnt] = symtmp;
   5695 
   5696 		      /* Go to the next entry.  */
   5697 		      ++nsym_local;
   5698 		      --cnt;
   5699 
   5700 		      break;
   5701 		    }
   5702 
   5703 		  dblindirect[cnt] = cnt;
   5704 		}
   5705 	      while (nsym_local < --cnt);
   5706 
   5707 	      break;
   5708 	    }
   5709 
   5710 	  dblindirect[nsym_local] = nsym_local;
   5711 	}
   5712       while (++nsym_local < cnt);
   5713     }
   5714 
   5715   /* The symbol 'nsym_local' is currently pointing to might be local,
   5716      too.  Check and increment the variable if this is the case.  */
   5717   if (likely (nsym_local < nsym))
   5718     {
   5719       XElf_Sym_vardef (locsym);
   5720 
   5721       /* This entry isn't moved.  */
   5722       dblindirect[nsym_local] = nsym_local;
   5723 
   5724       /* Note that it is OK to not use 'xelf_getsymshndx' here.  */
   5725       xelf_getsym (symdata, nsym_local, locsym);
   5726       /* This better works.  */
   5727       assert (locsym != NULL);
   5728 
   5729       if (XELF_ST_BIND (locsym->st_info) == STB_LOCAL)
   5730 	++nsym_local;
   5731     }
   5732 
   5733 
   5734   /* We need the versym array right away to keep track of the version
   5735      symbols.  */
   5736   if (ld_state.versymscnidx != 0)
   5737     {
   5738       /* We allocate more memory than we need since the array is morroring
   5739 	 the dynamic symbol table and not the normal symbol table.  I.e.,
   5740 	 no local symbols are present.  */
   5741       versymscn = elf_getscn (ld_state.outelf, ld_state.versymscnidx);
   5742       versymdata = elf_newdata (versymscn);
   5743       if (versymdata == NULL)
   5744 	error (EXIT_FAILURE, 0,
   5745 	       gettext ("cannot create versioning section: %s"),
   5746 	       elf_errmsg (-1));
   5747 
   5748       versymdata->d_size = xelf_fsize (ld_state.outelf, ELF_T_HALF,
   5749 				       nsym - nsym_local + 1);
   5750       versymdata->d_buf = xcalloc (1, versymdata->d_size);
   5751       versymdata->d_align = xelf_fsize (ld_state.outelf, ELF_T_HALF, 1);
   5752       versymdata->d_off = 0;
   5753       versymdata->d_type = ELF_T_HALF;
   5754     }
   5755 
   5756 
   5757   /* If we have to construct the dynamic symbol table we must not include
   5758      the local symbols.  If the normal symbol has to be emitted as well
   5759      we haven't done anything else yet and we can construct it from
   5760      scratch now.  */
   5761   if (unlikely (!ld_state.need_symtab))
   5762     {
   5763       /* Note that the following code works even if there is no entry
   5764 	 to remove since the zeroth entry is always local.  */
   5765       size_t reduce = xelf_fsize (ld_state.outelf, ELF_T_SYM, nsym_local - 1);
   5766 
   5767       XElf_Sym_vardef (nullsym);
   5768       xelf_getsym_ptr (symdata, nsym_local - 1, nullsym);
   5769 
   5770       /* Note that we don't have to use 'xelf_update_symshndx' since
   5771 	 this is the dynamic symbol table we write.  */
   5772       (void) xelf_update_sym (symdata, nsym_local - 1,
   5773 			      memset (nullsym, '\0', sizeof (*nullsym)));
   5774 
   5775       /* Update the buffer pointer and size in the output data.  */
   5776       symdata->d_buf = (char *) symdata->d_buf + reduce;
   5777       symdata->d_size -= reduce;
   5778 
   5779       /* Add the version symbol information.  */
   5780       if (versymdata != NULL)
   5781 	{
   5782 	  nsym_dyn = 1;
   5783 	  for (cnt = nsym_local; cnt < nsym; ++cnt, ++nsym_dyn)
   5784 	    {
   5785 	      struct symbol *symp = ndxtosym[cnt];
   5786 
   5787 	      if (symp->file->versymdata != NULL)
   5788 		{
   5789 		  GElf_Versym versym;
   5790 
   5791 		  gelf_getversym (symp->file->versymdata, symp->symidx,
   5792 				  &versym);
   5793 
   5794 		  (void) gelf_update_versym (versymdata, symp->outdynsymidx,
   5795 					     &symp->file->verdefused[versym]);
   5796 		}
   5797 	      }
   5798 	}
   5799 
   5800       /* Since we only created the dynamic symbol table the number of
   5801 	 dynamic symbols is the total number of symbols.  */
   5802       nsym_dyn = nsym - nsym_local + 1;
   5803 
   5804       /* XXX TBI.  Create whatever data structure is missing.  */
   5805       abort ();
   5806     }
   5807   else if (ld_state.need_dynsym)
   5808     {
   5809       /* Create the dynamic symbol table section data along with the
   5810 	 string table.  We look at all non-local symbols we found for
   5811 	 the normal symbol table and add those.  */
   5812       dynsymscn = elf_getscn (ld_state.outelf, ld_state.dynsymscnidx);
   5813       dynsymdata = elf_newdata (dynsymscn);
   5814 
   5815       dynstrdata = elf_newdata (elf_getscn (ld_state.outelf,
   5816 					    ld_state.dynstrscnidx));
   5817       if (dynsymdata == NULL || dynstrdata == NULL)
   5818 	error (EXIT_FAILURE, 0, gettext ("\
   5819 cannot create dynamic symbol table for output file: %s"),
   5820 	       elf_errmsg (-1));
   5821 
   5822       nsym_dyn_allocated = nsym - nsym_local + 1;
   5823       dynsymdata->d_size = xelf_fsize (ld_state.outelf, ELF_T_SYM,
   5824 				       nsym_dyn_allocated);
   5825       dynsymdata->d_buf = memset (xmalloc (dynsymdata->d_size), '\0',
   5826 				  xelf_fsize (ld_state.outelf, ELF_T_SYM, 1));
   5827       dynsymdata->d_type = ELF_T_SYM;
   5828       dynsymdata->d_off = 0;
   5829       dynsymdata->d_align = xelf_fsize (ld_state.outelf, ELF_T_ADDR, 1);
   5830 
   5831       /* We need one more array which contains the hash codes of the
   5832 	 symbol names.  */
   5833       hashcodes = (Elf32_Word *) xcalloc (__builtin_popcount ((int) ld_state.hash_style)
   5834 					  * nsym_dyn_allocated,
   5835 					  sizeof (Elf32_Word));
   5836       gnuhashcodes = hashcodes;
   5837       if (GENERATE_SYSV_HASH)
   5838 	gnuhashcodes += nsym_dyn_allocated;
   5839 
   5840       /* We have and empty entry at the beginning.  */
   5841       nsym_dyn = 1;
   5842 
   5843       /* Populate the table.  */
   5844       for (cnt = nsym_local; cnt < nsym; ++cnt)
   5845 	{
   5846 	  XElf_Sym_vardef (sym);
   5847 
   5848 	  xelf_getsym (symdata, cnt, sym);
   5849 	  assert (sym != NULL);
   5850 
   5851 	  if (sym->st_shndx == SHN_XINDEX)
   5852 	    error (EXIT_FAILURE, 0, gettext ("\
   5853 section index too large in dynamic symbol table"));
   5854 
   5855 	  /* We do not add the symbol to the dynamic symbol table if
   5856 
   5857 	     - the symbol is for a file
   5858 	     - it is not externally visible (internal, hidden)
   5859 	     - if export_all_dynamic is not set and is only defined in
   5860 	       the executable (i.e., it is defined, but not (also) in
   5861 	       in DSO)
   5862 
   5863 	     Set symstrent[cnt] to NULL in case an entry is ignored.  */
   5864 	  if (XELF_ST_TYPE (sym->st_info) == STT_FILE
   5865 	      || XELF_ST_VISIBILITY (sym->st_other) == STV_INTERNAL
   5866 	      || XELF_ST_VISIBILITY (sym->st_other) == STV_HIDDEN
   5867 	      || (!ld_state.export_all_dynamic
   5868 		  && !ndxtosym[cnt]->in_dso && ndxtosym[cnt]->defined))
   5869 	    {
   5870 	      symstrent[cnt] = NULL;
   5871 	      continue;
   5872 	    }
   5873 
   5874 	  /* Store the index of the symbol in the dynamic symbol
   5875 	     table.  This is a preliminary value in case we use the
   5876 	     GNU-style hash table.  */
   5877 	  ndxtosym[cnt]->outdynsymidx = nsym_dyn;
   5878 
   5879 	  /* Create a new string table entry.  */
   5880 	  const char *str = ndxtosym[cnt]->name;
   5881 	  symstrent[cnt] = ebl_strtabadd (dynstrtab, str, 0);
   5882 	  if (GENERATE_SYSV_HASH)
   5883 	    hashcodes[nsym_dyn] = elf_hash (str);
   5884 	  if (GENERATE_GNU_HASH)
   5885 	    gnuhashcodes[nsym_dyn] = elf_gnu_hash (str);
   5886 	  ++nsym_dyn;
   5887 	}
   5888 
   5889       if (ld_state.file_type != relocatable_file_type)
   5890 	{
   5891 	  /* Finalize the dynamic string table.  */
   5892 	  ebl_strtabfinalize (dynstrtab, dynstrdata);
   5893 
   5894 	  assert (ld_state.hashscnidx != 0 || ld_state.gnuhashscnidx != 0);
   5895 
   5896 	  /* Create the GNU-style hash table.  */
   5897 	  if (GENERATE_GNU_HASH)
   5898 	    create_gnu_hash (nsym_local, nsym, nsym_dyn, gnuhashcodes);
   5899 
   5900 	  /* Create the SysV-style hash table.  This has to happen
   5901 	     after the GNU-style table is created since
   5902 	     CREATE-GNU-HASH might reorder the dynamic symbol table.  */
   5903 	  if (GENERATE_SYSV_HASH)
   5904 	    create_hash (nsym_local, nsym, nsym_dyn, hashcodes);
   5905 	}
   5906 
   5907 	  /* Add the version information.  */
   5908       if (versymdata != NULL)
   5909 	for (cnt = nsym_local; cnt < nsym; ++cnt)
   5910 	  if (symstrent[cnt] != NULL)
   5911 	    {
   5912 	      struct symbol *symp = ndxtosym[cnt];
   5913 
   5914 	      /* Synthetic symbols (i.e., those with no file attached)
   5915 		 have no version information.  */
   5916 	      if (symp->file != NULL && symp->file->verdefdata != NULL)
   5917 		{
   5918 		  GElf_Versym versym;
   5919 
   5920 		  gelf_getversym (symp->file->versymdata, symp->symidx,
   5921 				  &versym);
   5922 
   5923 		  (void) gelf_update_versym (versymdata, symp->outdynsymidx,
   5924 					     &symp->file->verdefused[versym]);
   5925 		}
   5926 	      else
   5927 		{
   5928 		  /* XXX Add support for version definitions.  */
   5929 		  GElf_Versym global = VER_NDX_GLOBAL;
   5930 		  (void) gelf_update_versym (versymdata, nsym_dyn, &global);
   5931 		}
   5932 	    }
   5933 
   5934       /* Update the information about the symbol section.  */
   5935       if (versymdata != NULL)
   5936 	{
   5937 	  /* Correct the size now that we know how many entries the
   5938 	     dynamic symbol table has.  */
   5939 	  versymdata->d_size = xelf_fsize (ld_state.outelf, ELF_T_HALF,
   5940 					   nsym_dyn);
   5941 
   5942 	  /* Add the reference to the symbol table.  */
   5943 	  xelf_getshdr (versymscn, shdr);
   5944 	  assert (shdr != NULL);
   5945 
   5946 	  shdr->sh_link = ld_state.dynsymscnidx;
   5947 
   5948 	  (void) xelf_update_shdr (versymscn, shdr);
   5949 	}
   5950     }
   5951 
   5952   if (ld_state.file_type != relocatable_file_type)
   5953     {
   5954       /* Now put the names in.  */
   5955       for (cnt = nsym_local; cnt < nsym; ++cnt)
   5956 	if (symstrent[cnt] != NULL)
   5957 	  {
   5958 	    XElf_Sym_vardef (sym);
   5959 	    size_t dynidx = ndxtosym[cnt]->outdynsymidx;
   5960 
   5961 #if NATIVE_ELF != 0
   5962 	    XElf_Sym *osym;
   5963 	    memcpy (xelf_getsym (dynsymdata, dynidx, sym),
   5964 		    xelf_getsym (symdata, cnt, osym),
   5965 		    sizeof (XElf_Sym));
   5966 #else
   5967 	    xelf_getsym (symdata, cnt, sym);
   5968 	    assert (sym != NULL);
   5969 #endif
   5970 
   5971 	    sym->st_name = ebl_strtaboffset (symstrent[cnt]);
   5972 
   5973 	    (void) xelf_update_sym (dynsymdata, dynidx, sym);
   5974 	  }
   5975 
   5976       free (hashcodes);
   5977 
   5978       /* Create the required version section.  */
   5979       if (ld_state.verneedscnidx != 0)
   5980 	{
   5981 	  Elf_Scn *verneedscn;
   5982 	  Elf_Data *verneeddata;
   5983 	  struct usedfiles *runp;
   5984 	  size_t verneed_size = xelf_fsize (ld_state.outelf, ELF_T_VNEED, 1);
   5985 	  size_t vernaux_size = xelf_fsize (ld_state.outelf, ELF_T_VNAUX, 1);
   5986 	  size_t offset;
   5987 	  int ntotal;
   5988 
   5989 	  verneedscn = elf_getscn (ld_state.outelf, ld_state.verneedscnidx);
   5990 	  xelf_getshdr (verneedscn, shdr);
   5991 	  verneeddata = elf_newdata (verneedscn);
   5992 	  if (shdr == NULL || verneeddata == NULL)
   5993 	    error (EXIT_FAILURE, 0,
   5994 		   gettext ("cannot create versioning data: %s"),
   5995 		   elf_errmsg (-1));
   5996 
   5997 	  verneeddata->d_size = (ld_state.nverdeffile * verneed_size
   5998 				 + ld_state.nverdefused * vernaux_size);
   5999 	  verneeddata->d_buf = xmalloc (verneeddata->d_size);
   6000 	  verneeddata->d_type = ELF_T_VNEED;
   6001 	  verneeddata->d_align = xelf_fsize (ld_state.outelf, ELF_T_WORD, 1);
   6002 	  verneeddata->d_off = 0;
   6003 
   6004 	  offset = 0;
   6005 	  ntotal = ld_state.nverdeffile;
   6006 	  runp = ld_state.dsofiles->next;
   6007 	  do
   6008 	    {
   6009 	      offset = create_verneed_data (offset, verneeddata, runp,
   6010 					    &ntotal);
   6011 	      runp = runp->next;
   6012 	    }
   6013 	  while (ntotal > 0 && runp != ld_state.dsofiles->next);
   6014 
   6015 	  if (ntotal > 0)
   6016 	    {
   6017 	      runp = ld_state.needed->next;
   6018 	      do
   6019 		{
   6020 		  offset = create_verneed_data (offset, verneeddata, runp,
   6021 						&ntotal);
   6022 		  runp = runp->next;
   6023 		}
   6024 	      while (ntotal > 0 && runp != ld_state.needed->next);
   6025 	    }
   6026 
   6027 	  assert (offset == verneeddata->d_size);
   6028 
   6029 	  /* Add the needed information to the section header.  */
   6030 	  shdr->sh_link = ld_state.dynstrscnidx;
   6031 	  shdr->sh_info = ld_state.nverdeffile;
   6032 	  (void) xelf_update_shdr (verneedscn, shdr);
   6033 	}
   6034 
   6035       /* Adjust the section size.  */
   6036       dynsymdata->d_size = xelf_fsize (ld_state.outelf, ELF_T_SYM, nsym_dyn);
   6037       if (versymdata != NULL)
   6038 	versymdata->d_size = xelf_fsize (ld_state.outelf, ELF_T_HALF,
   6039 					 nsym_dyn);
   6040 
   6041       /* Add the remaining information to the section header.  */
   6042       xelf_getshdr (dynsymscn, shdr);
   6043       /* There is always exactly one local symbol.  */
   6044       shdr->sh_info = 1;
   6045       /* Reference the string table.  */
   6046       shdr->sh_link = ld_state.dynstrscnidx;
   6047       /* Write the updated info back.  */
   6048       (void) xelf_update_shdr (dynsymscn, shdr);
   6049     }
   6050 
   6051   /* We don't need the string table anymore.  */
   6052   free (symstrent);
   6053 
   6054   /* Remember the total number of symbols in the dynamic symbol table.  */
   6055   ld_state.ndynsym = nsym_dyn;
   6056 
   6057   /* Fill in the section header information.  */
   6058   symscn = elf_getscn (ld_state.outelf, ld_state.symscnidx);
   6059   xelf_getshdr (symscn, shdr);
   6060   if (shdr == NULL)
   6061     error (EXIT_FAILURE, 0,
   6062 	   gettext ("cannot create symbol table for output file: %s"),
   6063 	   elf_errmsg (-1));
   6064 
   6065   shdr->sh_type = SHT_SYMTAB;
   6066   shdr->sh_link = ld_state.strscnidx;
   6067   shdr->sh_info = nsym_local;
   6068   shdr->sh_entsize = xelf_fsize (ld_state.outelf, ELF_T_SYM, 1);
   6069 
   6070   (void) xelf_update_shdr (symscn, shdr);
   6071 
   6072 
   6073   /* Add names for the generated sections.  */
   6074   if (ld_state.symscnidx != 0)
   6075       symtab_ent = ebl_strtabadd (ld_state.shstrtab, ".symtab", 8);
   6076   if (ld_state.xndxscnidx != 0)
   6077     xndx_ent = ebl_strtabadd (ld_state.shstrtab, ".symtab_shndx", 14);
   6078   if (ld_state.strscnidx != 0)
   6079     strtab_ent = ebl_strtabadd (ld_state.shstrtab, ".strtab", 8);
   6080   /* At this point we would have to test for failures in the
   6081      allocation.  But we skip this.  First, the problem will be caught
   6082      later when doing more allocations for the section header table.
   6083      Even if this would not be the case all that would happen is that
   6084      the section names are empty.  The binary would still be usable if
   6085      it is an executable or a DSO.  Not adding the test here saves
   6086      quite a bit of code.  */
   6087 
   6088 
   6089   /* Finally create the section for the section header string table.  */
   6090   shstrtab_scn = elf_newscn (ld_state.outelf);
   6091   shstrtab_ndx = elf_ndxscn (shstrtab_scn);
   6092   if (unlikely (shstrtab_ndx == SHN_UNDEF))
   6093     error (EXIT_FAILURE, 0,
   6094 	   gettext ("cannot create section header string section: %s"),
   6095 	   elf_errmsg (-1));
   6096 
   6097   /* Add the name of the section to the string table.  */
   6098   shstrtab_ent = ebl_strtabadd (ld_state.shstrtab, ".shstrtab", 10);
   6099   if (unlikely (shstrtab_ent == NULL))
   6100     error (EXIT_FAILURE, errno,
   6101 	   gettext ("cannot create section header string section"));
   6102 
   6103   /* Finalize the section header string table.  */
   6104   data = elf_newdata (shstrtab_scn);
   6105   if (data == NULL)
   6106     error (EXIT_FAILURE, 0,
   6107 	   gettext ("cannot create section header string section: %s"),
   6108 	   elf_errmsg (-1));
   6109   ebl_strtabfinalize (ld_state.shstrtab, data);
   6110 
   6111   /* Now we know the string offsets for all section names.  */
   6112   for (cnt = 0; cnt < ld_state.nallsections; ++cnt)
   6113     if (ld_state.allsections[cnt]->scnidx != 0)
   6114       {
   6115 	Elf_Scn *scn;
   6116 
   6117 	scn = elf_getscn (ld_state.outelf, ld_state.allsections[cnt]->scnidx);
   6118 
   6119 	xelf_getshdr (scn, shdr);
   6120 	assert (shdr != NULL);
   6121 
   6122 	shdr->sh_name = ebl_strtaboffset (ld_state.allsections[cnt]->nameent);
   6123 
   6124 	if (xelf_update_shdr (scn, shdr) == 0)
   6125 	  assert (0);
   6126       }
   6127 
   6128   /* Add the names for the generated sections to the respective
   6129      section headers.  */
   6130   if (symtab_ent != NULL)
   6131     {
   6132       Elf_Scn *scn = elf_getscn (ld_state.outelf, ld_state.symscnidx);
   6133 
   6134       xelf_getshdr (scn, shdr);
   6135       /* This cannot fail, we already accessed the header before.  */
   6136       assert (shdr != NULL);
   6137 
   6138       shdr->sh_name = ebl_strtaboffset (symtab_ent);
   6139 
   6140       (void) xelf_update_shdr (scn, shdr);
   6141     }
   6142   if (xndx_ent != NULL)
   6143     {
   6144       Elf_Scn *scn = elf_getscn (ld_state.outelf, ld_state.xndxscnidx);
   6145 
   6146       xelf_getshdr (scn, shdr);
   6147       /* This cannot fail, we already accessed the header before.  */
   6148       assert (shdr != NULL);
   6149 
   6150       shdr->sh_name = ebl_strtaboffset (xndx_ent);
   6151 
   6152       (void) xelf_update_shdr (scn, shdr);
   6153     }
   6154   if (strtab_ent != NULL)
   6155     {
   6156       Elf_Scn *scn = elf_getscn (ld_state.outelf, ld_state.strscnidx);
   6157 
   6158       xelf_getshdr (scn, shdr);
   6159       /* This cannot fail, we already accessed the header before.  */
   6160       assert (shdr != NULL);
   6161 
   6162       shdr->sh_name = ebl_strtaboffset (strtab_ent);
   6163 
   6164       (void) xelf_update_shdr (scn, shdr);
   6165     }
   6166 
   6167   /* And the section header table section itself.  */
   6168   xelf_getshdr (shstrtab_scn, shdr);
   6169   if (shdr == NULL)
   6170     error (EXIT_FAILURE, 0,
   6171 	   gettext ("cannot create section header string section: %s"),
   6172 	   elf_errmsg (-1));
   6173 
   6174   shdr->sh_name = ebl_strtaboffset (shstrtab_ent);
   6175   shdr->sh_type = SHT_STRTAB;
   6176 
   6177   if (unlikely (xelf_update_shdr (shstrtab_scn, shdr) == 0))
   6178     error (EXIT_FAILURE, 0,
   6179 	   gettext ("cannot create section header string section: %s"),
   6180 	   elf_errmsg (-1));
   6181 
   6182 
   6183   /* Add the correct section header info to the section group sections.  */
   6184   groups = ld_state.groups;
   6185   while (groups != NULL)
   6186     {
   6187       Elf_Scn *scn = elf_getscn (ld_state.outelf, groups->outscnidx);
   6188       xelf_getshdr (scn, shdr);
   6189       assert (shdr != NULL);
   6190 
   6191       shdr->sh_name = ebl_strtaboffset (groups->nameent);
   6192       shdr->sh_type = SHT_GROUP;
   6193       shdr->sh_flags = 0;
   6194       shdr->sh_link = ld_state.symscnidx;
   6195       shdr->sh_entsize = sizeof (Elf32_Word);
   6196 
   6197       /* Determine the index for the signature symbol.  */
   6198       Elf32_Word si
   6199 	= groups->symbol->file->symindirect[groups->symbol->symidx];
   6200       if (si == 0)
   6201 	{
   6202 	  assert (groups->symbol->file->symref[groups->symbol->symidx]
   6203 		  != NULL);
   6204 	  si = groups->symbol->file->symref[groups->symbol->symidx]->outsymidx;
   6205 	  assert (si != 0);
   6206 	}
   6207       shdr->sh_info = ld_state.dblindirect[si];
   6208 
   6209       (void) xelf_update_shdr (scn, shdr);
   6210 
   6211       struct scngroup *oldp = groups;
   6212       groups = groups->next;
   6213       free (oldp);
   6214     }
   6215 
   6216 
   6217   if (ld_state.file_type != relocatable_file_type)
   6218     {
   6219       /* Every executable needs a program header.  The number of entries
   6220 	 varies.  One exists for each segment.  Each SHT_NOTE section gets
   6221 	 one, too.  For dynamically linked executables we have to create
   6222 	 one for the program header, the interpreter, and the dynamic
   6223 	 section.  First count the number of segments.
   6224 
   6225 	 XXX Determine whether the segment is non-empty.  */
   6226       size_t nphdr = 0;
   6227 
   6228       /* We always add a PT_GNU_stack entry.  */
   6229       ++nphdr;
   6230 
   6231       struct output_segment *segment = ld_state.output_segments;
   6232       while (segment != NULL)
   6233 	{
   6234 	  ++nphdr;
   6235 	  segment = segment->next;
   6236 	}
   6237 
   6238       /* Add the number of SHT_NOTE sections.  We counted them earlier.  */
   6239       nphdr += ld_state.nnotesections;
   6240 
   6241       /* If we create a DSO or the file is linked against DSOs we have
   6242 	 at least one more entry: DYNAMIC.  If an interpreter is
   6243 	 specified we add PHDR and INTERP, too.  */
   6244       if (dynamically_linked_p ())
   6245 	{
   6246 	  ++nphdr;
   6247 
   6248 	  if (ld_state.interp != NULL || ld_state.file_type != dso_file_type)
   6249 	    nphdr += 2;
   6250 	}
   6251 
   6252       /* If we need a TLS segment we need an entry for that.  */
   6253       if (ld_state.need_tls)
   6254 	++nphdr;
   6255 
   6256       /* Create the program header structure.  */
   6257       XElf_Phdr_vardef (phdr);
   6258       if (xelf_newphdr (ld_state.outelf, nphdr) == 0)
   6259 	error (EXIT_FAILURE, 0, gettext ("cannot create program header: %s"),
   6260 	       elf_errmsg (-1));
   6261 
   6262 
   6263       /* Determine the section sizes and offsets.  We have to do this
   6264 	 to be able to determine the memory layout (which normally
   6265 	 differs from the file layout).  */
   6266       if (elf_update (ld_state.outelf, ELF_C_NULL) == -1)
   6267 	error (EXIT_FAILURE, 0, gettext ("while determining file layout: %s"),
   6268 	       elf_errmsg (-1));
   6269 
   6270 
   6271       /* Now determine the memory addresses of all the sections and
   6272 	 segments.  */
   6273       Elf32_Word nsec = 0;
   6274       Elf_Scn *scn = elf_getscn (ld_state.outelf,
   6275 				 ld_state.allsections[nsec]->scnidx);
   6276       xelf_getshdr (scn, shdr);
   6277       assert (shdr != NULL);
   6278 
   6279       /* The address we start with is the offset of the first (not
   6280 	 zeroth) section.  */
   6281       XElf_Addr addr = shdr->sh_offset;
   6282       XElf_Addr tls_offset = 0;
   6283       XElf_Addr tls_start = ~((XElf_Addr) 0);
   6284       XElf_Addr tls_end = 0;
   6285       XElf_Off tls_filesize = 0;
   6286       XElf_Addr tls_align = 0;
   6287 
   6288       /* The index of the first loadable segment.  */
   6289       nphdr = 0;
   6290       if (dynamically_linked_p ())
   6291 	{
   6292 	  ++nphdr;
   6293 	  if (ld_state.interp != NULL
   6294 	      || ld_state.file_type != dso_file_type)
   6295 	    nphdr += 2;
   6296 	}
   6297 
   6298       segment = ld_state.output_segments;
   6299       while (segment != NULL)
   6300 	{
   6301 	  struct output_rule *orule;
   6302 	  bool first_section = true;
   6303 	  XElf_Off nobits_size = 0;
   6304 	  XElf_Off memsize = 0;
   6305 
   6306 	  /* The minimum alignment is a page size.  */
   6307 	  segment->align = ld_state.pagesize;
   6308 
   6309 	  for (orule = segment->output_rules; orule != NULL;
   6310 	       orule = orule->next)
   6311 	    if (orule->tag == output_section)
   6312 	      {
   6313 		/* See whether this output rule corresponds to the next
   6314 		   section.  Yes, this is a pointer comparison.  */
   6315 		if (ld_state.allsections[nsec]->name
   6316 		    != orule->val.section.name)
   6317 		  /* No, ignore this output rule.  */
   6318 		  continue;
   6319 
   6320 		/* We assign addresses only in segments which are actually
   6321 		   loaded.  */
   6322 		if (segment->mode != 0)
   6323 		  {
   6324 		    /* Adjust the offset of the input sections.  */
   6325 		    struct scninfo *isect;
   6326 		    struct scninfo *first;
   6327 
   6328 		    isect = first = ld_state.allsections[nsec]->last;
   6329 		    if (isect != NULL)
   6330 		      do
   6331 			isect->offset += addr;
   6332 		      while ((isect = isect->next) != first);
   6333 
   6334 		    /* Set the address of current section.  */
   6335 		    shdr->sh_addr = addr;
   6336 
   6337 		    /* Write the result back.  */
   6338 		    (void) xelf_update_shdr (scn, shdr);
   6339 
   6340 		    /* Remember the address.  */
   6341 		    ld_state.allsections[nsec]->addr = addr;
   6342 
   6343 		    /* Handle TLS sections.  */
   6344 		    if (unlikely (shdr->sh_flags & SHF_TLS))
   6345 		      {
   6346 			if (tls_start > addr)
   6347 			  {
   6348 			    tls_start = addr;
   6349 			    tls_offset = shdr->sh_offset;
   6350 			  }
   6351 			if (tls_end < addr + shdr->sh_size)
   6352 			  tls_end = addr + shdr->sh_size;
   6353 			if (shdr->sh_type != SHT_NOBITS)
   6354 			  tls_filesize += shdr->sh_size;
   6355 			if (shdr->sh_addralign > tls_align)
   6356 			  tls_align = shdr->sh_addralign;
   6357 		      }
   6358 		  }
   6359 
   6360 		if (first_section)
   6361 		  {
   6362 		    /* The first segment starts at offset zero.  */
   6363 		    if (segment == ld_state.output_segments)
   6364 		      {
   6365 			segment->offset = 0;
   6366 			segment->addr = addr - shdr->sh_offset;
   6367 		      }
   6368 		    else
   6369 		      {
   6370 			segment->offset = shdr->sh_offset;
   6371 			segment->addr = addr;
   6372 		      }
   6373 
   6374 		    /* Determine the maximum alignment requirement.  */
   6375 		    segment->align = MAX (segment->align, shdr->sh_addralign);
   6376 
   6377 		    first_section = false;
   6378 		  }
   6379 
   6380 		/* NOBITS TLS sections are not laid out in address space
   6381 		   along with the other sections.  */
   6382 		if (shdr->sh_type != SHT_NOBITS
   6383 		    || (shdr->sh_flags & SHF_TLS) == 0)
   6384 		  {
   6385 		    memsize = (shdr->sh_offset - segment->offset
   6386 			       + shdr->sh_size);
   6387 		    if (nobits_size != 0 && shdr->sh_type != SHT_NOTE)
   6388 		      error (EXIT_FAILURE, 0, gettext ("\
   6389 internal error: non-nobits section follows nobits section"));
   6390 		    if (shdr->sh_type == SHT_NOBITS)
   6391 		      nobits_size += shdr->sh_size;
   6392 		  }
   6393 
   6394 		/* Determine the new address which is computed using
   6395 		   the difference of the offsets on the sections.  Note
   6396 		   that this assumes that the sections following each
   6397 		   other in the section header table are also
   6398 		   consecutive in the file.  This is true here because
   6399 		   libelf constructs files this way.  */
   6400 		XElf_Off oldoff = shdr->sh_offset;
   6401 
   6402 		if (++nsec >= ld_state.nallsections)
   6403 		  break;
   6404 
   6405 		scn = elf_getscn (ld_state.outelf,
   6406 				  ld_state.allsections[nsec]->scnidx);
   6407 		xelf_getshdr (scn, shdr);
   6408 		assert (shdr != NULL);
   6409 
   6410 		/* This is the new address resulting from the offsets
   6411 		   in the file.  */
   6412 		assert (oldoff <= shdr->sh_offset);
   6413 		addr += shdr->sh_offset - oldoff;
   6414 	      }
   6415 	    else
   6416 	      {
   6417 		assert (orule->tag == output_assignment);
   6418 
   6419 		if (strcmp (orule->val.assignment->variable, ".") == 0)
   6420 		  /* This is a change of the address.  */
   6421 		  addr = eval_expression (orule->val.assignment->expression,
   6422 					  addr);
   6423 		else if (orule->val.assignment->sym != NULL)
   6424 		  {
   6425 		    /* This symbol is used.  Update the symbol table
   6426 		       entry.  */
   6427 		    XElf_Sym_vardef (sym);
   6428 		    size_t idx;
   6429 
   6430 		    /* Note that we do not have to use
   6431 		       xelf_getsymshndx since we only update the
   6432 		       symbol address, not the section
   6433 		       information.  */
   6434 		    idx = dblindirect[orule->val.assignment->sym->outsymidx];
   6435 		    xelf_getsym (symdata, idx, sym);
   6436 		    sym->st_value = addr;
   6437 		    (void) xelf_update_sym (symdata, idx, sym);
   6438 
   6439 		    idx = orule->val.assignment->sym->outdynsymidx;
   6440 		    if (idx != 0)
   6441 		      {
   6442 			assert (dynsymdata != NULL);
   6443 			xelf_getsym (dynsymdata, idx, sym);
   6444 			sym->st_value = addr;
   6445 			(void) xelf_update_sym (dynsymdata, idx, sym);
   6446 		      }
   6447 		  }
   6448 	      }
   6449 
   6450 	  /* Store the segment parameter for loadable segments.  */
   6451 	  if (segment->mode != 0)
   6452 	    {
   6453 	      xelf_getphdr_ptr (ld_state.outelf, nphdr, phdr);
   6454 
   6455 	      phdr->p_type = PT_LOAD;
   6456 	      phdr->p_offset = segment->offset;
   6457 	      phdr->p_vaddr = segment->addr;
   6458 	      phdr->p_paddr = phdr->p_vaddr;
   6459 	      phdr->p_filesz = memsize - nobits_size;
   6460 	      phdr->p_memsz = memsize;
   6461 	      phdr->p_flags = segment->mode;
   6462 	      phdr->p_align = segment->align;
   6463 
   6464 	      (void) xelf_update_phdr (ld_state.outelf, nphdr, phdr);
   6465 	      ++nphdr;
   6466 	    }
   6467 
   6468 	  segment = segment->next;
   6469 	}
   6470 
   6471       /* Create the other program header entries.  */
   6472       xelf_getehdr (ld_state.outelf, ehdr);
   6473       assert (ehdr != NULL);
   6474 
   6475       /* Add the TLS information.  */
   6476       if (ld_state.need_tls)
   6477 	{
   6478 	  xelf_getphdr_ptr (ld_state.outelf, nphdr, phdr);
   6479 	  phdr->p_type = PT_TLS;
   6480 	  phdr->p_offset = tls_offset;
   6481 	  phdr->p_vaddr = tls_start;
   6482 	  phdr->p_paddr = tls_start;
   6483 	  phdr->p_filesz = tls_filesize;
   6484 	  phdr->p_memsz = tls_end - tls_start;
   6485 	  phdr->p_flags = PF_R;
   6486 	  phdr->p_align = tls_align;
   6487 	  ld_state.tls_tcb = tls_end;
   6488 	  ld_state.tls_start = tls_start;
   6489 
   6490 	  (void) xelf_update_phdr (ld_state.outelf, nphdr, phdr);
   6491 	  ++nphdr;
   6492 	}
   6493 
   6494       /* Add the stack information.  */
   6495       xelf_getphdr_ptr (ld_state.outelf, nphdr, phdr);
   6496       phdr->p_type = PT_GNU_STACK;
   6497       phdr->p_offset = 0;
   6498       phdr->p_vaddr = 0;
   6499       phdr->p_paddr = 0;
   6500       phdr->p_filesz = 0;
   6501       phdr->p_memsz = 0;
   6502       phdr->p_flags = (PF_R | PF_W
   6503 		       | (ld_state.execstack == execstack_true ? PF_X : 0));
   6504       phdr->p_align = xelf_fsize (ld_state.outelf, ELF_T_ADDR, 1);
   6505 
   6506       (void) xelf_update_phdr (ld_state.outelf, nphdr, phdr);
   6507       ++nphdr;
   6508 
   6509 
   6510       /* Adjust the addresses in the address fields of the symbol
   6511 	 records according to the load addresses of the sections.  */
   6512       if (ld_state.need_symtab)
   6513 	for (cnt = 1; cnt < nsym; ++cnt)
   6514 	  {
   6515 	    XElf_Sym_vardef (sym);
   6516 	    Elf32_Word shndx;
   6517 
   6518 	    xelf_getsymshndx (symdata, xndxdata, cnt, sym, shndx);
   6519 	    assert (sym != NULL);
   6520 
   6521 	    if (sym->st_shndx != SHN_XINDEX)
   6522 	      shndx = sym->st_shndx;
   6523 
   6524 	    if ((shndx > SHN_UNDEF && shndx < SHN_LORESERVE)
   6525 		|| shndx > SHN_HIRESERVE)
   6526 	      {
   6527 		/* Note we subtract 1 from the section index since ALLSECTIONS
   6528 		   does not store the dummy section with offset zero.  */
   6529 		sym->st_value += ld_state.allsections[shndx - 1]->addr;
   6530 
   6531 		/* We don't have to use 'xelf_update_symshndx' since the
   6532 		   section number doesn't change.  */
   6533 		(void) xelf_update_sym (symdata, cnt, sym);
   6534 	      }
   6535 	  }
   6536 
   6537       if (ld_state.need_dynsym)
   6538 	for (cnt = 1; cnt < nsym_dyn; ++cnt)
   6539 	  {
   6540 	    XElf_Sym_vardef (sym);
   6541 
   6542 	    xelf_getsym (dynsymdata, cnt, sym);
   6543 	    assert (sym != NULL);
   6544 
   6545 	    if (sym->st_shndx > SHN_UNDEF && sym->st_shndx < SHN_LORESERVE)
   6546 	      {
   6547 		/* Note we subtract 1 from the section index since ALLSECTIONS
   6548 		   does not store the dummy section with offset zero.  */
   6549 		sym->st_value += ld_state.allsections[sym->st_shndx - 1]->addr;
   6550 
   6551 		/* We don't have to use 'xelf_update_symshndx' since the
   6552 		   section number doesn't change.  */
   6553 		(void) xelf_update_sym (dynsymdata, cnt, sym);
   6554 	      }
   6555 	  }
   6556 
   6557       /* Now is a good time to determine the values of all the symbols
   6558 	 we encountered.  */
   6559       // XXX This loop is very inefficient.  The hash tab iterator also
   6560       // returns all symbols in DSOs.
   6561       struct symbol *se;
   6562       void *p = NULL;
   6563       while ((se = ld_symbol_tab_iterate (&ld_state.symbol_tab, &p)) != NULL)
   6564 	if (! se->in_dso)
   6565 	  {
   6566 	    XElf_Sym_vardef (sym);
   6567 
   6568 	    addr = 0;
   6569 
   6570 	    if (se->outdynsymidx != 0)
   6571 	      {
   6572 		xelf_getsym (dynsymdata, se->outdynsymidx, sym);
   6573 		assert (sym != NULL);
   6574 		addr = sym->st_value;
   6575 	      }
   6576 	    else if (se->outsymidx != 0)
   6577 	      {
   6578 		assert (dblindirect[se->outsymidx] != 0);
   6579 		xelf_getsym (symdata, dblindirect[se->outsymidx], sym);
   6580 		assert (sym != NULL);
   6581 		addr = sym->st_value;
   6582 	      }
   6583 	    else
   6584 	      abort ();
   6585 
   6586 	    se->merge.value = addr;
   6587 	  }
   6588 
   6589       /* Complete the header of the .rel.dyn/.rela.dyn section.  Point
   6590 	 to the symbol table.  The sh_info field is left zero since
   6591 	 there is no specific section the contained relocations are
   6592 	 for.  */
   6593       if (ld_state.reldynscnidx != 0)
   6594 	{
   6595 	  assert (ld_state.dynsymscnidx != 0);
   6596 	  scn = elf_getscn (ld_state.outelf, ld_state.reldynscnidx);
   6597 	  xelf_getshdr (scn, shdr);
   6598 	  assert (shdr != NULL);
   6599 
   6600 	  shdr->sh_link = ld_state.dynsymscnidx;
   6601 
   6602 	  (void) xelf_update_shdr (scn, shdr);
   6603 	}
   6604 
   6605       /* Fill in the dynamic segment/section.  */
   6606       if (dynamically_linked_p ())
   6607 	{
   6608 	  Elf_Scn *outscn;
   6609 
   6610 	  int idx = 0;
   6611 	  if (ld_state.interp != NULL || ld_state.file_type != dso_file_type)
   6612 	    {
   6613 	      assert (ld_state.interpscnidx != 0);
   6614 	      xelf_getshdr (elf_getscn (ld_state.outelf,
   6615 					ld_state.interpscnidx), shdr);
   6616 	      assert (shdr != NULL);
   6617 
   6618 	      xelf_getphdr_ptr (ld_state.outelf, idx, phdr);
   6619 	      phdr->p_type = PT_PHDR;
   6620 	      phdr->p_offset = ehdr->e_phoff;
   6621 	      phdr->p_vaddr = ld_state.output_segments->addr + phdr->p_offset;
   6622 	      phdr->p_paddr = phdr->p_vaddr;
   6623 	      phdr->p_filesz = ehdr->e_phnum * ehdr->e_phentsize;
   6624 	      phdr->p_memsz = phdr->p_filesz;
   6625 	      phdr->p_flags = 0;	/* No need to set PF_R or so.  */
   6626 	      phdr->p_align = xelf_fsize (ld_state.outelf, ELF_T_ADDR, 1);
   6627 
   6628 	      (void) xelf_update_phdr (ld_state.outelf, idx, phdr);
   6629 	      ++idx;
   6630 
   6631 	      /* The interpreter string.  */
   6632 	      xelf_getphdr_ptr (ld_state.outelf, idx, phdr);
   6633 	      phdr->p_type = PT_INTERP;
   6634 	      phdr->p_offset = shdr->sh_offset;
   6635 	      phdr->p_vaddr = shdr->sh_addr;
   6636 	      phdr->p_paddr = phdr->p_vaddr;
   6637 	      phdr->p_filesz = shdr->sh_size;
   6638 	      phdr->p_memsz = phdr->p_filesz;
   6639 	      phdr->p_flags = 0;	/* No need to set PF_R or so.  */
   6640 	      phdr->p_align = 1;	/* It's a string.  */
   6641 
   6642 	      (void) xelf_update_phdr (ld_state.outelf, idx, phdr);
   6643 	      ++idx;
   6644 	    }
   6645 
   6646 	  /* The pointer to the dynamic section.  We this we need to
   6647 	     get the information for the dynamic section first.  */
   6648 	  assert (ld_state.dynamicscnidx);
   6649 	  outscn = elf_getscn (ld_state.outelf, ld_state.dynamicscnidx);
   6650 	  xelf_getshdr (outscn, shdr);
   6651 	  assert (shdr != NULL);
   6652 
   6653 	  xelf_getphdr_ptr (ld_state.outelf, idx, phdr);
   6654 	  phdr->p_type = PT_DYNAMIC;
   6655 	  phdr->p_offset = shdr->sh_offset;
   6656 	  phdr->p_vaddr = shdr->sh_addr;
   6657 	  phdr->p_paddr = phdr->p_vaddr;
   6658 	  phdr->p_filesz = shdr->sh_size;
   6659 	  phdr->p_memsz = phdr->p_filesz;
   6660 	  phdr->p_flags = 0;		/* No need to set PF_R or so.  */
   6661 	  phdr->p_align = shdr->sh_addralign;
   6662 
   6663 	  (void) xelf_update_phdr (ld_state.outelf, idx, phdr);
   6664 
   6665 	  /* Fill in the reference to the .dynstr section.  */
   6666 	  assert (ld_state.dynstrscnidx != 0);
   6667 	  shdr->sh_link = ld_state.dynstrscnidx;
   6668 	  (void) xelf_update_shdr (outscn, shdr);
   6669 
   6670 	  /* And fill the remaining entries.  */
   6671 	  Elf_Data *dyndata = elf_getdata (outscn, NULL);
   6672 	  assert (dyndata != NULL);
   6673 
   6674 	  /* Add the DT_NEEDED entries.  */
   6675 	  if (ld_state.ndsofiles > 0)
   6676 	    {
   6677 	      struct usedfiles *runp = ld_state.dsofiles->next;
   6678 
   6679 	      do
   6680 		if (runp->used || !runp->as_needed)
   6681 		  {
   6682 		    /* Add the position-dependent flag if necessary.  */
   6683 		    if (runp->lazyload)
   6684 		      new_dynamic_entry (dyndata, ld_state.ndynamic_filled++,
   6685 					 DT_POSFLAG_1, DF_P1_LAZYLOAD);
   6686 
   6687 		    new_dynamic_entry (dyndata, ld_state.ndynamic_filled++,
   6688 				       DT_NEEDED,
   6689 				       ebl_strtaboffset (runp->sonameent));
   6690 		  }
   6691 	      while ((runp = runp->next) != ld_state.dsofiles->next);
   6692 	    }
   6693 
   6694 	  /* We can finish the DT_RUNPATH/DT_RPATH entries now.  */
   6695 	  if (ld_state.rxxpath_strent != NULL)
   6696 	    new_dynamic_entry (dyndata, ld_state.ndynamic_filled++,
   6697 			       ld_state.rxxpath_tag,
   6698 			       ebl_strtaboffset (ld_state.rxxpath_strent));
   6699 
   6700 	  /* Reference to initialization and finalization functions.  */
   6701 	  // XXX This code depends on symbol table being relocated.
   6702 	  if (ld_state.init_symbol != NULL)
   6703 	    {
   6704 	      XElf_Sym_vardef (sym);
   6705 
   6706 	      if (ld_state.need_symtab)
   6707 		xelf_getsym (symdata,
   6708 			     dblindirect[ld_state.init_symbol->outsymidx],
   6709 			     sym);
   6710 	      else
   6711 		xelf_getsym (dynsymdata, ld_state.init_symbol->outdynsymidx,
   6712 			     sym);
   6713 	      assert (sym != NULL);
   6714 
   6715 	      new_dynamic_entry (dyndata, ld_state.ndynamic_filled++,
   6716 				 DT_INIT, sym->st_value);
   6717 	    }
   6718 	  if (ld_state.fini_symbol != NULL)
   6719 	    {
   6720 	      XElf_Sym_vardef (sym);
   6721 
   6722 	      if (ld_state.need_symtab)
   6723 		xelf_getsym (symdata,
   6724 			     dblindirect[ld_state.fini_symbol->outsymidx],
   6725 			     sym);
   6726 	      else
   6727 		xelf_getsym (dynsymdata, ld_state.fini_symbol->outdynsymidx,
   6728 			     sym);
   6729 	      assert (sym != NULL);
   6730 
   6731 	      new_dynamic_entry (dyndata, ld_state.ndynamic_filled++,
   6732 				 DT_FINI, sym->st_value);
   6733 	    }
   6734 	  // XXX Support init,fini,preinit arrays
   6735 
   6736 	  /* The hash table which comes with dynamic symbol table.  */
   6737 	  xelf_getshdr (elf_getscn (ld_state.outelf, ld_state.hashscnidx),
   6738 			shdr);
   6739 	  assert (shdr != NULL);
   6740 	  new_dynamic_entry (dyndata, ld_state.ndynamic_filled++, DT_HASH,
   6741 			     shdr->sh_addr);
   6742 
   6743 	  /* Reference to the symbol table section.  */
   6744 	  assert (ld_state.dynsymscnidx != 0);
   6745 	  xelf_getshdr (elf_getscn (ld_state.outelf, ld_state.dynsymscnidx),
   6746 			shdr);
   6747 	  assert (shdr != NULL);
   6748 	  new_dynamic_entry (dyndata, ld_state.ndynamic_filled++, DT_SYMTAB,
   6749 			     shdr->sh_addr);
   6750 
   6751 	  new_dynamic_entry (dyndata, ld_state.ndynamic_filled++, DT_SYMENT,
   6752 			     xelf_fsize (ld_state.outelf, ELF_T_SYM, 1));
   6753 
   6754 	  /* And the string table which comes with it.  */
   6755 	  xelf_getshdr (elf_getscn (ld_state.outelf, ld_state.dynstrscnidx),
   6756 			shdr);
   6757 	  assert (shdr != NULL);
   6758 	  new_dynamic_entry (dyndata, ld_state.ndynamic_filled++, DT_STRTAB,
   6759 			     shdr->sh_addr);
   6760 
   6761 	  new_dynamic_entry (dyndata, ld_state.ndynamic_filled++, DT_STRSZ,
   6762 			     shdr->sh_size);
   6763 
   6764 	  /* Add the entries related to the .plt.  */
   6765 	  if (ld_state.nplt > 0)
   6766 	    {
   6767 	      // XXX Make this work if there is no PLT
   6768 	      xelf_getshdr (elf_getscn (ld_state.outelf,
   6769 					ld_state.gotpltscnidx), shdr);
   6770 	      assert (shdr != NULL);
   6771 	      new_dynamic_entry (dyndata, ld_state.ndynamic_filled++,
   6772 				 // XXX This should probably be machine
   6773 				 // dependent.
   6774 				 DT_PLTGOT, shdr->sh_addr);
   6775 
   6776 	      xelf_getshdr (elf_getscn (ld_state.outelf,
   6777 					ld_state.pltrelscnidx), shdr);
   6778 	      assert (shdr != NULL);
   6779 	      new_dynamic_entry (dyndata, ld_state.ndynamic_filled++,
   6780 				 DT_PLTRELSZ, shdr->sh_size);
   6781 
   6782 	      new_dynamic_entry (dyndata, ld_state.ndynamic_filled++,
   6783 				 DT_JMPREL, shdr->sh_addr);
   6784 
   6785 	      new_dynamic_entry (dyndata, ld_state.ndynamic_filled++,
   6786 				 DT_PLTREL, REL_TYPE (statep));
   6787 	    }
   6788 
   6789 	  if (ld_state.relsize_total > 0)
   6790 	    {
   6791 	      int rel = REL_TYPE (statep);
   6792 	      xelf_getshdr (elf_getscn (ld_state.outelf,
   6793 					ld_state.reldynscnidx), shdr);
   6794 	      assert (shdr != NULL);
   6795 	      new_dynamic_entry (dyndata, ld_state.ndynamic_filled++,
   6796 				 rel, shdr->sh_addr);
   6797 
   6798 	      /* Trick ahead.  Use arithmetic to get the right tag.
   6799 		 We check the validity of this assumption in the asserts.  */
   6800 	      assert (DT_RELASZ - DT_RELA == 1);
   6801 	      assert (DT_RELSZ - DT_REL == 1);
   6802 	      new_dynamic_entry (dyndata, ld_state.ndynamic_filled++,
   6803 				 rel + 1, shdr->sh_size);
   6804 
   6805 	      /* Similar for the entry size tag.  */
   6806 	      assert (DT_RELAENT - DT_RELA == 2);
   6807 	      assert (DT_RELENT - DT_REL == 2);
   6808 	      new_dynamic_entry (dyndata, ld_state.ndynamic_filled++,
   6809 				 rel + 2,
   6810 				 rel == DT_REL
   6811 				 ? xelf_fsize (ld_state.outelf, ELF_T_REL, 1)
   6812 				 : xelf_fsize (ld_state.outelf, ELF_T_RELA,
   6813 					       1));
   6814 	    }
   6815 
   6816 	  if (ld_state.verneedscnidx != 0)
   6817 	    {
   6818 	      xelf_getshdr (elf_getscn (ld_state.outelf,
   6819 					ld_state.verneedscnidx), shdr);
   6820 	      assert (shdr != NULL);
   6821 	      new_dynamic_entry (dyndata, ld_state.ndynamic_filled++,
   6822 				 DT_VERNEED, shdr->sh_addr);
   6823 
   6824 	      new_dynamic_entry (dyndata, ld_state.ndynamic_filled++,
   6825 				 DT_VERNEEDNUM, ld_state.nverdeffile);
   6826 	    }
   6827 
   6828 	  if (ld_state.versymscnidx != 0)
   6829 	    {
   6830 	      xelf_getshdr (elf_getscn (ld_state.outelf,
   6831 					ld_state.versymscnidx), shdr);
   6832 	      assert (shdr != NULL);
   6833 	      new_dynamic_entry (dyndata, ld_state.ndynamic_filled++,
   6834 				 DT_VERSYM, shdr->sh_addr);
   6835 	    }
   6836 
   6837 	  /* We always create the DT_DEBUG entry.  */
   6838 	  new_dynamic_entry (dyndata, ld_state.ndynamic_filled++, DT_DEBUG, 0);
   6839 	  assert (ld_state.ndynamic_filled < ld_state.ndynamic);
   6840 
   6841 	  /* Add the flag words if necessary.  */
   6842 	  if (ld_state.dt_flags != 0)
   6843 	    new_dynamic_entry (dyndata, ld_state.ndynamic_filled++, DT_FLAGS,
   6844 			       ld_state.dt_flags);
   6845 
   6846 	  /* Create entry for the DT_FLAGS_1 flag.  */
   6847 	  if (ld_state.dt_flags_1 != 0)
   6848 	    new_dynamic_entry (dyndata, ld_state.ndynamic_filled++,
   6849 			       DT_FLAGS_1, ld_state.dt_flags_1);
   6850 
   6851 	  /* Create entry for the DT_FEATURE_1 flag.  */
   6852 	  if (ld_state.dt_feature_1 != 0)
   6853 	    new_dynamic_entry (dyndata, ld_state.ndynamic_filled++,
   6854 			       DT_FEATURE_1, ld_state.dt_feature_1);
   6855 
   6856 	  assert (ld_state.ndynamic_filled <= ld_state.ndynamic);
   6857 	}
   6858     }
   6859 
   6860 
   6861   // XXX The following code isn't nice.  We use two different
   6862   // mechanisms to handle relocations, one for relocatable files, one
   6863   // for executables and DSOs.  Maybe this is the best method but also
   6864   // maybe it can be somewhat unified.
   6865 
   6866   /* Now that we created the symbol table we can add the reference to
   6867      it in the sh_link field of the section headers of the relocation
   6868      sections.  */
   6869   while (rellist != NULL)
   6870     {
   6871       assert (ld_state.file_type == relocatable_file_type);
   6872       Elf_Scn *outscn;
   6873 
   6874       outscn = elf_getscn (ld_state.outelf, rellist->scnidx);
   6875       xelf_getshdr (outscn, shdr);
   6876       /* This must not fail since we did it before.  */
   6877       assert (shdr != NULL);
   6878 
   6879       /* Remember the symbol table which belongs to the relocation section.  */
   6880       shdr->sh_link = ld_state.symscnidx;
   6881 
   6882       /* And the reference to the section which is relocated by this
   6883 	 relocation section.  We use the info from the first input
   6884 	 section but all records should have the same information.  */
   6885       shdr->sh_info =
   6886 	rellist->scninfo->fileinfo->scninfo[SCNINFO_SHDR (rellist->scninfo->shdr).sh_info].outscnndx;
   6887 
   6888 
   6889       /* Perform the actual relocations.  We only have to adjust
   6890 	 offsets and symbol indices.  */
   6891       RELOCATE_SECTION (statep, outscn, rellist->scninfo, dblindirect);
   6892 
   6893       /* Store the changes.  */
   6894       (void) xelf_update_shdr (outscn, shdr);
   6895 
   6896       /* Up to the next relocation section.  */
   6897       rellist = rellist->next;
   6898     }
   6899 
   6900   if (ld_state.rellist != NULL)
   6901     {
   6902       assert (ld_state.file_type != relocatable_file_type);
   6903       /* Create the relocations for the output file.  */
   6904       CREATE_RELOCATIONS (statep, dblindirect);
   6905     }
   6906 
   6907 
   6908   /* We need the ELF header once more.  */
   6909   xelf_getehdr (ld_state.outelf, ehdr);
   6910   assert (ehdr != NULL);
   6911 
   6912   /* Set the section header string table index.  */
   6913   if (likely (shstrtab_ndx < SHN_HIRESERVE)
   6914       && likely (shstrtab_ndx != SHN_XINDEX))
   6915     ehdr->e_shstrndx = shstrtab_ndx;
   6916   else
   6917     {
   6918       /* We have to put the section index in the sh_link field of the
   6919 	 zeroth section header.  */
   6920       Elf_Scn *scn = elf_getscn (ld_state.outelf, 0);
   6921 
   6922       xelf_getshdr (scn, shdr);
   6923       if (unlikely (shdr == NULL))
   6924 	error (EXIT_FAILURE, 0,
   6925 	       gettext ("cannot get header of 0th section: %s"),
   6926 	       elf_errmsg (-1));
   6927 
   6928       shdr->sh_link = shstrtab_ndx;
   6929 
   6930       (void) xelf_update_shdr (scn, shdr);
   6931 
   6932       ehdr->e_shstrndx = SHN_XINDEX;
   6933     }
   6934 
   6935   if (ld_state.file_type != relocatable_file_type)
   6936     /* DSOs and executables have to define the entry point symbol.  */
   6937     ehdr->e_entry = find_entry_point ();
   6938 
   6939   if (unlikely (xelf_update_ehdr (ld_state.outelf, ehdr) == 0))
   6940     error (EXIT_FAILURE, 0,
   6941 	   gettext ("cannot update ELF header: %s"),
   6942 	   elf_errmsg (-1));
   6943 
   6944 
   6945   /* Free the data which we don't need anymore.  */
   6946   free (ld_state.dblindirect);
   6947 
   6948 
   6949   /* Finalize the .plt section and what else belongs to it.  */
   6950   FINALIZE_PLT (statep, nsym, nsym_local, ndxtosym);
   6951 
   6952 
   6953   /* Finally, if we have to compute the build ID.  */
   6954   if (ld_state.build_id != NULL)
   6955     compute_build_id ();
   6956 
   6957 
   6958   /* We don't need the map from the symbol table index to the symbol
   6959      structure anymore.  */
   6960   free (ndxtosym);
   6961 
   6962   return 0;
   6963 }
   6964 
   6965 
   6966 /* This is a function which must be specified in all backends.  */
   6967 static void
   6968 ld_generic_relocate_section (struct ld_state *statep, Elf_Scn *outscn,
   6969 			     struct scninfo *firstp,
   6970 			     const Elf32_Word *dblindirect)
   6971 {
   6972   error (EXIT_FAILURE, 0, gettext ("\
   6973 linker backend didn't specify function to relocate section"));
   6974   /* NOTREACHED */
   6975 }
   6976 
   6977 
   6978 /* Finalize the output file.  */
   6979 static int
   6980 ld_generic_finalize (struct ld_state *statep)
   6981 {
   6982   /* Write out the ELF file data.  */
   6983   if (elf_update (ld_state.outelf, ELF_C_WRITE) == -1)
   6984       error (EXIT_FAILURE, 0, gettext ("while writing output file: %s"),
   6985 	     elf_errmsg (-1));
   6986 
   6987   /* Free the resources.  */
   6988   if (elf_end (ld_state.outelf) != 0)
   6989     error (EXIT_FAILURE, 0, gettext ("while finishing output file: %s"),
   6990 	   elf_errmsg (-1));
   6991 
   6992   /* Get the file status of the temporary file.  */
   6993   struct stat temp_st;
   6994   if (fstat (ld_state.outfd, &temp_st) != 0)
   6995     error (EXIT_FAILURE, errno, gettext ("cannot stat output file"));
   6996 
   6997   /* Now it's time to rename the file.  Remove an old existing file
   6998      first.  */
   6999   if (rename (ld_state.tempfname, ld_state.outfname) != 0)
   7000     /* Something went wrong.  */
   7001     error (EXIT_FAILURE, errno, gettext ("cannot rename output file"));
   7002 
   7003   /* Make sure the output file is really the one we created.  */
   7004   struct stat new_st;
   7005   if (stat (ld_state.outfname, &new_st) != 0
   7006       || new_st.st_ino != temp_st.st_ino
   7007       || new_st.st_dev != temp_st.st_dev)
   7008     {
   7009       /* Wow, somebody overwrote the output file, probably some intruder.  */
   7010       unlink (ld_state.outfname);
   7011       error (EXIT_FAILURE, 0, gettext ("\
   7012 WARNING: temporary output file overwritten before linking finished"));
   7013     }
   7014 
   7015   /* Close the file descriptor.  */
   7016   (void) close (ld_state.outfd);
   7017 
   7018   /* Signal the cleanup handler that the file is correctly created.  */
   7019   ld_state.tempfname = NULL;
   7020 
   7021   return 0;
   7022 }
   7023 
   7024 
   7025 static bool
   7026 ld_generic_special_section_number_p (struct ld_state *statep, size_t number)
   7027 {
   7028   /* There are no special section numbers in the gABI.  */
   7029   return false;
   7030 }
   7031 
   7032 
   7033 static bool
   7034 ld_generic_section_type_p (struct ld_state *statep, GElf_Word type)
   7035 {
   7036   if (type < SHT_NUM
   7037       /* XXX Enable the following two when implemented.  */
   7038       // || type == SHT_GNU_LIBLIST
   7039       // || type == SHT_CHECKSUM
   7040       /* XXX Eventually include SHT_SUNW_move, SHT_SUNW_COMDAT, and
   7041 	 SHT_SUNW_syminfo.  */
   7042       || (type >= SHT_GNU_verdef && type <= SHT_GNU_versym))
   7043     return true;
   7044 
   7045   return false;
   7046 }
   7047 
   7048 
   7049 static XElf_Xword
   7050 ld_generic_dynamic_section_flags (struct ld_state *statep)
   7051 {
   7052   /* By default the .dynamic section is writable (and is of course
   7053      loaded).  Few architecture differ from this.  */
   7054   return SHF_ALLOC | SHF_WRITE;
   7055 }
   7056 
   7057 
   7058 static void
   7059 ld_generic_initialize_plt (struct ld_state *statep, Elf_Scn *scn)
   7060 {
   7061   /* This cannot be implemented generally.  There should have been a
   7062      machine dependent implementation and we should never have arrived
   7063      here.  */
   7064   error (EXIT_FAILURE, 0, gettext ("no machine specific '%s' implementation"),
   7065 	 "initialize_plt");
   7066 }
   7067 
   7068 
   7069 static void
   7070 ld_generic_initialize_pltrel (struct ld_state *statep, Elf_Scn *scn)
   7071 {
   7072   /* This cannot be implemented generally.  There should have been a
   7073      machine dependent implementation and we should never have arrived
   7074      here.  */
   7075   error (EXIT_FAILURE, 0, gettext ("no machine specific '%s' implementation"),
   7076 	 "initialize_pltrel");
   7077 }
   7078 
   7079 
   7080 static void
   7081 ld_generic_initialize_got (struct ld_state *statep, Elf_Scn *scn)
   7082 {
   7083   /* This cannot be implemented generally.  There should have been a
   7084      machine dependent implementation and we should never have arrived
   7085      here.  */
   7086   error (EXIT_FAILURE, 0, gettext ("no machine specific '%s' implementation"),
   7087 	 "initialize_got");
   7088 }
   7089 
   7090 
   7091 static void
   7092 ld_generic_initialize_gotplt (struct ld_state *statep, Elf_Scn *scn)
   7093 {
   7094   /* This cannot be implemented generally.  There should have been a
   7095      machine dependent implementation and we should never have arrived
   7096      here.  */
   7097   error (EXIT_FAILURE, 0, gettext ("no machine specific '%s' implementation"),
   7098 	 "initialize_gotplt");
   7099 }
   7100 
   7101 
   7102 static void
   7103 ld_generic_finalize_plt (struct ld_state *statep, size_t nsym, size_t nsym_dyn,
   7104 			 struct symbol **ndxtosymp)
   7105 {
   7106   /* By default we assume that nothing has to be done.  */
   7107 }
   7108 
   7109 
   7110 static int
   7111 ld_generic_rel_type (struct ld_state *statep)
   7112 {
   7113   /* This cannot be implemented generally.  There should have been a
   7114      machine dependent implementation and we should never have arrived
   7115      here.  */
   7116   error (EXIT_FAILURE, 0, gettext ("no machine specific '%s' implementation"),
   7117 	 "rel_type");
   7118   /* Just to keep the compiler calm.  */
   7119   return 0;
   7120 }
   7121 
   7122 
   7123 static void
   7124 ld_generic_count_relocations (struct ld_state *statep, struct scninfo *scninfo)
   7125 {
   7126   /* This cannot be implemented generally.  There should have been a
   7127      machine dependent implementation and we should never have arrived
   7128      here.  */
   7129   error (EXIT_FAILURE, 0, gettext ("no machine specific '%s' implementation"),
   7130 	 "count_relocations");
   7131 }
   7132 
   7133 
   7134 static void
   7135 ld_generic_create_relocations (struct ld_state *statep,
   7136 			       const Elf32_Word *dblindirect)
   7137 {
   7138   /* This cannot be implemented generally.  There should have been a
   7139      machine dependent implementation and we should never have arrived
   7140      here.  */
   7141   error (EXIT_FAILURE, 0, gettext ("no machine specific '%s' implementation"),
   7142 	 "create_relocations");
   7143 }
   7144