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
is_dso_p(int fd)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
print_file_name(FILE * s,struct usedfiles * fileinfo,int first_level,int newline)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
dynamically_linked_p(void)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
linked_from_dso_p(struct scninfo * scninfo,size_t symidx)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
ld_prepare_state(const char * emulation)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
check_for_duplicate2(struct usedfiles * newp,struct usedfiles * list)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
check_for_duplicate(struct usedfiles * newp)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
open_along_path2(struct usedfiles * fileinfo,struct pathelement * path)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
open_along_path(struct usedfiles * fileinfo)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
matching_group_comdat_scn(const XElf_Sym * sym,size_t shndx,struct usedfiles * fileinfo,struct symbol * oldp)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
check_type_and_size(const XElf_Sym * sym,struct usedfiles * fileinfo,struct symbol * oldp)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
check_definition(const XElf_Sym * sym,size_t shndx,size_t symidx,struct usedfiles * fileinfo,struct symbol * oldp)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 *
find_section_group(struct usedfiles * fileinfo,Elf32_Word shndx,Elf_Data ** datap)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
mark_section_group(struct usedfiles * fileinfo,Elf32_Word shndx,struct scninfo ** grpscnp)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
mark_section_used(struct scninfo * scninfo,Elf32_Word shndx,struct scninfo ** grpscnp)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
add_section(struct usedfiles * fileinfo,struct scninfo * scninfo)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
add_relocatable_file(struct usedfiles * fileinfo,GElf_Word secttype)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
ld_handle_filename_list(struct filename_list * fnames)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
open_elf(struct usedfiles * fileinfo,Elf * elf)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
add_whole_archive(struct usedfiles * fileinfo)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
extract_from_archive(struct usedfiles * fileinfo)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
file_process2(struct usedfiles * fileinfo)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
ld_generic_file_process(int fd,struct usedfiles * fileinfo,struct ld_state * statep,struct usedfiles ** nextp)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 **
ld_generic_lib_extensions(struct ld_state * statep)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
ld_generic_flag_unresolved(struct ld_state * statep)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
ld_generic_file_close(struct usedfiles * fileinfo,struct ld_state * statep)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
new_generated_scn(enum scn_kind kind,const char * name,int type,int flags,int entsize,int align)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
ld_generic_generate_sections(struct ld_state * statep)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
remove_tempfile(int status,void * arg)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
ld_generic_open_outfile(struct ld_state * statep,int machine,int klass,int data)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
compute_copy_reloc_offset(XElf_Shdr * shdr)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
compute_common_symbol_offset(XElf_Shdr * shdr)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
sort_sections_generic(void)2820 sort_sections_generic (void)
2821 {
2822 /* XXX TBI */
2823 abort ();
2824 }
2825
2826
2827 static int
match_section(const char * osectname,struct filemask_section_name * sectmask,struct scnhead ** scnhead,bool new_section,size_t segment_nr)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
sort_sections_lscript(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
ld_generic_create_sections(struct ld_state * statep)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
reduce_symbol_p(XElf_Sym * sym,struct Ebl_Strent * strent)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
eval_expression(struct expression * expr,XElf_Addr 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
optimal_bucket_size(Elf32_Word * hashcodes,size_t maxcnt,int optlevel)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
optimal_gnu_hash_size(Elf32_Word * hashcodes,size_t maxcnt,int optlevel,size_t * bitmask_nwords,size_t * shift,size_t * nbuckets)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
find_entry_point(void)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
fillin_special_symbol(struct symbol * symst,size_t scnidx,size_t nsym,Elf_Data * symdata,struct Ebl_Strtab * strtab)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
new_dynamic_entry(Elf_Data * data,int idx,XElf_Sxword tag,XElf_Addr val)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
allocate_version_names(struct usedfiles * runp,struct Ebl_Strtab * dynstrtab)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
create_verneed_data(XElf_Off offset,Elf_Data * verneeddata,struct usedfiles * runp,int * ntotal)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
sortfct_hashval(const void * p1,const void * p2)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
create_gnu_hash(size_t nsym_local,size_t nsym,size_t nsym_dyn,Elf32_Word * gnuhashcodes)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
create_hash(size_t nsym_local,size_t nsym,size_t nsym_dyn,Elf32_Word * hashcodes)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
create_build_id_section(Elf_Scn * scn)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
compute_hash_sum(void (* hashfct)(const void *,size_t,void *),void * ctx)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
compute_build_id(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
ld_generic_create_outfile(struct ld_state * statep)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
ld_generic_relocate_section(struct ld_state * statep,Elf_Scn * outscn,struct scninfo * firstp,const Elf32_Word * dblindirect)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
ld_generic_finalize(struct ld_state * statep)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
ld_generic_special_section_number_p(struct ld_state * statep,size_t number)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
ld_generic_section_type_p(struct ld_state * statep,GElf_Word type)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
ld_generic_dynamic_section_flags(struct ld_state * statep)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
ld_generic_initialize_plt(struct ld_state * statep,Elf_Scn * scn)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
ld_generic_initialize_pltrel(struct ld_state * statep,Elf_Scn * scn)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
ld_generic_initialize_got(struct ld_state * statep,Elf_Scn * scn)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
ld_generic_initialize_gotplt(struct ld_state * statep,Elf_Scn * scn)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
ld_generic_finalize_plt(struct ld_state * statep,size_t nsym,size_t nsym_dyn,struct symbol ** ndxtosymp)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
ld_generic_rel_type(struct ld_state * statep)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
ld_generic_count_relocations(struct ld_state * statep,struct scninfo * scninfo)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
ld_generic_create_relocations(struct ld_state * statep,const Elf32_Word * dblindirect)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 }
7141