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