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