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