* elfxx-target.h: Remove PTR cast.
[deliverable/binutils-gdb.git] / bfd / elflink.h
1 /* ELF linker support.
2 Copyright 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
3 Free Software Foundation, Inc.
4
5 This file is part of BFD, the Binary File Descriptor library.
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
20
21 /* ELF linker code. */
22
23 static bfd_boolean elf_link_add_object_symbols (bfd *, struct bfd_link_info *);
24 static bfd_boolean elf_link_add_archive_symbols (bfd *,
25 struct bfd_link_info *);
26 static bfd_boolean elf_finalize_dynstr (bfd *, struct bfd_link_info *);
27 static bfd_boolean elf_collect_hash_codes (struct elf_link_hash_entry *,
28 void *);
29 static bfd_boolean elf_section_ignore_discarded_relocs (asection *);
30
31 /* Given an ELF BFD, add symbols to the global hash table as
32 appropriate. */
33
34 bfd_boolean
35 elf_bfd_link_add_symbols (bfd *abfd, struct bfd_link_info *info)
36 {
37 switch (bfd_get_format (abfd))
38 {
39 case bfd_object:
40 return elf_link_add_object_symbols (abfd, info);
41 case bfd_archive:
42 return elf_link_add_archive_symbols (abfd, info);
43 default:
44 bfd_set_error (bfd_error_wrong_format);
45 return FALSE;
46 }
47 }
48 \f
49 /* Return TRUE iff this is a non-common, definition of a non-function symbol. */
50 static bfd_boolean
51 is_global_data_symbol_definition (bfd *abfd ATTRIBUTE_UNUSED,
52 Elf_Internal_Sym *sym)
53 {
54 /* Local symbols do not count, but target specific ones might. */
55 if (ELF_ST_BIND (sym->st_info) != STB_GLOBAL
56 && ELF_ST_BIND (sym->st_info) < STB_LOOS)
57 return FALSE;
58
59 /* Function symbols do not count. */
60 if (ELF_ST_TYPE (sym->st_info) == STT_FUNC)
61 return FALSE;
62
63 /* If the section is undefined, then so is the symbol. */
64 if (sym->st_shndx == SHN_UNDEF)
65 return FALSE;
66
67 /* If the symbol is defined in the common section, then
68 it is a common definition and so does not count. */
69 if (sym->st_shndx == SHN_COMMON)
70 return FALSE;
71
72 /* If the symbol is in a target specific section then we
73 must rely upon the backend to tell us what it is. */
74 if (sym->st_shndx >= SHN_LORESERVE && sym->st_shndx < SHN_ABS)
75 /* FIXME - this function is not coded yet:
76
77 return _bfd_is_global_symbol_definition (abfd, sym);
78
79 Instead for now assume that the definition is not global,
80 Even if this is wrong, at least the linker will behave
81 in the same way that it used to do. */
82 return FALSE;
83
84 return TRUE;
85 }
86
87 /* Search the symbol table of the archive element of the archive ABFD
88 whose archive map contains a mention of SYMDEF, and determine if
89 the symbol is defined in this element. */
90 static bfd_boolean
91 elf_link_is_defined_archive_symbol (bfd * abfd, carsym * symdef)
92 {
93 Elf_Internal_Shdr * hdr;
94 bfd_size_type symcount;
95 bfd_size_type extsymcount;
96 bfd_size_type extsymoff;
97 Elf_Internal_Sym *isymbuf;
98 Elf_Internal_Sym *isym;
99 Elf_Internal_Sym *isymend;
100 bfd_boolean result;
101
102 abfd = _bfd_get_elt_at_filepos (abfd, symdef->file_offset);
103 if (abfd == NULL)
104 return FALSE;
105
106 if (! bfd_check_format (abfd, bfd_object))
107 return FALSE;
108
109 /* If we have already included the element containing this symbol in the
110 link then we do not need to include it again. Just claim that any symbol
111 it contains is not a definition, so that our caller will not decide to
112 (re)include this element. */
113 if (abfd->archive_pass)
114 return FALSE;
115
116 /* Select the appropriate symbol table. */
117 if ((abfd->flags & DYNAMIC) == 0 || elf_dynsymtab (abfd) == 0)
118 hdr = &elf_tdata (abfd)->symtab_hdr;
119 else
120 hdr = &elf_tdata (abfd)->dynsymtab_hdr;
121
122 symcount = hdr->sh_size / sizeof (Elf_External_Sym);
123
124 /* The sh_info field of the symtab header tells us where the
125 external symbols start. We don't care about the local symbols. */
126 if (elf_bad_symtab (abfd))
127 {
128 extsymcount = symcount;
129 extsymoff = 0;
130 }
131 else
132 {
133 extsymcount = symcount - hdr->sh_info;
134 extsymoff = hdr->sh_info;
135 }
136
137 if (extsymcount == 0)
138 return FALSE;
139
140 /* Read in the symbol table. */
141 isymbuf = bfd_elf_get_elf_syms (abfd, hdr, extsymcount, extsymoff,
142 NULL, NULL, NULL);
143 if (isymbuf == NULL)
144 return FALSE;
145
146 /* Scan the symbol table looking for SYMDEF. */
147 result = FALSE;
148 for (isym = isymbuf, isymend = isymbuf + extsymcount; isym < isymend; isym++)
149 {
150 const char *name;
151
152 name = bfd_elf_string_from_elf_section (abfd, hdr->sh_link,
153 isym->st_name);
154 if (name == NULL)
155 break;
156
157 if (strcmp (name, symdef->name) == 0)
158 {
159 result = is_global_data_symbol_definition (abfd, isym);
160 break;
161 }
162 }
163
164 free (isymbuf);
165
166 return result;
167 }
168 \f
169 /* Add symbols from an ELF archive file to the linker hash table. We
170 don't use _bfd_generic_link_add_archive_symbols because of a
171 problem which arises on UnixWare. The UnixWare libc.so is an
172 archive which includes an entry libc.so.1 which defines a bunch of
173 symbols. The libc.so archive also includes a number of other
174 object files, which also define symbols, some of which are the same
175 as those defined in libc.so.1. Correct linking requires that we
176 consider each object file in turn, and include it if it defines any
177 symbols we need. _bfd_generic_link_add_archive_symbols does not do
178 this; it looks through the list of undefined symbols, and includes
179 any object file which defines them. When this algorithm is used on
180 UnixWare, it winds up pulling in libc.so.1 early and defining a
181 bunch of symbols. This means that some of the other objects in the
182 archive are not included in the link, which is incorrect since they
183 precede libc.so.1 in the archive.
184
185 Fortunately, ELF archive handling is simpler than that done by
186 _bfd_generic_link_add_archive_symbols, which has to allow for a.out
187 oddities. In ELF, if we find a symbol in the archive map, and the
188 symbol is currently undefined, we know that we must pull in that
189 object file.
190
191 Unfortunately, we do have to make multiple passes over the symbol
192 table until nothing further is resolved. */
193
194 static bfd_boolean
195 elf_link_add_archive_symbols (bfd *abfd, struct bfd_link_info *info)
196 {
197 symindex c;
198 bfd_boolean *defined = NULL;
199 bfd_boolean *included = NULL;
200 carsym *symdefs;
201 bfd_boolean loop;
202 bfd_size_type amt;
203
204 if (! bfd_has_map (abfd))
205 {
206 /* An empty archive is a special case. */
207 if (bfd_openr_next_archived_file (abfd, NULL) == NULL)
208 return TRUE;
209 bfd_set_error (bfd_error_no_armap);
210 return FALSE;
211 }
212
213 /* Keep track of all symbols we know to be already defined, and all
214 files we know to be already included. This is to speed up the
215 second and subsequent passes. */
216 c = bfd_ardata (abfd)->symdef_count;
217 if (c == 0)
218 return TRUE;
219 amt = c;
220 amt *= sizeof (bfd_boolean);
221 defined = bfd_zmalloc (amt);
222 included = bfd_zmalloc (amt);
223 if (defined == NULL || included == NULL)
224 goto error_return;
225
226 symdefs = bfd_ardata (abfd)->symdefs;
227
228 do
229 {
230 file_ptr last;
231 symindex i;
232 carsym *symdef;
233 carsym *symdefend;
234
235 loop = FALSE;
236 last = -1;
237
238 symdef = symdefs;
239 symdefend = symdef + c;
240 for (i = 0; symdef < symdefend; symdef++, i++)
241 {
242 struct elf_link_hash_entry *h;
243 bfd *element;
244 struct bfd_link_hash_entry *undefs_tail;
245 symindex mark;
246
247 if (defined[i] || included[i])
248 continue;
249 if (symdef->file_offset == last)
250 {
251 included[i] = TRUE;
252 continue;
253 }
254
255 h = elf_link_hash_lookup (elf_hash_table (info), symdef->name,
256 FALSE, FALSE, FALSE);
257
258 if (h == NULL)
259 {
260 char *p, *copy;
261 size_t len, first;
262
263 /* If this is a default version (the name contains @@),
264 look up the symbol again with only one `@' as well
265 as without the version. The effect is that references
266 to the symbol with and without the version will be
267 matched by the default symbol in the archive. */
268
269 p = strchr (symdef->name, ELF_VER_CHR);
270 if (p == NULL || p[1] != ELF_VER_CHR)
271 continue;
272
273 /* First check with only one `@'. */
274 len = strlen (symdef->name);
275 copy = bfd_alloc (abfd, len);
276 if (copy == NULL)
277 goto error_return;
278 first = p - symdef->name + 1;
279 memcpy (copy, symdef->name, first);
280 memcpy (copy + first, symdef->name + first + 1, len - first);
281
282 h = elf_link_hash_lookup (elf_hash_table (info), copy,
283 FALSE, FALSE, FALSE);
284
285 if (h == NULL)
286 {
287 /* We also need to check references to the symbol
288 without the version. */
289
290 copy[first - 1] = '\0';
291 h = elf_link_hash_lookup (elf_hash_table (info),
292 copy, FALSE, FALSE, FALSE);
293 }
294
295 bfd_release (abfd, copy);
296 }
297
298 if (h == NULL)
299 continue;
300
301 if (h->root.type == bfd_link_hash_common)
302 {
303 /* We currently have a common symbol. The archive map contains
304 a reference to this symbol, so we may want to include it. We
305 only want to include it however, if this archive element
306 contains a definition of the symbol, not just another common
307 declaration of it.
308
309 Unfortunately some archivers (including GNU ar) will put
310 declarations of common symbols into their archive maps, as
311 well as real definitions, so we cannot just go by the archive
312 map alone. Instead we must read in the element's symbol
313 table and check that to see what kind of symbol definition
314 this is. */
315 if (! elf_link_is_defined_archive_symbol (abfd, symdef))
316 continue;
317 }
318 else if (h->root.type != bfd_link_hash_undefined)
319 {
320 if (h->root.type != bfd_link_hash_undefweak)
321 defined[i] = TRUE;
322 continue;
323 }
324
325 /* We need to include this archive member. */
326 element = _bfd_get_elt_at_filepos (abfd, symdef->file_offset);
327 if (element == NULL)
328 goto error_return;
329
330 if (! bfd_check_format (element, bfd_object))
331 goto error_return;
332
333 /* Doublecheck that we have not included this object
334 already--it should be impossible, but there may be
335 something wrong with the archive. */
336 if (element->archive_pass != 0)
337 {
338 bfd_set_error (bfd_error_bad_value);
339 goto error_return;
340 }
341 element->archive_pass = 1;
342
343 undefs_tail = info->hash->undefs_tail;
344
345 if (! (*info->callbacks->add_archive_element) (info, element,
346 symdef->name))
347 goto error_return;
348 if (! elf_link_add_object_symbols (element, info))
349 goto error_return;
350
351 /* If there are any new undefined symbols, we need to make
352 another pass through the archive in order to see whether
353 they can be defined. FIXME: This isn't perfect, because
354 common symbols wind up on undefs_tail and because an
355 undefined symbol which is defined later on in this pass
356 does not require another pass. This isn't a bug, but it
357 does make the code less efficient than it could be. */
358 if (undefs_tail != info->hash->undefs_tail)
359 loop = TRUE;
360
361 /* Look backward to mark all symbols from this object file
362 which we have already seen in this pass. */
363 mark = i;
364 do
365 {
366 included[mark] = TRUE;
367 if (mark == 0)
368 break;
369 --mark;
370 }
371 while (symdefs[mark].file_offset == symdef->file_offset);
372
373 /* We mark subsequent symbols from this object file as we go
374 on through the loop. */
375 last = symdef->file_offset;
376 }
377 }
378 while (loop);
379
380 free (defined);
381 free (included);
382
383 return TRUE;
384
385 error_return:
386 if (defined != NULL)
387 free (defined);
388 if (included != NULL)
389 free (included);
390 return FALSE;
391 }
392
393 /* Add symbols from an ELF object file to the linker hash table. */
394
395 static bfd_boolean
396 elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info)
397 {
398 bfd_boolean (*add_symbol_hook)
399 (bfd *, struct bfd_link_info *, const Elf_Internal_Sym *,
400 const char **, flagword *, asection **, bfd_vma *);
401 bfd_boolean (*check_relocs)
402 (bfd *, struct bfd_link_info *, asection *, const Elf_Internal_Rela *);
403 bfd_boolean collect;
404 Elf_Internal_Shdr *hdr;
405 bfd_size_type symcount;
406 bfd_size_type extsymcount;
407 bfd_size_type extsymoff;
408 struct elf_link_hash_entry **sym_hash;
409 bfd_boolean dynamic;
410 Elf_External_Versym *extversym = NULL;
411 Elf_External_Versym *ever;
412 struct elf_link_hash_entry *weaks;
413 struct elf_link_hash_entry **nondeflt_vers = NULL;
414 bfd_size_type nondeflt_vers_cnt = 0;
415 Elf_Internal_Sym *isymbuf = NULL;
416 Elf_Internal_Sym *isym;
417 Elf_Internal_Sym *isymend;
418 const struct elf_backend_data *bed;
419 bfd_boolean dt_needed;
420 struct elf_link_hash_table * hash_table;
421 bfd_size_type amt;
422
423 hash_table = elf_hash_table (info);
424
425 bed = get_elf_backend_data (abfd);
426 add_symbol_hook = bed->elf_add_symbol_hook;
427 collect = bed->collect;
428
429 if ((abfd->flags & DYNAMIC) == 0)
430 dynamic = FALSE;
431 else
432 {
433 dynamic = TRUE;
434
435 /* You can't use -r against a dynamic object. Also, there's no
436 hope of using a dynamic object which does not exactly match
437 the format of the output file. */
438 if (info->relocatable || info->hash->creator != abfd->xvec)
439 {
440 bfd_set_error (bfd_error_invalid_operation);
441 goto error_return;
442 }
443 }
444
445 /* As a GNU extension, any input sections which are named
446 .gnu.warning.SYMBOL are treated as warning symbols for the given
447 symbol. This differs from .gnu.warning sections, which generate
448 warnings when they are included in an output file. */
449 if (info->executable)
450 {
451 asection *s;
452
453 for (s = abfd->sections; s != NULL; s = s->next)
454 {
455 const char *name;
456
457 name = bfd_get_section_name (abfd, s);
458 if (strncmp (name, ".gnu.warning.", sizeof ".gnu.warning." - 1) == 0)
459 {
460 char *msg;
461 bfd_size_type sz;
462 bfd_size_type prefix_len;
463 const char * gnu_warning_prefix = _("warning: ");
464
465 name += sizeof ".gnu.warning." - 1;
466
467 /* If this is a shared object, then look up the symbol
468 in the hash table. If it is there, and it is already
469 been defined, then we will not be using the entry
470 from this shared object, so we don't need to warn.
471 FIXME: If we see the definition in a regular object
472 later on, we will warn, but we shouldn't. The only
473 fix is to keep track of what warnings we are supposed
474 to emit, and then handle them all at the end of the
475 link. */
476 if (dynamic && abfd->xvec == info->hash->creator)
477 {
478 struct elf_link_hash_entry *h;
479
480 h = elf_link_hash_lookup (hash_table, name,
481 FALSE, FALSE, TRUE);
482
483 /* FIXME: What about bfd_link_hash_common? */
484 if (h != NULL
485 && (h->root.type == bfd_link_hash_defined
486 || h->root.type == bfd_link_hash_defweak))
487 {
488 /* We don't want to issue this warning. Clobber
489 the section size so that the warning does not
490 get copied into the output file. */
491 s->_raw_size = 0;
492 continue;
493 }
494 }
495
496 sz = bfd_section_size (abfd, s);
497 prefix_len = strlen (gnu_warning_prefix);
498 msg = bfd_alloc (abfd, prefix_len + sz + 1);
499 if (msg == NULL)
500 goto error_return;
501
502 strcpy (msg, gnu_warning_prefix);
503 if (! bfd_get_section_contents (abfd, s, msg + prefix_len, 0, sz))
504 goto error_return;
505
506 msg[prefix_len + sz] = '\0';
507
508 if (! (_bfd_generic_link_add_one_symbol
509 (info, abfd, name, BSF_WARNING, s, 0, msg,
510 FALSE, collect, NULL)))
511 goto error_return;
512
513 if (! info->relocatable)
514 {
515 /* Clobber the section size so that the warning does
516 not get copied into the output file. */
517 s->_raw_size = 0;
518 }
519 }
520 }
521 }
522
523 dt_needed = FALSE;
524 if (! dynamic)
525 {
526 /* If we are creating a shared library, create all the dynamic
527 sections immediately. We need to attach them to something,
528 so we attach them to this BFD, provided it is the right
529 format. FIXME: If there are no input BFD's of the same
530 format as the output, we can't make a shared library. */
531 if (info->shared
532 && is_elf_hash_table (info)
533 && ! hash_table->dynamic_sections_created
534 && abfd->xvec == info->hash->creator)
535 {
536 if (! _bfd_elf_link_create_dynamic_sections (abfd, info))
537 goto error_return;
538 }
539 }
540 else if (! is_elf_hash_table (info))
541 goto error_return;
542 else
543 {
544 asection *s;
545 bfd_boolean add_needed;
546 const char *name;
547 bfd_size_type oldsize;
548 bfd_size_type strindex;
549 struct bfd_link_needed_list *rpath = NULL, *runpath = NULL;
550
551 /* ld --just-symbols and dynamic objects don't mix very well.
552 Test for --just-symbols by looking at info set up by
553 _bfd_elf_link_just_syms. */
554 if ((s = abfd->sections) != NULL
555 && s->sec_info_type == ELF_INFO_TYPE_JUST_SYMS)
556 goto error_return;
557
558 /* Find the name to use in a DT_NEEDED entry that refers to this
559 object. If the object has a DT_SONAME entry, we use it.
560 Otherwise, if the generic linker stuck something in
561 elf_dt_name, we use that. Otherwise, we just use the file
562 name. If the generic linker put a null string into
563 elf_dt_name, we don't make a DT_NEEDED entry at all, even if
564 there is a DT_SONAME entry. */
565 add_needed = TRUE;
566 name = bfd_get_filename (abfd);
567 if (elf_dt_name (abfd) != NULL)
568 {
569 name = elf_dt_name (abfd);
570 if (*name == '\0')
571 {
572 if (elf_dt_soname (abfd) != NULL)
573 dt_needed = TRUE;
574
575 add_needed = FALSE;
576 }
577 }
578 s = bfd_get_section_by_name (abfd, ".dynamic");
579 if (s != NULL)
580 {
581 Elf_External_Dyn *dynbuf = NULL;
582 Elf_External_Dyn *extdyn;
583 Elf_External_Dyn *extdynend;
584 int elfsec;
585 unsigned long shlink;
586
587 dynbuf = bfd_malloc (s->_raw_size);
588 if (dynbuf == NULL)
589 goto error_return;
590
591 if (! bfd_get_section_contents (abfd, s, dynbuf, 0, s->_raw_size))
592 goto error_free_dyn;
593
594 elfsec = _bfd_elf_section_from_bfd_section (abfd, s);
595 if (elfsec == -1)
596 goto error_free_dyn;
597 shlink = elf_elfsections (abfd)[elfsec]->sh_link;
598
599 extdyn = dynbuf;
600 extdynend = extdyn + s->_raw_size / sizeof (Elf_External_Dyn);
601 for (; extdyn < extdynend; extdyn++)
602 {
603 Elf_Internal_Dyn dyn;
604
605 elf_swap_dyn_in (abfd, extdyn, &dyn);
606 if (dyn.d_tag == DT_SONAME)
607 {
608 unsigned int tagv = dyn.d_un.d_val;
609 name = bfd_elf_string_from_elf_section (abfd, shlink, tagv);
610 if (name == NULL)
611 goto error_free_dyn;
612 }
613 if (dyn.d_tag == DT_NEEDED)
614 {
615 struct bfd_link_needed_list *n, **pn;
616 char *fnm, *anm;
617 unsigned int tagv = dyn.d_un.d_val;
618
619 amt = sizeof (struct bfd_link_needed_list);
620 n = bfd_alloc (abfd, amt);
621 fnm = bfd_elf_string_from_elf_section (abfd, shlink, tagv);
622 if (n == NULL || fnm == NULL)
623 goto error_free_dyn;
624 amt = strlen (fnm) + 1;
625 anm = bfd_alloc (abfd, amt);
626 if (anm == NULL)
627 goto error_free_dyn;
628 memcpy (anm, fnm, amt);
629 n->name = anm;
630 n->by = abfd;
631 n->next = NULL;
632 for (pn = & hash_table->needed;
633 *pn != NULL;
634 pn = &(*pn)->next)
635 ;
636 *pn = n;
637 }
638 if (dyn.d_tag == DT_RUNPATH)
639 {
640 struct bfd_link_needed_list *n, **pn;
641 char *fnm, *anm;
642 unsigned int tagv = dyn.d_un.d_val;
643
644 amt = sizeof (struct bfd_link_needed_list);
645 n = bfd_alloc (abfd, amt);
646 fnm = bfd_elf_string_from_elf_section (abfd, shlink, tagv);
647 if (n == NULL || fnm == NULL)
648 goto error_free_dyn;
649 amt = strlen (fnm) + 1;
650 anm = bfd_alloc (abfd, amt);
651 if (anm == NULL)
652 goto error_free_dyn;
653 memcpy (anm, fnm, amt);
654 n->name = anm;
655 n->by = abfd;
656 n->next = NULL;
657 for (pn = & runpath;
658 *pn != NULL;
659 pn = &(*pn)->next)
660 ;
661 *pn = n;
662 }
663 /* Ignore DT_RPATH if we have seen DT_RUNPATH. */
664 if (!runpath && dyn.d_tag == DT_RPATH)
665 {
666 struct bfd_link_needed_list *n, **pn;
667 char *fnm, *anm;
668 unsigned int tagv = dyn.d_un.d_val;
669
670 amt = sizeof (struct bfd_link_needed_list);
671 n = bfd_alloc (abfd, amt);
672 fnm = bfd_elf_string_from_elf_section (abfd, shlink, tagv);
673 if (n == NULL || fnm == NULL)
674 goto error_free_dyn;
675 amt = strlen (fnm) + 1;
676 anm = bfd_alloc (abfd, amt);
677 if (anm == NULL)
678 {
679 error_free_dyn:
680 free (dynbuf);
681 goto error_return;
682 }
683 memcpy (anm, fnm, amt);
684 n->name = anm;
685 n->by = abfd;
686 n->next = NULL;
687 for (pn = & rpath;
688 *pn != NULL;
689 pn = &(*pn)->next)
690 ;
691 *pn = n;
692 }
693 }
694
695 free (dynbuf);
696 }
697
698 /* DT_RUNPATH overrides DT_RPATH. Do _NOT_ bfd_release, as that
699 frees all more recently bfd_alloc'd blocks as well. */
700 if (runpath)
701 rpath = runpath;
702
703 if (rpath)
704 {
705 struct bfd_link_needed_list **pn;
706 for (pn = & hash_table->runpath;
707 *pn != NULL;
708 pn = &(*pn)->next)
709 ;
710 *pn = rpath;
711 }
712
713 /* We do not want to include any of the sections in a dynamic
714 object in the output file. We hack by simply clobbering the
715 list of sections in the BFD. This could be handled more
716 cleanly by, say, a new section flag; the existing
717 SEC_NEVER_LOAD flag is not the one we want, because that one
718 still implies that the section takes up space in the output
719 file. */
720 bfd_section_list_clear (abfd);
721
722 /* If this is the first dynamic object found in the link, create
723 the special sections required for dynamic linking. */
724 if (! hash_table->dynamic_sections_created)
725 if (! _bfd_elf_link_create_dynamic_sections (abfd, info))
726 goto error_return;
727
728 if (add_needed)
729 {
730 /* Add a DT_NEEDED entry for this dynamic object. */
731 oldsize = _bfd_elf_strtab_size (hash_table->dynstr);
732 strindex = _bfd_elf_strtab_add (hash_table->dynstr, name, FALSE);
733 if (strindex == (bfd_size_type) -1)
734 goto error_return;
735
736 if (oldsize == _bfd_elf_strtab_size (hash_table->dynstr))
737 {
738 asection *sdyn;
739 Elf_External_Dyn *dyncon, *dynconend;
740
741 /* The hash table size did not change, which means that
742 the dynamic object name was already entered. If we
743 have already included this dynamic object in the
744 link, just ignore it. There is no reason to include
745 a particular dynamic object more than once. */
746 sdyn = bfd_get_section_by_name (hash_table->dynobj, ".dynamic");
747 BFD_ASSERT (sdyn != NULL);
748
749 dyncon = (Elf_External_Dyn *) sdyn->contents;
750 dynconend = (Elf_External_Dyn *) (sdyn->contents +
751 sdyn->_raw_size);
752 for (; dyncon < dynconend; dyncon++)
753 {
754 Elf_Internal_Dyn dyn;
755
756 elf_swap_dyn_in (hash_table->dynobj, dyncon, & dyn);
757 if (dyn.d_tag == DT_NEEDED
758 && dyn.d_un.d_val == strindex)
759 {
760 _bfd_elf_strtab_delref (hash_table->dynstr, strindex);
761 return TRUE;
762 }
763 }
764 }
765
766 if (! elf_add_dynamic_entry (info, DT_NEEDED, strindex))
767 goto error_return;
768 }
769
770 /* Save the SONAME, if there is one, because sometimes the
771 linker emulation code will need to know it. */
772 if (*name == '\0')
773 name = basename (bfd_get_filename (abfd));
774 elf_dt_name (abfd) = name;
775 }
776
777 /* If this is a dynamic object, we always link against the .dynsym
778 symbol table, not the .symtab symbol table. The dynamic linker
779 will only see the .dynsym symbol table, so there is no reason to
780 look at .symtab for a dynamic object. */
781
782 if (! dynamic || elf_dynsymtab (abfd) == 0)
783 hdr = &elf_tdata (abfd)->symtab_hdr;
784 else
785 hdr = &elf_tdata (abfd)->dynsymtab_hdr;
786
787 symcount = hdr->sh_size / sizeof (Elf_External_Sym);
788
789 /* The sh_info field of the symtab header tells us where the
790 external symbols start. We don't care about the local symbols at
791 this point. */
792 if (elf_bad_symtab (abfd))
793 {
794 extsymcount = symcount;
795 extsymoff = 0;
796 }
797 else
798 {
799 extsymcount = symcount - hdr->sh_info;
800 extsymoff = hdr->sh_info;
801 }
802
803 sym_hash = NULL;
804 if (extsymcount != 0)
805 {
806 isymbuf = bfd_elf_get_elf_syms (abfd, hdr, extsymcount, extsymoff,
807 NULL, NULL, NULL);
808 if (isymbuf == NULL)
809 goto error_return;
810
811 /* We store a pointer to the hash table entry for each external
812 symbol. */
813 amt = extsymcount * sizeof (struct elf_link_hash_entry *);
814 sym_hash = bfd_alloc (abfd, amt);
815 if (sym_hash == NULL)
816 goto error_free_sym;
817 elf_sym_hashes (abfd) = sym_hash;
818 }
819
820 if (dynamic)
821 {
822 /* Read in any version definitions. */
823 if (! _bfd_elf_slurp_version_tables (abfd))
824 goto error_free_sym;
825
826 /* Read in the symbol versions, but don't bother to convert them
827 to internal format. */
828 if (elf_dynversym (abfd) != 0)
829 {
830 Elf_Internal_Shdr *versymhdr;
831
832 versymhdr = &elf_tdata (abfd)->dynversym_hdr;
833 extversym = bfd_malloc (versymhdr->sh_size);
834 if (extversym == NULL)
835 goto error_free_sym;
836 amt = versymhdr->sh_size;
837 if (bfd_seek (abfd, versymhdr->sh_offset, SEEK_SET) != 0
838 || bfd_bread (extversym, amt, abfd) != amt)
839 goto error_free_vers;
840 }
841 }
842
843 weaks = NULL;
844
845 ever = extversym != NULL ? extversym + extsymoff : NULL;
846 for (isym = isymbuf, isymend = isymbuf + extsymcount;
847 isym < isymend;
848 isym++, sym_hash++, ever = (ever != NULL ? ever + 1 : NULL))
849 {
850 int bind;
851 bfd_vma value;
852 asection *sec;
853 flagword flags;
854 const char *name;
855 struct elf_link_hash_entry *h;
856 bfd_boolean definition;
857 bfd_boolean size_change_ok;
858 bfd_boolean type_change_ok;
859 bfd_boolean new_weakdef;
860 bfd_boolean override;
861 unsigned int old_alignment;
862 bfd *old_bfd;
863
864 override = FALSE;
865
866 flags = BSF_NO_FLAGS;
867 sec = NULL;
868 value = isym->st_value;
869 *sym_hash = NULL;
870
871 bind = ELF_ST_BIND (isym->st_info);
872 if (bind == STB_LOCAL)
873 {
874 /* This should be impossible, since ELF requires that all
875 global symbols follow all local symbols, and that sh_info
876 point to the first global symbol. Unfortunatealy, Irix 5
877 screws this up. */
878 continue;
879 }
880 else if (bind == STB_GLOBAL)
881 {
882 if (isym->st_shndx != SHN_UNDEF
883 && isym->st_shndx != SHN_COMMON)
884 flags = BSF_GLOBAL;
885 }
886 else if (bind == STB_WEAK)
887 flags = BSF_WEAK;
888 else
889 {
890 /* Leave it up to the processor backend. */
891 }
892
893 if (isym->st_shndx == SHN_UNDEF)
894 sec = bfd_und_section_ptr;
895 else if (isym->st_shndx < SHN_LORESERVE || isym->st_shndx > SHN_HIRESERVE)
896 {
897 sec = section_from_elf_index (abfd, isym->st_shndx);
898 if (sec == NULL)
899 sec = bfd_abs_section_ptr;
900 else if ((abfd->flags & (EXEC_P | DYNAMIC)) != 0)
901 value -= sec->vma;
902 }
903 else if (isym->st_shndx == SHN_ABS)
904 sec = bfd_abs_section_ptr;
905 else if (isym->st_shndx == SHN_COMMON)
906 {
907 sec = bfd_com_section_ptr;
908 /* What ELF calls the size we call the value. What ELF
909 calls the value we call the alignment. */
910 value = isym->st_size;
911 }
912 else
913 {
914 /* Leave it up to the processor backend. */
915 }
916
917 name = bfd_elf_string_from_elf_section (abfd, hdr->sh_link,
918 isym->st_name);
919 if (name == NULL)
920 goto error_free_vers;
921
922 if (isym->st_shndx == SHN_COMMON
923 && ELF_ST_TYPE (isym->st_info) == STT_TLS)
924 {
925 asection *tcomm = bfd_get_section_by_name (abfd, ".tcommon");
926
927 if (tcomm == NULL)
928 {
929 tcomm = bfd_make_section (abfd, ".tcommon");
930 if (tcomm == NULL
931 || !bfd_set_section_flags (abfd, tcomm, (SEC_ALLOC
932 | SEC_IS_COMMON
933 | SEC_LINKER_CREATED
934 | SEC_THREAD_LOCAL)))
935 goto error_free_vers;
936 }
937 sec = tcomm;
938 }
939 else if (add_symbol_hook)
940 {
941 if (! (*add_symbol_hook) (abfd, info, isym, &name, &flags, &sec,
942 &value))
943 goto error_free_vers;
944
945 /* The hook function sets the name to NULL if this symbol
946 should be skipped for some reason. */
947 if (name == NULL)
948 continue;
949 }
950
951 /* Sanity check that all possibilities were handled. */
952 if (sec == NULL)
953 {
954 bfd_set_error (bfd_error_bad_value);
955 goto error_free_vers;
956 }
957
958 if (bfd_is_und_section (sec)
959 || bfd_is_com_section (sec))
960 definition = FALSE;
961 else
962 definition = TRUE;
963
964 size_change_ok = FALSE;
965 type_change_ok = get_elf_backend_data (abfd)->type_change_ok;
966 old_alignment = 0;
967 old_bfd = NULL;
968
969 if (info->hash->creator->flavour == bfd_target_elf_flavour)
970 {
971 Elf_Internal_Versym iver;
972 unsigned int vernum = 0;
973 bfd_boolean skip;
974
975 if (ever != NULL)
976 {
977 _bfd_elf_swap_versym_in (abfd, ever, &iver);
978 vernum = iver.vs_vers & VERSYM_VERSION;
979
980 /* If this is a hidden symbol, or if it is not version
981 1, we append the version name to the symbol name.
982 However, we do not modify a non-hidden absolute
983 symbol, because it might be the version symbol
984 itself. FIXME: What if it isn't? */
985 if ((iver.vs_vers & VERSYM_HIDDEN) != 0
986 || (vernum > 1 && ! bfd_is_abs_section (sec)))
987 {
988 const char *verstr;
989 size_t namelen, verlen, newlen;
990 char *newname, *p;
991
992 if (isym->st_shndx != SHN_UNDEF)
993 {
994 if (vernum > elf_tdata (abfd)->dynverdef_hdr.sh_info)
995 {
996 (*_bfd_error_handler)
997 (_("%s: %s: invalid version %u (max %d)"),
998 bfd_archive_filename (abfd), name, vernum,
999 elf_tdata (abfd)->dynverdef_hdr.sh_info);
1000 bfd_set_error (bfd_error_bad_value);
1001 goto error_free_vers;
1002 }
1003 else if (vernum > 1)
1004 verstr =
1005 elf_tdata (abfd)->verdef[vernum - 1].vd_nodename;
1006 else
1007 verstr = "";
1008 }
1009 else
1010 {
1011 /* We cannot simply test for the number of
1012 entries in the VERNEED section since the
1013 numbers for the needed versions do not start
1014 at 0. */
1015 Elf_Internal_Verneed *t;
1016
1017 verstr = NULL;
1018 for (t = elf_tdata (abfd)->verref;
1019 t != NULL;
1020 t = t->vn_nextref)
1021 {
1022 Elf_Internal_Vernaux *a;
1023
1024 for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr)
1025 {
1026 if (a->vna_other == vernum)
1027 {
1028 verstr = a->vna_nodename;
1029 break;
1030 }
1031 }
1032 if (a != NULL)
1033 break;
1034 }
1035 if (verstr == NULL)
1036 {
1037 (*_bfd_error_handler)
1038 (_("%s: %s: invalid needed version %d"),
1039 bfd_archive_filename (abfd), name, vernum);
1040 bfd_set_error (bfd_error_bad_value);
1041 goto error_free_vers;
1042 }
1043 }
1044
1045 namelen = strlen (name);
1046 verlen = strlen (verstr);
1047 newlen = namelen + verlen + 2;
1048 if ((iver.vs_vers & VERSYM_HIDDEN) == 0
1049 && isym->st_shndx != SHN_UNDEF)
1050 ++newlen;
1051
1052 newname = bfd_alloc (abfd, newlen);
1053 if (newname == NULL)
1054 goto error_free_vers;
1055 memcpy (newname, name, namelen);
1056 p = newname + namelen;
1057 *p++ = ELF_VER_CHR;
1058 /* If this is a defined non-hidden version symbol,
1059 we add another @ to the name. This indicates the
1060 default version of the symbol. */
1061 if ((iver.vs_vers & VERSYM_HIDDEN) == 0
1062 && isym->st_shndx != SHN_UNDEF)
1063 *p++ = ELF_VER_CHR;
1064 memcpy (p, verstr, verlen + 1);
1065
1066 name = newname;
1067 }
1068 }
1069
1070 if (!_bfd_elf_merge_symbol (abfd, info, name, isym, &sec, &value,
1071 sym_hash, &skip, &override,
1072 &type_change_ok, &size_change_ok,
1073 dt_needed))
1074 goto error_free_vers;
1075
1076 if (skip)
1077 continue;
1078
1079 if (override)
1080 definition = FALSE;
1081
1082 h = *sym_hash;
1083 while (h->root.type == bfd_link_hash_indirect
1084 || h->root.type == bfd_link_hash_warning)
1085 h = (struct elf_link_hash_entry *) h->root.u.i.link;
1086
1087 /* Remember the old alignment if this is a common symbol, so
1088 that we don't reduce the alignment later on. We can't
1089 check later, because _bfd_generic_link_add_one_symbol
1090 will set a default for the alignment which we want to
1091 override. We also remember the old bfd where the existing
1092 definition comes from. */
1093 switch (h->root.type)
1094 {
1095 default:
1096 break;
1097
1098 case bfd_link_hash_defined:
1099 case bfd_link_hash_defweak:
1100 old_bfd = h->root.u.def.section->owner;
1101 break;
1102
1103 case bfd_link_hash_common:
1104 old_bfd = h->root.u.c.p->section->owner;
1105 old_alignment = h->root.u.c.p->alignment_power;
1106 break;
1107 }
1108
1109 if (elf_tdata (abfd)->verdef != NULL
1110 && ! override
1111 && vernum > 1
1112 && definition)
1113 h->verinfo.verdef = &elf_tdata (abfd)->verdef[vernum - 1];
1114 }
1115
1116 if (! (_bfd_generic_link_add_one_symbol
1117 (info, abfd, name, flags, sec, value, NULL, FALSE, collect,
1118 (struct bfd_link_hash_entry **) sym_hash)))
1119 goto error_free_vers;
1120
1121 h = *sym_hash;
1122 while (h->root.type == bfd_link_hash_indirect
1123 || h->root.type == bfd_link_hash_warning)
1124 h = (struct elf_link_hash_entry *) h->root.u.i.link;
1125 *sym_hash = h;
1126
1127 new_weakdef = FALSE;
1128 if (dynamic
1129 && definition
1130 && (flags & BSF_WEAK) != 0
1131 && ELF_ST_TYPE (isym->st_info) != STT_FUNC
1132 && info->hash->creator->flavour == bfd_target_elf_flavour
1133 && h->weakdef == NULL)
1134 {
1135 /* Keep a list of all weak defined non function symbols from
1136 a dynamic object, using the weakdef field. Later in this
1137 function we will set the weakdef field to the correct
1138 value. We only put non-function symbols from dynamic
1139 objects on this list, because that happens to be the only
1140 time we need to know the normal symbol corresponding to a
1141 weak symbol, and the information is time consuming to
1142 figure out. If the weakdef field is not already NULL,
1143 then this symbol was already defined by some previous
1144 dynamic object, and we will be using that previous
1145 definition anyhow. */
1146
1147 h->weakdef = weaks;
1148 weaks = h;
1149 new_weakdef = TRUE;
1150 }
1151
1152 /* Set the alignment of a common symbol. */
1153 if (isym->st_shndx == SHN_COMMON
1154 && h->root.type == bfd_link_hash_common)
1155 {
1156 unsigned int align;
1157
1158 align = bfd_log2 (isym->st_value);
1159 if (align > old_alignment
1160 /* Permit an alignment power of zero if an alignment of one
1161 is specified and no other alignments have been specified. */
1162 || (isym->st_value == 1 && old_alignment == 0))
1163 h->root.u.c.p->alignment_power = align;
1164 else
1165 h->root.u.c.p->alignment_power = old_alignment;
1166 }
1167
1168 if (info->hash->creator->flavour == bfd_target_elf_flavour)
1169 {
1170 int old_flags;
1171 bfd_boolean dynsym;
1172 int new_flag;
1173
1174 /* Check the alignment when a common symbol is involved. This
1175 can change when a common symbol is overriden by a normal
1176 definition or a common symbol is ignored due to the old
1177 normal definition. We need to make sure the maximum
1178 alignment is maintained. */
1179 if ((old_alignment || isym->st_shndx == SHN_COMMON)
1180 && h->root.type != bfd_link_hash_common)
1181 {
1182 unsigned int common_align;
1183 unsigned int normal_align;
1184 unsigned int symbol_align;
1185 bfd *normal_bfd;
1186 bfd *common_bfd;
1187
1188 symbol_align = ffs (h->root.u.def.value) - 1;
1189 if ((h->root.u.def.section->owner->flags & DYNAMIC) == 0)
1190 {
1191 normal_align = h->root.u.def.section->alignment_power;
1192 if (normal_align > symbol_align)
1193 normal_align = symbol_align;
1194 }
1195 else
1196 normal_align = symbol_align;
1197
1198 if (old_alignment)
1199 {
1200 common_align = old_alignment;
1201 common_bfd = old_bfd;
1202 normal_bfd = abfd;
1203 }
1204 else
1205 {
1206 common_align = bfd_log2 (isym->st_value);
1207 common_bfd = abfd;
1208 normal_bfd = old_bfd;
1209 }
1210
1211 if (normal_align < common_align)
1212 (*_bfd_error_handler)
1213 (_("Warning: alignment %u of symbol `%s' in %s is smaller than %u in %s"),
1214 1 << normal_align,
1215 name,
1216 bfd_archive_filename (normal_bfd),
1217 1 << common_align,
1218 bfd_archive_filename (common_bfd));
1219 }
1220
1221 /* Remember the symbol size and type. */
1222 if (isym->st_size != 0
1223 && (definition || h->size == 0))
1224 {
1225 if (h->size != 0 && h->size != isym->st_size && ! size_change_ok)
1226 (*_bfd_error_handler)
1227 (_("Warning: size of symbol `%s' changed from %lu in %s to %lu in %s"),
1228 name, (unsigned long) h->size,
1229 bfd_archive_filename (old_bfd),
1230 (unsigned long) isym->st_size,
1231 bfd_archive_filename (abfd));
1232
1233 h->size = isym->st_size;
1234 }
1235
1236 /* If this is a common symbol, then we always want H->SIZE
1237 to be the size of the common symbol. The code just above
1238 won't fix the size if a common symbol becomes larger. We
1239 don't warn about a size change here, because that is
1240 covered by --warn-common. */
1241 if (h->root.type == bfd_link_hash_common)
1242 h->size = h->root.u.c.size;
1243
1244 if (ELF_ST_TYPE (isym->st_info) != STT_NOTYPE
1245 && (definition || h->type == STT_NOTYPE))
1246 {
1247 if (h->type != STT_NOTYPE
1248 && h->type != ELF_ST_TYPE (isym->st_info)
1249 && ! type_change_ok)
1250 (*_bfd_error_handler)
1251 (_("Warning: type of symbol `%s' changed from %d to %d in %s"),
1252 name, h->type, ELF_ST_TYPE (isym->st_info),
1253 bfd_archive_filename (abfd));
1254
1255 h->type = ELF_ST_TYPE (isym->st_info);
1256 }
1257
1258 /* If st_other has a processor-specific meaning, specific
1259 code might be needed here. We never merge the visibility
1260 attribute with the one from a dynamic object. */
1261 if (isym->st_other != 0 && !dynamic)
1262 {
1263 unsigned char hvis, symvis, other, nvis;
1264
1265 /* Take the balance of OTHER from the definition. */
1266 other = (definition ? isym->st_other : h->other);
1267 other &= ~ ELF_ST_VISIBILITY (-1);
1268
1269 /* Combine visibilities, using the most constraining one. */
1270 hvis = ELF_ST_VISIBILITY (h->other);
1271 symvis = ELF_ST_VISIBILITY (isym->st_other);
1272 if (! hvis)
1273 nvis = symvis;
1274 else if (! symvis)
1275 nvis = hvis;
1276 else
1277 nvis = hvis < symvis ? hvis : symvis;
1278
1279 h->other = other | nvis;
1280 }
1281
1282 /* Set a flag in the hash table entry indicating the type of
1283 reference or definition we just found. Keep a count of
1284 the number of dynamic symbols we find. A dynamic symbol
1285 is one which is referenced or defined by both a regular
1286 object and a shared object. */
1287 old_flags = h->elf_link_hash_flags;
1288 dynsym = FALSE;
1289 if (! dynamic)
1290 {
1291 if (! definition)
1292 {
1293 new_flag = ELF_LINK_HASH_REF_REGULAR;
1294 if (bind != STB_WEAK)
1295 new_flag |= ELF_LINK_HASH_REF_REGULAR_NONWEAK;
1296 }
1297 else
1298 new_flag = ELF_LINK_HASH_DEF_REGULAR;
1299 if (! info->executable
1300 || (old_flags & (ELF_LINK_HASH_DEF_DYNAMIC
1301 | ELF_LINK_HASH_REF_DYNAMIC)) != 0)
1302 dynsym = TRUE;
1303 }
1304 else
1305 {
1306 if (! definition)
1307 new_flag = ELF_LINK_HASH_REF_DYNAMIC;
1308 else
1309 new_flag = ELF_LINK_HASH_DEF_DYNAMIC;
1310 if ((old_flags & (ELF_LINK_HASH_DEF_REGULAR
1311 | ELF_LINK_HASH_REF_REGULAR)) != 0
1312 || (h->weakdef != NULL
1313 && ! new_weakdef
1314 && h->weakdef->dynindx != -1))
1315 dynsym = TRUE;
1316 }
1317
1318 h->elf_link_hash_flags |= new_flag;
1319
1320 /* Check to see if we need to add an indirect symbol for
1321 the default name. */
1322 if (definition || h->root.type == bfd_link_hash_common)
1323 if (!_bfd_elf_add_default_symbol (abfd, info, h, name, isym,
1324 &sec, &value, &dynsym,
1325 override, dt_needed))
1326 goto error_free_vers;
1327
1328 if (definition && !dynamic)
1329 {
1330 char *p = strchr (name, ELF_VER_CHR);
1331 if (p != NULL && p[1] != ELF_VER_CHR)
1332 {
1333 /* Queue non-default versions so that .symver x, x@FOO
1334 aliases can be checked. */
1335 if (! nondeflt_vers)
1336 {
1337 amt = (isymend - isym + 1)
1338 * sizeof (struct elf_link_hash_entry *);
1339 nondeflt_vers = bfd_malloc (amt);
1340 }
1341 nondeflt_vers [nondeflt_vers_cnt++] = h;
1342 }
1343 }
1344
1345 if (dynsym && h->dynindx == -1)
1346 {
1347 if (! _bfd_elf_link_record_dynamic_symbol (info, h))
1348 goto error_free_vers;
1349 if (h->weakdef != NULL
1350 && ! new_weakdef
1351 && h->weakdef->dynindx == -1)
1352 {
1353 if (! _bfd_elf_link_record_dynamic_symbol (info, h->weakdef))
1354 goto error_free_vers;
1355 }
1356 }
1357 else if (dynsym && h->dynindx != -1)
1358 /* If the symbol already has a dynamic index, but
1359 visibility says it should not be visible, turn it into
1360 a local symbol. */
1361 switch (ELF_ST_VISIBILITY (h->other))
1362 {
1363 case STV_INTERNAL:
1364 case STV_HIDDEN:
1365 (*bed->elf_backend_hide_symbol) (info, h, TRUE);
1366 break;
1367 }
1368
1369 if (dt_needed && definition
1370 && (h->elf_link_hash_flags
1371 & ELF_LINK_HASH_REF_REGULAR) != 0)
1372 {
1373 bfd_size_type oldsize;
1374 bfd_size_type strindex;
1375
1376 if (! is_elf_hash_table (info))
1377 goto error_free_vers;
1378
1379 /* The symbol from a DT_NEEDED object is referenced from
1380 the regular object to create a dynamic executable. We
1381 have to make sure there is a DT_NEEDED entry for it. */
1382
1383 dt_needed = FALSE;
1384 oldsize = _bfd_elf_strtab_size (hash_table->dynstr);
1385 strindex = _bfd_elf_strtab_add (hash_table->dynstr,
1386 elf_dt_soname (abfd), FALSE);
1387 if (strindex == (bfd_size_type) -1)
1388 goto error_free_vers;
1389
1390 if (oldsize == _bfd_elf_strtab_size (hash_table->dynstr))
1391 {
1392 asection *sdyn;
1393 Elf_External_Dyn *dyncon, *dynconend;
1394
1395 sdyn = bfd_get_section_by_name (hash_table->dynobj,
1396 ".dynamic");
1397 BFD_ASSERT (sdyn != NULL);
1398
1399 dyncon = (Elf_External_Dyn *) sdyn->contents;
1400 dynconend = (Elf_External_Dyn *) (sdyn->contents +
1401 sdyn->_raw_size);
1402 for (; dyncon < dynconend; dyncon++)
1403 {
1404 Elf_Internal_Dyn dyn;
1405
1406 elf_swap_dyn_in (hash_table->dynobj,
1407 dyncon, &dyn);
1408 BFD_ASSERT (dyn.d_tag != DT_NEEDED ||
1409 dyn.d_un.d_val != strindex);
1410 }
1411 }
1412
1413 if (! elf_add_dynamic_entry (info, DT_NEEDED, strindex))
1414 goto error_free_vers;
1415 }
1416 }
1417 }
1418
1419 /* Now that all the symbols from this input file are created, handle
1420 .symver foo, foo@BAR such that any relocs against foo become foo@BAR. */
1421 if (nondeflt_vers != NULL)
1422 {
1423 bfd_size_type cnt, symidx;
1424
1425 for (cnt = 0; cnt < nondeflt_vers_cnt; ++cnt)
1426 {
1427 struct elf_link_hash_entry *h = nondeflt_vers[cnt], *hi;
1428 char *shortname, *p;
1429
1430 p = strchr (h->root.root.string, ELF_VER_CHR);
1431 if (p == NULL
1432 || (h->root.type != bfd_link_hash_defined
1433 && h->root.type != bfd_link_hash_defweak))
1434 continue;
1435
1436 amt = p - h->root.root.string;
1437 shortname = bfd_malloc (amt + 1);
1438 memcpy (shortname, h->root.root.string, amt);
1439 shortname[amt] = '\0';
1440
1441 hi = (struct elf_link_hash_entry *)
1442 bfd_link_hash_lookup (info->hash, shortname,
1443 FALSE, FALSE, FALSE);
1444 if (hi != NULL
1445 && hi->root.type == h->root.type
1446 && hi->root.u.def.value == h->root.u.def.value
1447 && hi->root.u.def.section == h->root.u.def.section)
1448 {
1449 (*bed->elf_backend_hide_symbol) (info, hi, TRUE);
1450 hi->root.type = bfd_link_hash_indirect;
1451 hi->root.u.i.link = (struct bfd_link_hash_entry *) h;
1452 (*bed->elf_backend_copy_indirect_symbol) (bed, h, hi);
1453 sym_hash = elf_sym_hashes (abfd);
1454 if (sym_hash)
1455 for (symidx = 0; symidx < extsymcount; ++symidx)
1456 if (sym_hash[symidx] == hi)
1457 {
1458 sym_hash[symidx] = h;
1459 break;
1460 }
1461 }
1462 free (shortname);
1463 }
1464 free (nondeflt_vers);
1465 nondeflt_vers = NULL;
1466 }
1467
1468 if (extversym != NULL)
1469 {
1470 free (extversym);
1471 extversym = NULL;
1472 }
1473
1474 if (isymbuf != NULL)
1475 free (isymbuf);
1476 isymbuf = NULL;
1477
1478 /* Now set the weakdefs field correctly for all the weak defined
1479 symbols we found. The only way to do this is to search all the
1480 symbols. Since we only need the information for non functions in
1481 dynamic objects, that's the only time we actually put anything on
1482 the list WEAKS. We need this information so that if a regular
1483 object refers to a symbol defined weakly in a dynamic object, the
1484 real symbol in the dynamic object is also put in the dynamic
1485 symbols; we also must arrange for both symbols to point to the
1486 same memory location. We could handle the general case of symbol
1487 aliasing, but a general symbol alias can only be generated in
1488 assembler code, handling it correctly would be very time
1489 consuming, and other ELF linkers don't handle general aliasing
1490 either. */
1491 while (weaks != NULL)
1492 {
1493 struct elf_link_hash_entry *hlook;
1494 asection *slook;
1495 bfd_vma vlook;
1496 struct elf_link_hash_entry **hpp;
1497 struct elf_link_hash_entry **hppend;
1498
1499 hlook = weaks;
1500 weaks = hlook->weakdef;
1501 hlook->weakdef = NULL;
1502
1503 BFD_ASSERT (hlook->root.type == bfd_link_hash_defined
1504 || hlook->root.type == bfd_link_hash_defweak
1505 || hlook->root.type == bfd_link_hash_common
1506 || hlook->root.type == bfd_link_hash_indirect);
1507 slook = hlook->root.u.def.section;
1508 vlook = hlook->root.u.def.value;
1509
1510 hpp = elf_sym_hashes (abfd);
1511 hppend = hpp + extsymcount;
1512 for (; hpp < hppend; hpp++)
1513 {
1514 struct elf_link_hash_entry *h;
1515
1516 h = *hpp;
1517 if (h != NULL && h != hlook
1518 && h->root.type == bfd_link_hash_defined
1519 && h->root.u.def.section == slook
1520 && h->root.u.def.value == vlook)
1521 {
1522 hlook->weakdef = h;
1523
1524 /* If the weak definition is in the list of dynamic
1525 symbols, make sure the real definition is put there
1526 as well. */
1527 if (hlook->dynindx != -1
1528 && h->dynindx == -1)
1529 {
1530 if (! _bfd_elf_link_record_dynamic_symbol (info, h))
1531 goto error_return;
1532 }
1533
1534 /* If the real definition is in the list of dynamic
1535 symbols, make sure the weak definition is put there
1536 as well. If we don't do this, then the dynamic
1537 loader might not merge the entries for the real
1538 definition and the weak definition. */
1539 if (h->dynindx != -1
1540 && hlook->dynindx == -1)
1541 {
1542 if (! _bfd_elf_link_record_dynamic_symbol (info, hlook))
1543 goto error_return;
1544 }
1545 break;
1546 }
1547 }
1548 }
1549
1550 /* If this object is the same format as the output object, and it is
1551 not a shared library, then let the backend look through the
1552 relocs.
1553
1554 This is required to build global offset table entries and to
1555 arrange for dynamic relocs. It is not required for the
1556 particular common case of linking non PIC code, even when linking
1557 against shared libraries, but unfortunately there is no way of
1558 knowing whether an object file has been compiled PIC or not.
1559 Looking through the relocs is not particularly time consuming.
1560 The problem is that we must either (1) keep the relocs in memory,
1561 which causes the linker to require additional runtime memory or
1562 (2) read the relocs twice from the input file, which wastes time.
1563 This would be a good case for using mmap.
1564
1565 I have no idea how to handle linking PIC code into a file of a
1566 different format. It probably can't be done. */
1567 check_relocs = get_elf_backend_data (abfd)->check_relocs;
1568 if (! dynamic
1569 && abfd->xvec == info->hash->creator
1570 && check_relocs != NULL)
1571 {
1572 asection *o;
1573
1574 for (o = abfd->sections; o != NULL; o = o->next)
1575 {
1576 Elf_Internal_Rela *internal_relocs;
1577 bfd_boolean ok;
1578
1579 if ((o->flags & SEC_RELOC) == 0
1580 || o->reloc_count == 0
1581 || ((info->strip == strip_all || info->strip == strip_debugger)
1582 && (o->flags & SEC_DEBUGGING) != 0)
1583 || bfd_is_abs_section (o->output_section))
1584 continue;
1585
1586 internal_relocs = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL,
1587 info->keep_memory);
1588 if (internal_relocs == NULL)
1589 goto error_return;
1590
1591 ok = (*check_relocs) (abfd, info, o, internal_relocs);
1592
1593 if (elf_section_data (o)->relocs != internal_relocs)
1594 free (internal_relocs);
1595
1596 if (! ok)
1597 goto error_return;
1598 }
1599 }
1600
1601 /* If this is a non-traditional link, try to optimize the handling
1602 of the .stab/.stabstr sections. */
1603 if (! dynamic
1604 && ! info->traditional_format
1605 && info->hash->creator->flavour == bfd_target_elf_flavour
1606 && is_elf_hash_table (info)
1607 && (info->strip != strip_all && info->strip != strip_debugger))
1608 {
1609 asection *stab, *stabstr;
1610
1611 stab = bfd_get_section_by_name (abfd, ".stab");
1612 if (stab != NULL
1613 && (stab->flags & SEC_MERGE) == 0
1614 && !bfd_is_abs_section (stab->output_section))
1615 {
1616 stabstr = bfd_get_section_by_name (abfd, ".stabstr");
1617
1618 if (stabstr != NULL)
1619 {
1620 struct bfd_elf_section_data *secdata;
1621
1622 secdata = elf_section_data (stab);
1623 if (! _bfd_link_section_stabs (abfd,
1624 & hash_table->stab_info,
1625 stab, stabstr,
1626 &secdata->sec_info))
1627 goto error_return;
1628 if (secdata->sec_info)
1629 stab->sec_info_type = ELF_INFO_TYPE_STABS;
1630 }
1631 }
1632 }
1633
1634 if (! info->relocatable && ! dynamic
1635 && is_elf_hash_table (info))
1636 {
1637 asection *s;
1638
1639 for (s = abfd->sections; s != NULL; s = s->next)
1640 if ((s->flags & SEC_MERGE) != 0
1641 && !bfd_is_abs_section (s->output_section))
1642 {
1643 struct bfd_elf_section_data *secdata;
1644
1645 secdata = elf_section_data (s);
1646 if (! _bfd_merge_section (abfd,
1647 & hash_table->merge_info,
1648 s, &secdata->sec_info))
1649 goto error_return;
1650 else if (secdata->sec_info)
1651 s->sec_info_type = ELF_INFO_TYPE_MERGE;
1652 }
1653 }
1654
1655 if (is_elf_hash_table (info))
1656 {
1657 /* Add this bfd to the loaded list. */
1658 struct elf_link_loaded_list *n;
1659
1660 n = bfd_alloc (abfd, sizeof (struct elf_link_loaded_list));
1661 if (n == NULL)
1662 goto error_return;
1663 n->abfd = abfd;
1664 n->next = hash_table->loaded;
1665 hash_table->loaded = n;
1666 }
1667
1668 return TRUE;
1669
1670 error_free_vers:
1671 if (nondeflt_vers != NULL)
1672 free (nondeflt_vers);
1673 if (extversym != NULL)
1674 free (extversym);
1675 error_free_sym:
1676 if (isymbuf != NULL)
1677 free (isymbuf);
1678 error_return:
1679 return FALSE;
1680 }
1681
1682 /* Add an entry to the .dynamic table. */
1683
1684 bfd_boolean
1685 elf_add_dynamic_entry (struct bfd_link_info *info, bfd_vma tag, bfd_vma val)
1686 {
1687 Elf_Internal_Dyn dyn;
1688 bfd *dynobj;
1689 asection *s;
1690 bfd_size_type newsize;
1691 bfd_byte *newcontents;
1692
1693 if (! is_elf_hash_table (info))
1694 return FALSE;
1695
1696 dynobj = elf_hash_table (info)->dynobj;
1697
1698 s = bfd_get_section_by_name (dynobj, ".dynamic");
1699 BFD_ASSERT (s != NULL);
1700
1701 newsize = s->_raw_size + sizeof (Elf_External_Dyn);
1702 newcontents = bfd_realloc (s->contents, newsize);
1703 if (newcontents == NULL)
1704 return FALSE;
1705
1706 dyn.d_tag = tag;
1707 dyn.d_un.d_val = val;
1708 elf_swap_dyn_out (dynobj, &dyn,
1709 (Elf_External_Dyn *) (newcontents + s->_raw_size));
1710
1711 s->_raw_size = newsize;
1712 s->contents = newcontents;
1713
1714 return TRUE;
1715 }
1716 \f
1717 /* Array used to determine the number of hash table buckets to use
1718 based on the number of symbols there are. If there are fewer than
1719 3 symbols we use 1 bucket, fewer than 17 symbols we use 3 buckets,
1720 fewer than 37 we use 17 buckets, and so forth. We never use more
1721 than 32771 buckets. */
1722
1723 static const size_t elf_buckets[] =
1724 {
1725 1, 3, 17, 37, 67, 97, 131, 197, 263, 521, 1031, 2053, 4099, 8209,
1726 16411, 32771, 0
1727 };
1728
1729 /* Compute bucket count for hashing table. We do not use a static set
1730 of possible tables sizes anymore. Instead we determine for all
1731 possible reasonable sizes of the table the outcome (i.e., the
1732 number of collisions etc) and choose the best solution. The
1733 weighting functions are not too simple to allow the table to grow
1734 without bounds. Instead one of the weighting factors is the size.
1735 Therefore the result is always a good payoff between few collisions
1736 (= short chain lengths) and table size. */
1737 static size_t
1738 compute_bucket_count (struct bfd_link_info *info)
1739 {
1740 size_t dynsymcount = elf_hash_table (info)->dynsymcount;
1741 size_t best_size = 0;
1742 unsigned long int *hashcodes;
1743 unsigned long int *hashcodesp;
1744 unsigned long int i;
1745 bfd_size_type amt;
1746
1747 /* Compute the hash values for all exported symbols. At the same
1748 time store the values in an array so that we could use them for
1749 optimizations. */
1750 amt = dynsymcount;
1751 amt *= sizeof (unsigned long int);
1752 hashcodes = bfd_malloc (amt);
1753 if (hashcodes == NULL)
1754 return 0;
1755 hashcodesp = hashcodes;
1756
1757 /* Put all hash values in HASHCODES. */
1758 elf_link_hash_traverse (elf_hash_table (info),
1759 elf_collect_hash_codes, &hashcodesp);
1760
1761 /* We have a problem here. The following code to optimize the table
1762 size requires an integer type with more the 32 bits. If
1763 BFD_HOST_U_64_BIT is set we know about such a type. */
1764 #ifdef BFD_HOST_U_64_BIT
1765 if (info->optimize)
1766 {
1767 unsigned long int nsyms = hashcodesp - hashcodes;
1768 size_t minsize;
1769 size_t maxsize;
1770 BFD_HOST_U_64_BIT best_chlen = ~((BFD_HOST_U_64_BIT) 0);
1771 unsigned long int *counts ;
1772
1773 /* Possible optimization parameters: if we have NSYMS symbols we say
1774 that the hashing table must at least have NSYMS/4 and at most
1775 2*NSYMS buckets. */
1776 minsize = nsyms / 4;
1777 if (minsize == 0)
1778 minsize = 1;
1779 best_size = maxsize = nsyms * 2;
1780
1781 /* Create array where we count the collisions in. We must use bfd_malloc
1782 since the size could be large. */
1783 amt = maxsize;
1784 amt *= sizeof (unsigned long int);
1785 counts = bfd_malloc (amt);
1786 if (counts == NULL)
1787 {
1788 free (hashcodes);
1789 return 0;
1790 }
1791
1792 /* Compute the "optimal" size for the hash table. The criteria is a
1793 minimal chain length. The minor criteria is (of course) the size
1794 of the table. */
1795 for (i = minsize; i < maxsize; ++i)
1796 {
1797 /* Walk through the array of hashcodes and count the collisions. */
1798 BFD_HOST_U_64_BIT max;
1799 unsigned long int j;
1800 unsigned long int fact;
1801
1802 memset (counts, '\0', i * sizeof (unsigned long int));
1803
1804 /* Determine how often each hash bucket is used. */
1805 for (j = 0; j < nsyms; ++j)
1806 ++counts[hashcodes[j] % i];
1807
1808 /* For the weight function we need some information about the
1809 pagesize on the target. This is information need not be 100%
1810 accurate. Since this information is not available (so far) we
1811 define it here to a reasonable default value. If it is crucial
1812 to have a better value some day simply define this value. */
1813 # ifndef BFD_TARGET_PAGESIZE
1814 # define BFD_TARGET_PAGESIZE (4096)
1815 # endif
1816
1817 /* We in any case need 2 + NSYMS entries for the size values and
1818 the chains. */
1819 max = (2 + nsyms) * (ARCH_SIZE / 8);
1820
1821 # if 1
1822 /* Variant 1: optimize for short chains. We add the squares
1823 of all the chain lengths (which favous many small chain
1824 over a few long chains). */
1825 for (j = 0; j < i; ++j)
1826 max += counts[j] * counts[j];
1827
1828 /* This adds penalties for the overall size of the table. */
1829 fact = i / (BFD_TARGET_PAGESIZE / (ARCH_SIZE / 8)) + 1;
1830 max *= fact * fact;
1831 # else
1832 /* Variant 2: Optimize a lot more for small table. Here we
1833 also add squares of the size but we also add penalties for
1834 empty slots (the +1 term). */
1835 for (j = 0; j < i; ++j)
1836 max += (1 + counts[j]) * (1 + counts[j]);
1837
1838 /* The overall size of the table is considered, but not as
1839 strong as in variant 1, where it is squared. */
1840 fact = i / (BFD_TARGET_PAGESIZE / (ARCH_SIZE / 8)) + 1;
1841 max *= fact;
1842 # endif
1843
1844 /* Compare with current best results. */
1845 if (max < best_chlen)
1846 {
1847 best_chlen = max;
1848 best_size = i;
1849 }
1850 }
1851
1852 free (counts);
1853 }
1854 else
1855 #endif /* defined (BFD_HOST_U_64_BIT) */
1856 {
1857 /* This is the fallback solution if no 64bit type is available or if we
1858 are not supposed to spend much time on optimizations. We select the
1859 bucket count using a fixed set of numbers. */
1860 for (i = 0; elf_buckets[i] != 0; i++)
1861 {
1862 best_size = elf_buckets[i];
1863 if (dynsymcount < elf_buckets[i + 1])
1864 break;
1865 }
1866 }
1867
1868 /* Free the arrays we needed. */
1869 free (hashcodes);
1870
1871 return best_size;
1872 }
1873
1874 /* Set up the sizes and contents of the ELF dynamic sections. This is
1875 called by the ELF linker emulation before_allocation routine. We
1876 must set the sizes of the sections before the linker sets the
1877 addresses of the various sections. */
1878
1879 bfd_boolean
1880 NAME(bfd_elf,size_dynamic_sections) (bfd *output_bfd,
1881 const char *soname,
1882 const char *rpath,
1883 const char *filter_shlib,
1884 const char * const *auxiliary_filters,
1885 struct bfd_link_info *info,
1886 asection **sinterpptr,
1887 struct bfd_elf_version_tree *verdefs)
1888 {
1889 bfd_size_type soname_indx;
1890 bfd *dynobj;
1891 const struct elf_backend_data *bed;
1892 struct elf_assign_sym_version_info asvinfo;
1893
1894 *sinterpptr = NULL;
1895
1896 soname_indx = (bfd_size_type) -1;
1897
1898 if (info->hash->creator->flavour != bfd_target_elf_flavour)
1899 return TRUE;
1900
1901 if (! is_elf_hash_table (info))
1902 return TRUE;
1903
1904 if (info->execstack)
1905 elf_tdata (output_bfd)->stack_flags = PF_R | PF_W | PF_X;
1906 else if (info->noexecstack)
1907 elf_tdata (output_bfd)->stack_flags = PF_R | PF_W;
1908 else
1909 {
1910 bfd *inputobj;
1911 asection *notesec = NULL;
1912 int exec = 0;
1913
1914 for (inputobj = info->input_bfds;
1915 inputobj;
1916 inputobj = inputobj->link_next)
1917 {
1918 asection *s;
1919
1920 if (inputobj->flags & DYNAMIC)
1921 continue;
1922 s = bfd_get_section_by_name (inputobj, ".note.GNU-stack");
1923 if (s)
1924 {
1925 if (s->flags & SEC_CODE)
1926 exec = PF_X;
1927 notesec = s;
1928 }
1929 else
1930 exec = PF_X;
1931 }
1932 if (notesec)
1933 {
1934 elf_tdata (output_bfd)->stack_flags = PF_R | PF_W | exec;
1935 if (exec && info->relocatable
1936 && notesec->output_section != bfd_abs_section_ptr)
1937 notesec->output_section->flags |= SEC_CODE;
1938 }
1939 }
1940
1941 /* Any syms created from now on start with -1 in
1942 got.refcount/offset and plt.refcount/offset. */
1943 elf_hash_table (info)->init_refcount = elf_hash_table (info)->init_offset;
1944
1945 /* The backend may have to create some sections regardless of whether
1946 we're dynamic or not. */
1947 bed = get_elf_backend_data (output_bfd);
1948 if (bed->elf_backend_always_size_sections
1949 && ! (*bed->elf_backend_always_size_sections) (output_bfd, info))
1950 return FALSE;
1951
1952 dynobj = elf_hash_table (info)->dynobj;
1953
1954 /* If there were no dynamic objects in the link, there is nothing to
1955 do here. */
1956 if (dynobj == NULL)
1957 return TRUE;
1958
1959 if (! _bfd_elf_maybe_strip_eh_frame_hdr (info))
1960 return FALSE;
1961
1962 if (elf_hash_table (info)->dynamic_sections_created)
1963 {
1964 struct elf_info_failed eif;
1965 struct elf_link_hash_entry *h;
1966 asection *dynstr;
1967 struct bfd_elf_version_tree *t;
1968 struct bfd_elf_version_expr *d;
1969 bfd_boolean all_defined;
1970
1971 *sinterpptr = bfd_get_section_by_name (dynobj, ".interp");
1972 BFD_ASSERT (*sinterpptr != NULL || info->shared);
1973
1974 if (soname != NULL)
1975 {
1976 soname_indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr,
1977 soname, TRUE);
1978 if (soname_indx == (bfd_size_type) -1
1979 || ! elf_add_dynamic_entry (info, DT_SONAME, soname_indx))
1980 return FALSE;
1981 }
1982
1983 if (info->symbolic)
1984 {
1985 if (! elf_add_dynamic_entry (info, DT_SYMBOLIC, 0))
1986 return FALSE;
1987 info->flags |= DF_SYMBOLIC;
1988 }
1989
1990 if (rpath != NULL)
1991 {
1992 bfd_size_type indx;
1993
1994 indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr, rpath,
1995 TRUE);
1996 if (info->new_dtags)
1997 _bfd_elf_strtab_addref (elf_hash_table (info)->dynstr, indx);
1998 if (indx == (bfd_size_type) -1
1999 || ! elf_add_dynamic_entry (info, DT_RPATH, indx)
2000 || (info->new_dtags
2001 && ! elf_add_dynamic_entry (info, DT_RUNPATH, indx)))
2002 return FALSE;
2003 }
2004
2005 if (filter_shlib != NULL)
2006 {
2007 bfd_size_type indx;
2008
2009 indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr,
2010 filter_shlib, TRUE);
2011 if (indx == (bfd_size_type) -1
2012 || ! elf_add_dynamic_entry (info, DT_FILTER, indx))
2013 return FALSE;
2014 }
2015
2016 if (auxiliary_filters != NULL)
2017 {
2018 const char * const *p;
2019
2020 for (p = auxiliary_filters; *p != NULL; p++)
2021 {
2022 bfd_size_type indx;
2023
2024 indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr,
2025 *p, TRUE);
2026 if (indx == (bfd_size_type) -1
2027 || ! elf_add_dynamic_entry (info, DT_AUXILIARY, indx))
2028 return FALSE;
2029 }
2030 }
2031
2032 eif.info = info;
2033 eif.verdefs = verdefs;
2034 eif.failed = FALSE;
2035
2036 /* If we are supposed to export all symbols into the dynamic symbol
2037 table (this is not the normal case), then do so. */
2038 if (info->export_dynamic)
2039 {
2040 elf_link_hash_traverse (elf_hash_table (info),
2041 _bfd_elf_export_symbol,
2042 &eif);
2043 if (eif.failed)
2044 return FALSE;
2045 }
2046
2047 /* Make all global versions with definiton. */
2048 for (t = verdefs; t != NULL; t = t->next)
2049 for (d = t->globals; d != NULL; d = d->next)
2050 if (!d->symver && strchr (d->pattern, '*') == NULL)
2051 {
2052 const char *verstr, *name;
2053 size_t namelen, verlen, newlen;
2054 char *newname, *p;
2055 struct elf_link_hash_entry *newh;
2056
2057 name = d->pattern;
2058 namelen = strlen (name);
2059 verstr = t->name;
2060 verlen = strlen (verstr);
2061 newlen = namelen + verlen + 3;
2062
2063 newname = bfd_malloc (newlen);
2064 if (newname == NULL)
2065 return FALSE;
2066 memcpy (newname, name, namelen);
2067
2068 /* Check the hidden versioned definition. */
2069 p = newname + namelen;
2070 *p++ = ELF_VER_CHR;
2071 memcpy (p, verstr, verlen + 1);
2072 newh = elf_link_hash_lookup (elf_hash_table (info),
2073 newname, FALSE, FALSE,
2074 FALSE);
2075 if (newh == NULL
2076 || (newh->root.type != bfd_link_hash_defined
2077 && newh->root.type != bfd_link_hash_defweak))
2078 {
2079 /* Check the default versioned definition. */
2080 *p++ = ELF_VER_CHR;
2081 memcpy (p, verstr, verlen + 1);
2082 newh = elf_link_hash_lookup (elf_hash_table (info),
2083 newname, FALSE, FALSE,
2084 FALSE);
2085 }
2086 free (newname);
2087
2088 /* Mark this version if there is a definition and it is
2089 not defined in a shared object. */
2090 if (newh != NULL
2091 && ((newh->elf_link_hash_flags
2092 & ELF_LINK_HASH_DEF_DYNAMIC) == 0)
2093 && (newh->root.type == bfd_link_hash_defined
2094 || newh->root.type == bfd_link_hash_defweak))
2095 d->symver = 1;
2096 }
2097
2098 /* Attach all the symbols to their version information. */
2099 asvinfo.output_bfd = output_bfd;
2100 asvinfo.info = info;
2101 asvinfo.verdefs = verdefs;
2102 asvinfo.failed = FALSE;
2103
2104 elf_link_hash_traverse (elf_hash_table (info),
2105 _bfd_elf_link_assign_sym_version,
2106 &asvinfo);
2107 if (asvinfo.failed)
2108 return FALSE;
2109
2110 if (!info->allow_undefined_version)
2111 {
2112 /* Check if all global versions have a definiton. */
2113 all_defined = TRUE;
2114 for (t = verdefs; t != NULL; t = t->next)
2115 for (d = t->globals; d != NULL; d = d->next)
2116 if (!d->symver && !d->script
2117 && strchr (d->pattern, '*') == NULL)
2118 {
2119 (*_bfd_error_handler)
2120 (_("%s: undefined version: %s"),
2121 d->pattern, t->name);
2122 all_defined = FALSE;
2123 }
2124
2125 if (!all_defined)
2126 {
2127 bfd_set_error (bfd_error_bad_value);
2128 return FALSE;
2129 }
2130 }
2131
2132 /* Find all symbols which were defined in a dynamic object and make
2133 the backend pick a reasonable value for them. */
2134 elf_link_hash_traverse (elf_hash_table (info),
2135 _bfd_elf_adjust_dynamic_symbol,
2136 &eif);
2137 if (eif.failed)
2138 return FALSE;
2139
2140 /* Add some entries to the .dynamic section. We fill in some of the
2141 values later, in elf_bfd_final_link, but we must add the entries
2142 now so that we know the final size of the .dynamic section. */
2143
2144 /* If there are initialization and/or finalization functions to
2145 call then add the corresponding DT_INIT/DT_FINI entries. */
2146 h = (info->init_function
2147 ? elf_link_hash_lookup (elf_hash_table (info),
2148 info->init_function, FALSE,
2149 FALSE, FALSE)
2150 : NULL);
2151 if (h != NULL
2152 && (h->elf_link_hash_flags & (ELF_LINK_HASH_REF_REGULAR
2153 | ELF_LINK_HASH_DEF_REGULAR)) != 0)
2154 {
2155 if (! elf_add_dynamic_entry (info, DT_INIT, 0))
2156 return FALSE;
2157 }
2158 h = (info->fini_function
2159 ? elf_link_hash_lookup (elf_hash_table (info),
2160 info->fini_function, FALSE,
2161 FALSE, FALSE)
2162 : NULL);
2163 if (h != NULL
2164 && (h->elf_link_hash_flags & (ELF_LINK_HASH_REF_REGULAR
2165 | ELF_LINK_HASH_DEF_REGULAR)) != 0)
2166 {
2167 if (! elf_add_dynamic_entry (info, DT_FINI, 0))
2168 return FALSE;
2169 }
2170
2171 if (bfd_get_section_by_name (output_bfd, ".preinit_array") != NULL)
2172 {
2173 /* DT_PREINIT_ARRAY is not allowed in shared library. */
2174 if (! info->executable)
2175 {
2176 bfd *sub;
2177 asection *o;
2178
2179 for (sub = info->input_bfds; sub != NULL;
2180 sub = sub->link_next)
2181 for (o = sub->sections; o != NULL; o = o->next)
2182 if (elf_section_data (o)->this_hdr.sh_type
2183 == SHT_PREINIT_ARRAY)
2184 {
2185 (*_bfd_error_handler)
2186 (_("%s: .preinit_array section is not allowed in DSO"),
2187 bfd_archive_filename (sub));
2188 break;
2189 }
2190
2191 bfd_set_error (bfd_error_nonrepresentable_section);
2192 return FALSE;
2193 }
2194
2195 if (!elf_add_dynamic_entry (info, DT_PREINIT_ARRAY, 0)
2196 || !elf_add_dynamic_entry (info, DT_PREINIT_ARRAYSZ, 0))
2197 return FALSE;
2198 }
2199 if (bfd_get_section_by_name (output_bfd, ".init_array") != NULL)
2200 {
2201 if (!elf_add_dynamic_entry (info, DT_INIT_ARRAY, 0)
2202 || !elf_add_dynamic_entry (info, DT_INIT_ARRAYSZ, 0))
2203 return FALSE;
2204 }
2205 if (bfd_get_section_by_name (output_bfd, ".fini_array") != NULL)
2206 {
2207 if (!elf_add_dynamic_entry (info, DT_FINI_ARRAY, 0)
2208 || !elf_add_dynamic_entry (info, DT_FINI_ARRAYSZ, 0))
2209 return FALSE;
2210 }
2211
2212 dynstr = bfd_get_section_by_name (dynobj, ".dynstr");
2213 /* If .dynstr is excluded from the link, we don't want any of
2214 these tags. Strictly, we should be checking each section
2215 individually; This quick check covers for the case where
2216 someone does a /DISCARD/ : { *(*) }. */
2217 if (dynstr != NULL && dynstr->output_section != bfd_abs_section_ptr)
2218 {
2219 bfd_size_type strsize;
2220
2221 strsize = _bfd_elf_strtab_size (elf_hash_table (info)->dynstr);
2222 if (! elf_add_dynamic_entry (info, DT_HASH, 0)
2223 || ! elf_add_dynamic_entry (info, DT_STRTAB, 0)
2224 || ! elf_add_dynamic_entry (info, DT_SYMTAB, 0)
2225 || ! elf_add_dynamic_entry (info, DT_STRSZ, strsize)
2226 || ! elf_add_dynamic_entry (info, DT_SYMENT,
2227 sizeof (Elf_External_Sym)))
2228 return FALSE;
2229 }
2230 }
2231
2232 /* The backend must work out the sizes of all the other dynamic
2233 sections. */
2234 if (bed->elf_backend_size_dynamic_sections
2235 && ! (*bed->elf_backend_size_dynamic_sections) (output_bfd, info))
2236 return FALSE;
2237
2238 if (elf_hash_table (info)->dynamic_sections_created)
2239 {
2240 bfd_size_type dynsymcount;
2241 asection *s;
2242 size_t bucketcount = 0;
2243 size_t hash_entry_size;
2244 unsigned int dtagcount;
2245
2246 /* Set up the version definition section. */
2247 s = bfd_get_section_by_name (dynobj, ".gnu.version_d");
2248 BFD_ASSERT (s != NULL);
2249
2250 /* We may have created additional version definitions if we are
2251 just linking a regular application. */
2252 verdefs = asvinfo.verdefs;
2253
2254 /* Skip anonymous version tag. */
2255 if (verdefs != NULL && verdefs->vernum == 0)
2256 verdefs = verdefs->next;
2257
2258 if (verdefs == NULL)
2259 _bfd_strip_section_from_output (info, s);
2260 else
2261 {
2262 unsigned int cdefs;
2263 bfd_size_type size;
2264 struct bfd_elf_version_tree *t;
2265 bfd_byte *p;
2266 Elf_Internal_Verdef def;
2267 Elf_Internal_Verdaux defaux;
2268
2269 cdefs = 0;
2270 size = 0;
2271
2272 /* Make space for the base version. */
2273 size += sizeof (Elf_External_Verdef);
2274 size += sizeof (Elf_External_Verdaux);
2275 ++cdefs;
2276
2277 for (t = verdefs; t != NULL; t = t->next)
2278 {
2279 struct bfd_elf_version_deps *n;
2280
2281 size += sizeof (Elf_External_Verdef);
2282 size += sizeof (Elf_External_Verdaux);
2283 ++cdefs;
2284
2285 for (n = t->deps; n != NULL; n = n->next)
2286 size += sizeof (Elf_External_Verdaux);
2287 }
2288
2289 s->_raw_size = size;
2290 s->contents = bfd_alloc (output_bfd, s->_raw_size);
2291 if (s->contents == NULL && s->_raw_size != 0)
2292 return FALSE;
2293
2294 /* Fill in the version definition section. */
2295
2296 p = s->contents;
2297
2298 def.vd_version = VER_DEF_CURRENT;
2299 def.vd_flags = VER_FLG_BASE;
2300 def.vd_ndx = 1;
2301 def.vd_cnt = 1;
2302 def.vd_aux = sizeof (Elf_External_Verdef);
2303 def.vd_next = (sizeof (Elf_External_Verdef)
2304 + sizeof (Elf_External_Verdaux));
2305
2306 if (soname_indx != (bfd_size_type) -1)
2307 {
2308 _bfd_elf_strtab_addref (elf_hash_table (info)->dynstr,
2309 soname_indx);
2310 def.vd_hash = bfd_elf_hash (soname);
2311 defaux.vda_name = soname_indx;
2312 }
2313 else
2314 {
2315 const char *name;
2316 bfd_size_type indx;
2317
2318 name = basename (output_bfd->filename);
2319 def.vd_hash = bfd_elf_hash (name);
2320 indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr,
2321 name, FALSE);
2322 if (indx == (bfd_size_type) -1)
2323 return FALSE;
2324 defaux.vda_name = indx;
2325 }
2326 defaux.vda_next = 0;
2327
2328 _bfd_elf_swap_verdef_out (output_bfd, &def,
2329 (Elf_External_Verdef *) p);
2330 p += sizeof (Elf_External_Verdef);
2331 _bfd_elf_swap_verdaux_out (output_bfd, &defaux,
2332 (Elf_External_Verdaux *) p);
2333 p += sizeof (Elf_External_Verdaux);
2334
2335 for (t = verdefs; t != NULL; t = t->next)
2336 {
2337 unsigned int cdeps;
2338 struct bfd_elf_version_deps *n;
2339 struct elf_link_hash_entry *h;
2340 struct bfd_link_hash_entry *bh;
2341
2342 cdeps = 0;
2343 for (n = t->deps; n != NULL; n = n->next)
2344 ++cdeps;
2345
2346 /* Add a symbol representing this version. */
2347 bh = NULL;
2348 if (! (_bfd_generic_link_add_one_symbol
2349 (info, dynobj, t->name, BSF_GLOBAL, bfd_abs_section_ptr,
2350 0, NULL, FALSE,
2351 get_elf_backend_data (dynobj)->collect, &bh)))
2352 return FALSE;
2353 h = (struct elf_link_hash_entry *) bh;
2354 h->elf_link_hash_flags &= ~ ELF_LINK_NON_ELF;
2355 h->elf_link_hash_flags |= ELF_LINK_HASH_DEF_REGULAR;
2356 h->type = STT_OBJECT;
2357 h->verinfo.vertree = t;
2358
2359 if (! _bfd_elf_link_record_dynamic_symbol (info, h))
2360 return FALSE;
2361
2362 def.vd_version = VER_DEF_CURRENT;
2363 def.vd_flags = 0;
2364 if (t->globals == NULL && t->locals == NULL && ! t->used)
2365 def.vd_flags |= VER_FLG_WEAK;
2366 def.vd_ndx = t->vernum + 1;
2367 def.vd_cnt = cdeps + 1;
2368 def.vd_hash = bfd_elf_hash (t->name);
2369 def.vd_aux = sizeof (Elf_External_Verdef);
2370 if (t->next != NULL)
2371 def.vd_next = (sizeof (Elf_External_Verdef)
2372 + (cdeps + 1) * sizeof (Elf_External_Verdaux));
2373 else
2374 def.vd_next = 0;
2375
2376 _bfd_elf_swap_verdef_out (output_bfd, &def,
2377 (Elf_External_Verdef *) p);
2378 p += sizeof (Elf_External_Verdef);
2379
2380 defaux.vda_name = h->dynstr_index;
2381 _bfd_elf_strtab_addref (elf_hash_table (info)->dynstr,
2382 h->dynstr_index);
2383 if (t->deps == NULL)
2384 defaux.vda_next = 0;
2385 else
2386 defaux.vda_next = sizeof (Elf_External_Verdaux);
2387 t->name_indx = defaux.vda_name;
2388
2389 _bfd_elf_swap_verdaux_out (output_bfd, &defaux,
2390 (Elf_External_Verdaux *) p);
2391 p += sizeof (Elf_External_Verdaux);
2392
2393 for (n = t->deps; n != NULL; n = n->next)
2394 {
2395 if (n->version_needed == NULL)
2396 {
2397 /* This can happen if there was an error in the
2398 version script. */
2399 defaux.vda_name = 0;
2400 }
2401 else
2402 {
2403 defaux.vda_name = n->version_needed->name_indx;
2404 _bfd_elf_strtab_addref (elf_hash_table (info)->dynstr,
2405 defaux.vda_name);
2406 }
2407 if (n->next == NULL)
2408 defaux.vda_next = 0;
2409 else
2410 defaux.vda_next = sizeof (Elf_External_Verdaux);
2411
2412 _bfd_elf_swap_verdaux_out (output_bfd, &defaux,
2413 (Elf_External_Verdaux *) p);
2414 p += sizeof (Elf_External_Verdaux);
2415 }
2416 }
2417
2418 if (! elf_add_dynamic_entry (info, DT_VERDEF, 0)
2419 || ! elf_add_dynamic_entry (info, DT_VERDEFNUM, cdefs))
2420 return FALSE;
2421
2422 elf_tdata (output_bfd)->cverdefs = cdefs;
2423 }
2424
2425 if ((info->new_dtags && info->flags) || (info->flags & DF_STATIC_TLS))
2426 {
2427 if (! elf_add_dynamic_entry (info, DT_FLAGS, info->flags))
2428 return FALSE;
2429 }
2430
2431 if (info->flags_1)
2432 {
2433 if (info->executable)
2434 info->flags_1 &= ~ (DF_1_INITFIRST
2435 | DF_1_NODELETE
2436 | DF_1_NOOPEN);
2437 if (! elf_add_dynamic_entry (info, DT_FLAGS_1, info->flags_1))
2438 return FALSE;
2439 }
2440
2441 /* Work out the size of the version reference section. */
2442
2443 s = bfd_get_section_by_name (dynobj, ".gnu.version_r");
2444 BFD_ASSERT (s != NULL);
2445 {
2446 struct elf_find_verdep_info sinfo;
2447
2448 sinfo.output_bfd = output_bfd;
2449 sinfo.info = info;
2450 sinfo.vers = elf_tdata (output_bfd)->cverdefs;
2451 if (sinfo.vers == 0)
2452 sinfo.vers = 1;
2453 sinfo.failed = FALSE;
2454
2455 elf_link_hash_traverse (elf_hash_table (info),
2456 _bfd_elf_link_find_version_dependencies,
2457 &sinfo);
2458
2459 if (elf_tdata (output_bfd)->verref == NULL)
2460 _bfd_strip_section_from_output (info, s);
2461 else
2462 {
2463 Elf_Internal_Verneed *t;
2464 unsigned int size;
2465 unsigned int crefs;
2466 bfd_byte *p;
2467
2468 /* Build the version definition section. */
2469 size = 0;
2470 crefs = 0;
2471 for (t = elf_tdata (output_bfd)->verref;
2472 t != NULL;
2473 t = t->vn_nextref)
2474 {
2475 Elf_Internal_Vernaux *a;
2476
2477 size += sizeof (Elf_External_Verneed);
2478 ++crefs;
2479 for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr)
2480 size += sizeof (Elf_External_Vernaux);
2481 }
2482
2483 s->_raw_size = size;
2484 s->contents = bfd_alloc (output_bfd, s->_raw_size);
2485 if (s->contents == NULL)
2486 return FALSE;
2487
2488 p = s->contents;
2489 for (t = elf_tdata (output_bfd)->verref;
2490 t != NULL;
2491 t = t->vn_nextref)
2492 {
2493 unsigned int caux;
2494 Elf_Internal_Vernaux *a;
2495 bfd_size_type indx;
2496
2497 caux = 0;
2498 for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr)
2499 ++caux;
2500
2501 t->vn_version = VER_NEED_CURRENT;
2502 t->vn_cnt = caux;
2503 indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr,
2504 elf_dt_name (t->vn_bfd) != NULL
2505 ? elf_dt_name (t->vn_bfd)
2506 : basename (t->vn_bfd->filename),
2507 FALSE);
2508 if (indx == (bfd_size_type) -1)
2509 return FALSE;
2510 t->vn_file = indx;
2511 t->vn_aux = sizeof (Elf_External_Verneed);
2512 if (t->vn_nextref == NULL)
2513 t->vn_next = 0;
2514 else
2515 t->vn_next = (sizeof (Elf_External_Verneed)
2516 + caux * sizeof (Elf_External_Vernaux));
2517
2518 _bfd_elf_swap_verneed_out (output_bfd, t,
2519 (Elf_External_Verneed *) p);
2520 p += sizeof (Elf_External_Verneed);
2521
2522 for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr)
2523 {
2524 a->vna_hash = bfd_elf_hash (a->vna_nodename);
2525 indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr,
2526 a->vna_nodename, FALSE);
2527 if (indx == (bfd_size_type) -1)
2528 return FALSE;
2529 a->vna_name = indx;
2530 if (a->vna_nextptr == NULL)
2531 a->vna_next = 0;
2532 else
2533 a->vna_next = sizeof (Elf_External_Vernaux);
2534
2535 _bfd_elf_swap_vernaux_out (output_bfd, a,
2536 (Elf_External_Vernaux *) p);
2537 p += sizeof (Elf_External_Vernaux);
2538 }
2539 }
2540
2541 if (! elf_add_dynamic_entry (info, DT_VERNEED, 0)
2542 || ! elf_add_dynamic_entry (info, DT_VERNEEDNUM, crefs))
2543 return FALSE;
2544
2545 elf_tdata (output_bfd)->cverrefs = crefs;
2546 }
2547 }
2548
2549 /* Assign dynsym indicies. In a shared library we generate a
2550 section symbol for each output section, which come first.
2551 Next come all of the back-end allocated local dynamic syms,
2552 followed by the rest of the global symbols. */
2553
2554 dynsymcount = _bfd_elf_link_renumber_dynsyms (output_bfd, info);
2555
2556 /* Work out the size of the symbol version section. */
2557 s = bfd_get_section_by_name (dynobj, ".gnu.version");
2558 BFD_ASSERT (s != NULL);
2559 if (dynsymcount == 0
2560 || (verdefs == NULL && elf_tdata (output_bfd)->verref == NULL))
2561 {
2562 _bfd_strip_section_from_output (info, s);
2563 /* The DYNSYMCOUNT might have changed if we were going to
2564 output a dynamic symbol table entry for S. */
2565 dynsymcount = _bfd_elf_link_renumber_dynsyms (output_bfd, info);
2566 }
2567 else
2568 {
2569 s->_raw_size = dynsymcount * sizeof (Elf_External_Versym);
2570 s->contents = bfd_zalloc (output_bfd, s->_raw_size);
2571 if (s->contents == NULL)
2572 return FALSE;
2573
2574 if (! elf_add_dynamic_entry (info, DT_VERSYM, 0))
2575 return FALSE;
2576 }
2577
2578 /* Set the size of the .dynsym and .hash sections. We counted
2579 the number of dynamic symbols in elf_link_add_object_symbols.
2580 We will build the contents of .dynsym and .hash when we build
2581 the final symbol table, because until then we do not know the
2582 correct value to give the symbols. We built the .dynstr
2583 section as we went along in elf_link_add_object_symbols. */
2584 s = bfd_get_section_by_name (dynobj, ".dynsym");
2585 BFD_ASSERT (s != NULL);
2586 s->_raw_size = dynsymcount * sizeof (Elf_External_Sym);
2587 s->contents = bfd_alloc (output_bfd, s->_raw_size);
2588 if (s->contents == NULL && s->_raw_size != 0)
2589 return FALSE;
2590
2591 if (dynsymcount != 0)
2592 {
2593 Elf_Internal_Sym isym;
2594
2595 /* The first entry in .dynsym is a dummy symbol. */
2596 isym.st_value = 0;
2597 isym.st_size = 0;
2598 isym.st_name = 0;
2599 isym.st_info = 0;
2600 isym.st_other = 0;
2601 isym.st_shndx = 0;
2602 elf_swap_symbol_out (output_bfd, &isym, s->contents, 0);
2603 }
2604
2605 /* Compute the size of the hashing table. As a side effect this
2606 computes the hash values for all the names we export. */
2607 bucketcount = compute_bucket_count (info);
2608
2609 s = bfd_get_section_by_name (dynobj, ".hash");
2610 BFD_ASSERT (s != NULL);
2611 hash_entry_size = elf_section_data (s)->this_hdr.sh_entsize;
2612 s->_raw_size = ((2 + bucketcount + dynsymcount) * hash_entry_size);
2613 s->contents = bfd_zalloc (output_bfd, s->_raw_size);
2614 if (s->contents == NULL)
2615 return FALSE;
2616
2617 bfd_put (8 * hash_entry_size, output_bfd, bucketcount, s->contents);
2618 bfd_put (8 * hash_entry_size, output_bfd, dynsymcount,
2619 s->contents + hash_entry_size);
2620
2621 elf_hash_table (info)->bucketcount = bucketcount;
2622
2623 s = bfd_get_section_by_name (dynobj, ".dynstr");
2624 BFD_ASSERT (s != NULL);
2625
2626 elf_finalize_dynstr (output_bfd, info);
2627
2628 s->_raw_size = _bfd_elf_strtab_size (elf_hash_table (info)->dynstr);
2629
2630 for (dtagcount = 0; dtagcount <= info->spare_dynamic_tags; ++dtagcount)
2631 if (! elf_add_dynamic_entry (info, DT_NULL, 0))
2632 return FALSE;
2633 }
2634
2635 return TRUE;
2636 }
2637 \f
2638 /* This function is used to adjust offsets into .dynstr for
2639 dynamic symbols. This is called via elf_link_hash_traverse. */
2640
2641 static bfd_boolean
2642 elf_adjust_dynstr_offsets (struct elf_link_hash_entry *h, void *data)
2643 {
2644 struct elf_strtab_hash *dynstr = data;
2645
2646 if (h->root.type == bfd_link_hash_warning)
2647 h = (struct elf_link_hash_entry *) h->root.u.i.link;
2648
2649 if (h->dynindx != -1)
2650 h->dynstr_index = _bfd_elf_strtab_offset (dynstr, h->dynstr_index);
2651 return TRUE;
2652 }
2653
2654 /* Assign string offsets in .dynstr, update all structures referencing
2655 them. */
2656
2657 static bfd_boolean
2658 elf_finalize_dynstr (bfd *output_bfd, struct bfd_link_info *info)
2659 {
2660 struct elf_link_local_dynamic_entry *entry;
2661 struct elf_strtab_hash *dynstr = elf_hash_table (info)->dynstr;
2662 bfd *dynobj = elf_hash_table (info)->dynobj;
2663 asection *sdyn;
2664 bfd_size_type size;
2665 Elf_External_Dyn *dyncon, *dynconend;
2666
2667 _bfd_elf_strtab_finalize (dynstr);
2668 size = _bfd_elf_strtab_size (dynstr);
2669
2670 /* Update all .dynamic entries referencing .dynstr strings. */
2671 sdyn = bfd_get_section_by_name (dynobj, ".dynamic");
2672 BFD_ASSERT (sdyn != NULL);
2673
2674 dyncon = (Elf_External_Dyn *) sdyn->contents;
2675 dynconend = (Elf_External_Dyn *) (sdyn->contents +
2676 sdyn->_raw_size);
2677 for (; dyncon < dynconend; dyncon++)
2678 {
2679 Elf_Internal_Dyn dyn;
2680
2681 elf_swap_dyn_in (dynobj, dyncon, & dyn);
2682 switch (dyn.d_tag)
2683 {
2684 case DT_STRSZ:
2685 dyn.d_un.d_val = size;
2686 elf_swap_dyn_out (dynobj, & dyn, dyncon);
2687 break;
2688 case DT_NEEDED:
2689 case DT_SONAME:
2690 case DT_RPATH:
2691 case DT_RUNPATH:
2692 case DT_FILTER:
2693 case DT_AUXILIARY:
2694 dyn.d_un.d_val = _bfd_elf_strtab_offset (dynstr, dyn.d_un.d_val);
2695 elf_swap_dyn_out (dynobj, & dyn, dyncon);
2696 break;
2697 default:
2698 break;
2699 }
2700 }
2701
2702 /* Now update local dynamic symbols. */
2703 for (entry = elf_hash_table (info)->dynlocal; entry ; entry = entry->next)
2704 entry->isym.st_name = _bfd_elf_strtab_offset (dynstr,
2705 entry->isym.st_name);
2706
2707 /* And the rest of dynamic symbols. */
2708 elf_link_hash_traverse (elf_hash_table (info),
2709 elf_adjust_dynstr_offsets, dynstr);
2710
2711 /* Adjust version definitions. */
2712 if (elf_tdata (output_bfd)->cverdefs)
2713 {
2714 asection *s;
2715 bfd_byte *p;
2716 bfd_size_type i;
2717 Elf_Internal_Verdef def;
2718 Elf_Internal_Verdaux defaux;
2719
2720 s = bfd_get_section_by_name (dynobj, ".gnu.version_d");
2721 p = (bfd_byte *) s->contents;
2722 do
2723 {
2724 _bfd_elf_swap_verdef_in (output_bfd, (Elf_External_Verdef *) p,
2725 &def);
2726 p += sizeof (Elf_External_Verdef);
2727 for (i = 0; i < def.vd_cnt; ++i)
2728 {
2729 _bfd_elf_swap_verdaux_in (output_bfd,
2730 (Elf_External_Verdaux *) p, &defaux);
2731 defaux.vda_name = _bfd_elf_strtab_offset (dynstr,
2732 defaux.vda_name);
2733 _bfd_elf_swap_verdaux_out (output_bfd,
2734 &defaux, (Elf_External_Verdaux *) p);
2735 p += sizeof (Elf_External_Verdaux);
2736 }
2737 }
2738 while (def.vd_next);
2739 }
2740
2741 /* Adjust version references. */
2742 if (elf_tdata (output_bfd)->verref)
2743 {
2744 asection *s;
2745 bfd_byte *p;
2746 bfd_size_type i;
2747 Elf_Internal_Verneed need;
2748 Elf_Internal_Vernaux needaux;
2749
2750 s = bfd_get_section_by_name (dynobj, ".gnu.version_r");
2751 p = (bfd_byte *) s->contents;
2752 do
2753 {
2754 _bfd_elf_swap_verneed_in (output_bfd, (Elf_External_Verneed *) p,
2755 &need);
2756 need.vn_file = _bfd_elf_strtab_offset (dynstr, need.vn_file);
2757 _bfd_elf_swap_verneed_out (output_bfd, &need,
2758 (Elf_External_Verneed *) p);
2759 p += sizeof (Elf_External_Verneed);
2760 for (i = 0; i < need.vn_cnt; ++i)
2761 {
2762 _bfd_elf_swap_vernaux_in (output_bfd,
2763 (Elf_External_Vernaux *) p, &needaux);
2764 needaux.vna_name = _bfd_elf_strtab_offset (dynstr,
2765 needaux.vna_name);
2766 _bfd_elf_swap_vernaux_out (output_bfd,
2767 &needaux,
2768 (Elf_External_Vernaux *) p);
2769 p += sizeof (Elf_External_Vernaux);
2770 }
2771 }
2772 while (need.vn_next);
2773 }
2774
2775 return TRUE;
2776 }
2777 \f
2778 /* Final phase of ELF linker. */
2779
2780 /* A structure we use to avoid passing large numbers of arguments. */
2781
2782 struct elf_final_link_info
2783 {
2784 /* General link information. */
2785 struct bfd_link_info *info;
2786 /* Output BFD. */
2787 bfd *output_bfd;
2788 /* Symbol string table. */
2789 struct bfd_strtab_hash *symstrtab;
2790 /* .dynsym section. */
2791 asection *dynsym_sec;
2792 /* .hash section. */
2793 asection *hash_sec;
2794 /* symbol version section (.gnu.version). */
2795 asection *symver_sec;
2796 /* first SHF_TLS section (if any). */
2797 asection *first_tls_sec;
2798 /* Buffer large enough to hold contents of any section. */
2799 bfd_byte *contents;
2800 /* Buffer large enough to hold external relocs of any section. */
2801 void *external_relocs;
2802 /* Buffer large enough to hold internal relocs of any section. */
2803 Elf_Internal_Rela *internal_relocs;
2804 /* Buffer large enough to hold external local symbols of any input
2805 BFD. */
2806 Elf_External_Sym *external_syms;
2807 /* And a buffer for symbol section indices. */
2808 Elf_External_Sym_Shndx *locsym_shndx;
2809 /* Buffer large enough to hold internal local symbols of any input
2810 BFD. */
2811 Elf_Internal_Sym *internal_syms;
2812 /* Array large enough to hold a symbol index for each local symbol
2813 of any input BFD. */
2814 long *indices;
2815 /* Array large enough to hold a section pointer for each local
2816 symbol of any input BFD. */
2817 asection **sections;
2818 /* Buffer to hold swapped out symbols. */
2819 Elf_External_Sym *symbuf;
2820 /* And one for symbol section indices. */
2821 Elf_External_Sym_Shndx *symshndxbuf;
2822 /* Number of swapped out symbols in buffer. */
2823 size_t symbuf_count;
2824 /* Number of symbols which fit in symbuf. */
2825 size_t symbuf_size;
2826 /* And same for symshndxbuf. */
2827 size_t shndxbuf_size;
2828 };
2829
2830 static bfd_boolean elf_link_output_sym
2831 (struct elf_final_link_info *, const char *, Elf_Internal_Sym *, asection *);
2832 static bfd_boolean elf_link_flush_output_syms
2833 (struct elf_final_link_info *);
2834 static bfd_boolean elf_link_output_extsym
2835 (struct elf_link_hash_entry *, void *);
2836 static bfd_boolean elf_link_input_bfd
2837 (struct elf_final_link_info *, bfd *);
2838 static bfd_boolean elf_reloc_link_order
2839 (bfd *, struct bfd_link_info *, asection *, struct bfd_link_order *);
2840
2841 /* This struct is used to pass information to elf_link_output_extsym. */
2842
2843 struct elf_outext_info
2844 {
2845 bfd_boolean failed;
2846 bfd_boolean localsyms;
2847 struct elf_final_link_info *finfo;
2848 };
2849
2850 /* When performing a relocatable link, the input relocations are
2851 preserved. But, if they reference global symbols, the indices
2852 referenced must be updated. Update all the relocations in
2853 REL_HDR (there are COUNT of them), using the data in REL_HASH. */
2854
2855 static void
2856 elf_link_adjust_relocs (bfd *abfd,
2857 Elf_Internal_Shdr *rel_hdr,
2858 unsigned int count,
2859 struct elf_link_hash_entry **rel_hash)
2860 {
2861 unsigned int i;
2862 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
2863 bfd_byte *erela;
2864 void (*swap_in) (bfd *, const bfd_byte *, Elf_Internal_Rela *);
2865 void (*swap_out) (bfd *, const Elf_Internal_Rela *, bfd_byte *);
2866
2867 if (rel_hdr->sh_entsize == sizeof (Elf_External_Rel))
2868 {
2869 swap_in = bed->s->swap_reloc_in;
2870 swap_out = bed->s->swap_reloc_out;
2871 }
2872 else if (rel_hdr->sh_entsize == sizeof (Elf_External_Rela))
2873 {
2874 swap_in = bed->s->swap_reloca_in;
2875 swap_out = bed->s->swap_reloca_out;
2876 }
2877 else
2878 abort ();
2879
2880 if (bed->s->int_rels_per_ext_rel > MAX_INT_RELS_PER_EXT_REL)
2881 abort ();
2882
2883 erela = rel_hdr->contents;
2884 for (i = 0; i < count; i++, rel_hash++, erela += rel_hdr->sh_entsize)
2885 {
2886 Elf_Internal_Rela irela[MAX_INT_RELS_PER_EXT_REL];
2887 unsigned int j;
2888
2889 if (*rel_hash == NULL)
2890 continue;
2891
2892 BFD_ASSERT ((*rel_hash)->indx >= 0);
2893
2894 (*swap_in) (abfd, erela, irela);
2895 for (j = 0; j < bed->s->int_rels_per_ext_rel; j++)
2896 irela[j].r_info = ELF_R_INFO ((*rel_hash)->indx,
2897 ELF_R_TYPE (irela[j].r_info));
2898 (*swap_out) (abfd, irela, erela);
2899 }
2900 }
2901
2902 struct elf_link_sort_rela
2903 {
2904 bfd_vma offset;
2905 enum elf_reloc_type_class type;
2906 /* We use this as an array of size int_rels_per_ext_rel. */
2907 Elf_Internal_Rela rela[1];
2908 };
2909
2910 static int
2911 elf_link_sort_cmp1 (const void *A, const void *B)
2912 {
2913 const struct elf_link_sort_rela *a = A;
2914 const struct elf_link_sort_rela *b = B;
2915 int relativea, relativeb;
2916
2917 relativea = a->type == reloc_class_relative;
2918 relativeb = b->type == reloc_class_relative;
2919
2920 if (relativea < relativeb)
2921 return 1;
2922 if (relativea > relativeb)
2923 return -1;
2924 if (ELF_R_SYM (a->rela->r_info) < ELF_R_SYM (b->rela->r_info))
2925 return -1;
2926 if (ELF_R_SYM (a->rela->r_info) > ELF_R_SYM (b->rela->r_info))
2927 return 1;
2928 if (a->rela->r_offset < b->rela->r_offset)
2929 return -1;
2930 if (a->rela->r_offset > b->rela->r_offset)
2931 return 1;
2932 return 0;
2933 }
2934
2935 static int
2936 elf_link_sort_cmp2 (const void *A, const void *B)
2937 {
2938 const struct elf_link_sort_rela *a = A;
2939 const struct elf_link_sort_rela *b = B;
2940 int copya, copyb;
2941
2942 if (a->offset < b->offset)
2943 return -1;
2944 if (a->offset > b->offset)
2945 return 1;
2946 copya = (a->type == reloc_class_copy) * 2 + (a->type == reloc_class_plt);
2947 copyb = (b->type == reloc_class_copy) * 2 + (b->type == reloc_class_plt);
2948 if (copya < copyb)
2949 return -1;
2950 if (copya > copyb)
2951 return 1;
2952 if (a->rela->r_offset < b->rela->r_offset)
2953 return -1;
2954 if (a->rela->r_offset > b->rela->r_offset)
2955 return 1;
2956 return 0;
2957 }
2958
2959 static size_t
2960 elf_link_sort_relocs (bfd *abfd, struct bfd_link_info *info, asection **psec)
2961 {
2962 asection *reldyn;
2963 bfd_size_type count, size;
2964 size_t i, ret, sort_elt, ext_size;
2965 bfd_byte *sort, *s_non_relative, *p;
2966 struct elf_link_sort_rela *sq;
2967 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
2968 int i2e = bed->s->int_rels_per_ext_rel;
2969 void (*swap_in) (bfd *, const bfd_byte *, Elf_Internal_Rela *);
2970 void (*swap_out) (bfd *, const Elf_Internal_Rela *, bfd_byte *);
2971 struct bfd_link_order *lo;
2972
2973 reldyn = bfd_get_section_by_name (abfd, ".rela.dyn");
2974 if (reldyn == NULL || reldyn->_raw_size == 0)
2975 {
2976 reldyn = bfd_get_section_by_name (abfd, ".rel.dyn");
2977 if (reldyn == NULL || reldyn->_raw_size == 0)
2978 return 0;
2979 ext_size = sizeof (Elf_External_Rel);
2980 swap_in = bed->s->swap_reloc_in;
2981 swap_out = bed->s->swap_reloc_out;
2982 }
2983 else
2984 {
2985 ext_size = sizeof (Elf_External_Rela);
2986 swap_in = bed->s->swap_reloca_in;
2987 swap_out = bed->s->swap_reloca_out;
2988 }
2989 count = reldyn->_raw_size / ext_size;
2990
2991 size = 0;
2992 for (lo = reldyn->link_order_head; lo != NULL; lo = lo->next)
2993 if (lo->type == bfd_indirect_link_order)
2994 {
2995 asection *o = lo->u.indirect.section;
2996 size += o->_raw_size;
2997 }
2998
2999 if (size != reldyn->_raw_size)
3000 return 0;
3001
3002 sort_elt = (sizeof (struct elf_link_sort_rela)
3003 + (i2e - 1) * sizeof (Elf_Internal_Rela));
3004 sort = bfd_zmalloc (sort_elt * count);
3005 if (sort == NULL)
3006 {
3007 (*info->callbacks->warning)
3008 (info, _("Not enough memory to sort relocations"), 0, abfd, 0, 0);
3009 return 0;
3010 }
3011
3012 for (lo = reldyn->link_order_head; lo != NULL; lo = lo->next)
3013 if (lo->type == bfd_indirect_link_order)
3014 {
3015 bfd_byte *erel, *erelend;
3016 asection *o = lo->u.indirect.section;
3017
3018 erel = o->contents;
3019 erelend = o->contents + o->_raw_size;
3020 p = sort + o->output_offset / ext_size * sort_elt;
3021 while (erel < erelend)
3022 {
3023 struct elf_link_sort_rela *s = (struct elf_link_sort_rela *) p;
3024 (*swap_in) (abfd, erel, s->rela);
3025 s->type = (*bed->elf_backend_reloc_type_class) (s->rela);
3026 p += sort_elt;
3027 erel += ext_size;
3028 }
3029 }
3030
3031 qsort (sort, count, sort_elt, elf_link_sort_cmp1);
3032
3033 for (i = 0, p = sort; i < count; i++, p += sort_elt)
3034 {
3035 struct elf_link_sort_rela *s = (struct elf_link_sort_rela *) p;
3036 if (s->type != reloc_class_relative)
3037 break;
3038 }
3039 ret = i;
3040 s_non_relative = p;
3041
3042 sq = (struct elf_link_sort_rela *) s_non_relative;
3043 for (; i < count; i++, p += sort_elt)
3044 {
3045 struct elf_link_sort_rela *sp = (struct elf_link_sort_rela *) p;
3046 if (ELF_R_SYM (sp->rela->r_info) != ELF_R_SYM (sq->rela->r_info))
3047 sq = sp;
3048 sp->offset = sq->rela->r_offset;
3049 }
3050
3051 qsort (s_non_relative, count - ret, sort_elt, elf_link_sort_cmp2);
3052
3053 for (lo = reldyn->link_order_head; lo != NULL; lo = lo->next)
3054 if (lo->type == bfd_indirect_link_order)
3055 {
3056 bfd_byte *erel, *erelend;
3057 asection *o = lo->u.indirect.section;
3058
3059 erel = o->contents;
3060 erelend = o->contents + o->_raw_size;
3061 p = sort + o->output_offset / ext_size * sort_elt;
3062 while (erel < erelend)
3063 {
3064 struct elf_link_sort_rela *s = (struct elf_link_sort_rela *) p;
3065 (*swap_out) (abfd, s->rela, erel);
3066 p += sort_elt;
3067 erel += ext_size;
3068 }
3069 }
3070
3071 free (sort);
3072 *psec = reldyn;
3073 return ret;
3074 }
3075
3076 /* Do the final step of an ELF link. */
3077
3078 bfd_boolean
3079 elf_bfd_final_link (bfd *abfd, struct bfd_link_info *info)
3080 {
3081 bfd_boolean dynamic;
3082 bfd_boolean emit_relocs;
3083 bfd *dynobj;
3084 struct elf_final_link_info finfo;
3085 register asection *o;
3086 register struct bfd_link_order *p;
3087 register bfd *sub;
3088 bfd_size_type max_contents_size;
3089 bfd_size_type max_external_reloc_size;
3090 bfd_size_type max_internal_reloc_count;
3091 bfd_size_type max_sym_count;
3092 bfd_size_type max_sym_shndx_count;
3093 file_ptr off;
3094 Elf_Internal_Sym elfsym;
3095 unsigned int i;
3096 Elf_Internal_Shdr *symtab_hdr;
3097 Elf_Internal_Shdr *symtab_shndx_hdr;
3098 Elf_Internal_Shdr *symstrtab_hdr;
3099 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
3100 struct elf_outext_info eoinfo;
3101 bfd_boolean merged;
3102 size_t relativecount = 0;
3103 asection *reldyn = 0;
3104 bfd_size_type amt;
3105
3106 if (! is_elf_hash_table (info))
3107 return FALSE;
3108
3109 if (info->shared)
3110 abfd->flags |= DYNAMIC;
3111
3112 dynamic = elf_hash_table (info)->dynamic_sections_created;
3113 dynobj = elf_hash_table (info)->dynobj;
3114
3115 emit_relocs = (info->relocatable
3116 || info->emitrelocations
3117 || bed->elf_backend_emit_relocs);
3118
3119 finfo.info = info;
3120 finfo.output_bfd = abfd;
3121 finfo.symstrtab = elf_stringtab_init ();
3122 if (finfo.symstrtab == NULL)
3123 return FALSE;
3124
3125 if (! dynamic)
3126 {
3127 finfo.dynsym_sec = NULL;
3128 finfo.hash_sec = NULL;
3129 finfo.symver_sec = NULL;
3130 }
3131 else
3132 {
3133 finfo.dynsym_sec = bfd_get_section_by_name (dynobj, ".dynsym");
3134 finfo.hash_sec = bfd_get_section_by_name (dynobj, ".hash");
3135 BFD_ASSERT (finfo.dynsym_sec != NULL && finfo.hash_sec != NULL);
3136 finfo.symver_sec = bfd_get_section_by_name (dynobj, ".gnu.version");
3137 /* Note that it is OK if symver_sec is NULL. */
3138 }
3139
3140 finfo.contents = NULL;
3141 finfo.external_relocs = NULL;
3142 finfo.internal_relocs = NULL;
3143 finfo.external_syms = NULL;
3144 finfo.locsym_shndx = NULL;
3145 finfo.internal_syms = NULL;
3146 finfo.indices = NULL;
3147 finfo.sections = NULL;
3148 finfo.symbuf = NULL;
3149 finfo.symshndxbuf = NULL;
3150 finfo.symbuf_count = 0;
3151 finfo.shndxbuf_size = 0;
3152 finfo.first_tls_sec = NULL;
3153 for (o = abfd->sections; o != NULL; o = o->next)
3154 if ((o->flags & SEC_THREAD_LOCAL) != 0
3155 && (o->flags & SEC_LOAD) != 0)
3156 {
3157 finfo.first_tls_sec = o;
3158 break;
3159 }
3160
3161 /* Count up the number of relocations we will output for each output
3162 section, so that we know the sizes of the reloc sections. We
3163 also figure out some maximum sizes. */
3164 max_contents_size = 0;
3165 max_external_reloc_size = 0;
3166 max_internal_reloc_count = 0;
3167 max_sym_count = 0;
3168 max_sym_shndx_count = 0;
3169 merged = FALSE;
3170 for (o = abfd->sections; o != NULL; o = o->next)
3171 {
3172 struct bfd_elf_section_data *esdo = elf_section_data (o);
3173 o->reloc_count = 0;
3174
3175 for (p = o->link_order_head; p != NULL; p = p->next)
3176 {
3177 unsigned int reloc_count = 0;
3178 struct bfd_elf_section_data *esdi = NULL;
3179 unsigned int *rel_count1;
3180
3181 if (p->type == bfd_section_reloc_link_order
3182 || p->type == bfd_symbol_reloc_link_order)
3183 reloc_count = 1;
3184 else if (p->type == bfd_indirect_link_order)
3185 {
3186 asection *sec;
3187
3188 sec = p->u.indirect.section;
3189 esdi = elf_section_data (sec);
3190
3191 /* Mark all sections which are to be included in the
3192 link. This will normally be every section. We need
3193 to do this so that we can identify any sections which
3194 the linker has decided to not include. */
3195 sec->linker_mark = TRUE;
3196
3197 if (sec->flags & SEC_MERGE)
3198 merged = TRUE;
3199
3200 if (info->relocatable || info->emitrelocations)
3201 reloc_count = sec->reloc_count;
3202 else if (bed->elf_backend_count_relocs)
3203 {
3204 Elf_Internal_Rela * relocs;
3205
3206 relocs = _bfd_elf_link_read_relocs (abfd, sec, NULL, NULL,
3207 info->keep_memory);
3208
3209 reloc_count = (*bed->elf_backend_count_relocs) (sec, relocs);
3210
3211 if (elf_section_data (o)->relocs != relocs)
3212 free (relocs);
3213 }
3214
3215 if (sec->_raw_size > max_contents_size)
3216 max_contents_size = sec->_raw_size;
3217 if (sec->_cooked_size > max_contents_size)
3218 max_contents_size = sec->_cooked_size;
3219
3220 /* We are interested in just local symbols, not all
3221 symbols. */
3222 if (bfd_get_flavour (sec->owner) == bfd_target_elf_flavour
3223 && (sec->owner->flags & DYNAMIC) == 0)
3224 {
3225 size_t sym_count;
3226
3227 if (elf_bad_symtab (sec->owner))
3228 sym_count = (elf_tdata (sec->owner)->symtab_hdr.sh_size
3229 / sizeof (Elf_External_Sym));
3230 else
3231 sym_count = elf_tdata (sec->owner)->symtab_hdr.sh_info;
3232
3233 if (sym_count > max_sym_count)
3234 max_sym_count = sym_count;
3235
3236 if (sym_count > max_sym_shndx_count
3237 && elf_symtab_shndx (sec->owner) != 0)
3238 max_sym_shndx_count = sym_count;
3239
3240 if ((sec->flags & SEC_RELOC) != 0)
3241 {
3242 size_t ext_size;
3243
3244 ext_size = elf_section_data (sec)->rel_hdr.sh_size;
3245 if (ext_size > max_external_reloc_size)
3246 max_external_reloc_size = ext_size;
3247 if (sec->reloc_count > max_internal_reloc_count)
3248 max_internal_reloc_count = sec->reloc_count;
3249 }
3250 }
3251 }
3252
3253 if (reloc_count == 0)
3254 continue;
3255
3256 o->reloc_count += reloc_count;
3257
3258 /* MIPS may have a mix of REL and RELA relocs on sections.
3259 To support this curious ABI we keep reloc counts in
3260 elf_section_data too. We must be careful to add the
3261 relocations from the input section to the right output
3262 count. FIXME: Get rid of one count. We have
3263 o->reloc_count == esdo->rel_count + esdo->rel_count2. */
3264 rel_count1 = &esdo->rel_count;
3265 if (esdi != NULL)
3266 {
3267 bfd_boolean same_size;
3268 bfd_size_type entsize1;
3269
3270 entsize1 = esdi->rel_hdr.sh_entsize;
3271 BFD_ASSERT (entsize1 == sizeof (Elf_External_Rel)
3272 || entsize1 == sizeof (Elf_External_Rela));
3273 same_size = (!o->use_rela_p
3274 == (entsize1 == sizeof (Elf_External_Rel)));
3275
3276 if (!same_size)
3277 rel_count1 = &esdo->rel_count2;
3278
3279 if (esdi->rel_hdr2 != NULL)
3280 {
3281 bfd_size_type entsize2 = esdi->rel_hdr2->sh_entsize;
3282 unsigned int alt_count;
3283 unsigned int *rel_count2;
3284
3285 BFD_ASSERT (entsize2 != entsize1
3286 && (entsize2 == sizeof (Elf_External_Rel)
3287 || entsize2 == sizeof (Elf_External_Rela)));
3288
3289 rel_count2 = &esdo->rel_count2;
3290 if (!same_size)
3291 rel_count2 = &esdo->rel_count;
3292
3293 /* The following is probably too simplistic if the
3294 backend counts output relocs unusually. */
3295 BFD_ASSERT (bed->elf_backend_count_relocs == NULL);
3296 alt_count = NUM_SHDR_ENTRIES (esdi->rel_hdr2);
3297 *rel_count2 += alt_count;
3298 reloc_count -= alt_count;
3299 }
3300 }
3301 *rel_count1 += reloc_count;
3302 }
3303
3304 if (o->reloc_count > 0)
3305 o->flags |= SEC_RELOC;
3306 else
3307 {
3308 /* Explicitly clear the SEC_RELOC flag. The linker tends to
3309 set it (this is probably a bug) and if it is set
3310 assign_section_numbers will create a reloc section. */
3311 o->flags &=~ SEC_RELOC;
3312 }
3313
3314 /* If the SEC_ALLOC flag is not set, force the section VMA to
3315 zero. This is done in elf_fake_sections as well, but forcing
3316 the VMA to 0 here will ensure that relocs against these
3317 sections are handled correctly. */
3318 if ((o->flags & SEC_ALLOC) == 0
3319 && ! o->user_set_vma)
3320 o->vma = 0;
3321 }
3322
3323 if (! info->relocatable && merged)
3324 elf_link_hash_traverse (elf_hash_table (info),
3325 _bfd_elf_link_sec_merge_syms, abfd);
3326
3327 /* Figure out the file positions for everything but the symbol table
3328 and the relocs. We set symcount to force assign_section_numbers
3329 to create a symbol table. */
3330 bfd_get_symcount (abfd) = info->strip == strip_all ? 0 : 1;
3331 BFD_ASSERT (! abfd->output_has_begun);
3332 if (! _bfd_elf_compute_section_file_positions (abfd, info))
3333 goto error_return;
3334
3335 /* That created the reloc sections. Set their sizes, and assign
3336 them file positions, and allocate some buffers. */
3337 for (o = abfd->sections; o != NULL; o = o->next)
3338 {
3339 if ((o->flags & SEC_RELOC) != 0)
3340 {
3341 if (!(_bfd_elf_link_size_reloc_section
3342 (abfd, &elf_section_data (o)->rel_hdr, o)))
3343 goto error_return;
3344
3345 if (elf_section_data (o)->rel_hdr2
3346 && !(_bfd_elf_link_size_reloc_section
3347 (abfd, elf_section_data (o)->rel_hdr2, o)))
3348 goto error_return;
3349 }
3350
3351 /* Now, reset REL_COUNT and REL_COUNT2 so that we can use them
3352 to count upwards while actually outputting the relocations. */
3353 elf_section_data (o)->rel_count = 0;
3354 elf_section_data (o)->rel_count2 = 0;
3355 }
3356
3357 _bfd_elf_assign_file_positions_for_relocs (abfd);
3358
3359 /* We have now assigned file positions for all the sections except
3360 .symtab and .strtab. We start the .symtab section at the current
3361 file position, and write directly to it. We build the .strtab
3362 section in memory. */
3363 bfd_get_symcount (abfd) = 0;
3364 symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
3365 /* sh_name is set in prep_headers. */
3366 symtab_hdr->sh_type = SHT_SYMTAB;
3367 /* sh_flags, sh_addr and sh_size all start off zero. */
3368 symtab_hdr->sh_entsize = sizeof (Elf_External_Sym);
3369 /* sh_link is set in assign_section_numbers. */
3370 /* sh_info is set below. */
3371 /* sh_offset is set just below. */
3372 symtab_hdr->sh_addralign = 1 << bed->s->log_file_align;
3373
3374 off = elf_tdata (abfd)->next_file_pos;
3375 off = _bfd_elf_assign_file_position_for_section (symtab_hdr, off, TRUE);
3376
3377 /* Note that at this point elf_tdata (abfd)->next_file_pos is
3378 incorrect. We do not yet know the size of the .symtab section.
3379 We correct next_file_pos below, after we do know the size. */
3380
3381 /* Allocate a buffer to hold swapped out symbols. This is to avoid
3382 continuously seeking to the right position in the file. */
3383 if (! info->keep_memory || max_sym_count < 20)
3384 finfo.symbuf_size = 20;
3385 else
3386 finfo.symbuf_size = max_sym_count;
3387 amt = finfo.symbuf_size;
3388 amt *= sizeof (Elf_External_Sym);
3389 finfo.symbuf = bfd_malloc (amt);
3390 if (finfo.symbuf == NULL)
3391 goto error_return;
3392 if (elf_numsections (abfd) > SHN_LORESERVE)
3393 {
3394 /* Wild guess at number of output symbols. realloc'd as needed. */
3395 amt = 2 * max_sym_count + elf_numsections (abfd) + 1000;
3396 finfo.shndxbuf_size = amt;
3397 amt *= sizeof (Elf_External_Sym_Shndx);
3398 finfo.symshndxbuf = bfd_zmalloc (amt);
3399 if (finfo.symshndxbuf == NULL)
3400 goto error_return;
3401 }
3402
3403 /* Start writing out the symbol table. The first symbol is always a
3404 dummy symbol. */
3405 if (info->strip != strip_all
3406 || emit_relocs)
3407 {
3408 elfsym.st_value = 0;
3409 elfsym.st_size = 0;
3410 elfsym.st_info = 0;
3411 elfsym.st_other = 0;
3412 elfsym.st_shndx = SHN_UNDEF;
3413 if (! elf_link_output_sym (&finfo, NULL, &elfsym, bfd_und_section_ptr))
3414 goto error_return;
3415 }
3416
3417 #if 0
3418 /* Some standard ELF linkers do this, but we don't because it causes
3419 bootstrap comparison failures. */
3420 /* Output a file symbol for the output file as the second symbol.
3421 We output this even if we are discarding local symbols, although
3422 I'm not sure if this is correct. */
3423 elfsym.st_value = 0;
3424 elfsym.st_size = 0;
3425 elfsym.st_info = ELF_ST_INFO (STB_LOCAL, STT_FILE);
3426 elfsym.st_other = 0;
3427 elfsym.st_shndx = SHN_ABS;
3428 if (! elf_link_output_sym (&finfo, bfd_get_filename (abfd),
3429 &elfsym, bfd_abs_section_ptr))
3430 goto error_return;
3431 #endif
3432
3433 /* Output a symbol for each section. We output these even if we are
3434 discarding local symbols, since they are used for relocs. These
3435 symbols have no names. We store the index of each one in the
3436 index field of the section, so that we can find it again when
3437 outputting relocs. */
3438 if (info->strip != strip_all
3439 || emit_relocs)
3440 {
3441 elfsym.st_size = 0;
3442 elfsym.st_info = ELF_ST_INFO (STB_LOCAL, STT_SECTION);
3443 elfsym.st_other = 0;
3444 for (i = 1; i < elf_numsections (abfd); i++)
3445 {
3446 o = section_from_elf_index (abfd, i);
3447 if (o != NULL)
3448 o->target_index = bfd_get_symcount (abfd);
3449 elfsym.st_shndx = i;
3450 if (info->relocatable || o == NULL)
3451 elfsym.st_value = 0;
3452 else
3453 elfsym.st_value = o->vma;
3454 if (! elf_link_output_sym (&finfo, NULL, &elfsym, o))
3455 goto error_return;
3456 if (i == SHN_LORESERVE - 1)
3457 i += SHN_HIRESERVE + 1 - SHN_LORESERVE;
3458 }
3459 }
3460
3461 /* Allocate some memory to hold information read in from the input
3462 files. */
3463 if (max_contents_size != 0)
3464 {
3465 finfo.contents = bfd_malloc (max_contents_size);
3466 if (finfo.contents == NULL)
3467 goto error_return;
3468 }
3469
3470 if (max_external_reloc_size != 0)
3471 {
3472 finfo.external_relocs = bfd_malloc (max_external_reloc_size);
3473 if (finfo.external_relocs == NULL)
3474 goto error_return;
3475 }
3476
3477 if (max_internal_reloc_count != 0)
3478 {
3479 amt = max_internal_reloc_count * bed->s->int_rels_per_ext_rel;
3480 amt *= sizeof (Elf_Internal_Rela);
3481 finfo.internal_relocs = bfd_malloc (amt);
3482 if (finfo.internal_relocs == NULL)
3483 goto error_return;
3484 }
3485
3486 if (max_sym_count != 0)
3487 {
3488 amt = max_sym_count * sizeof (Elf_External_Sym);
3489 finfo.external_syms = bfd_malloc (amt);
3490 if (finfo.external_syms == NULL)
3491 goto error_return;
3492
3493 amt = max_sym_count * sizeof (Elf_Internal_Sym);
3494 finfo.internal_syms = bfd_malloc (amt);
3495 if (finfo.internal_syms == NULL)
3496 goto error_return;
3497
3498 amt = max_sym_count * sizeof (long);
3499 finfo.indices = bfd_malloc (amt);
3500 if (finfo.indices == NULL)
3501 goto error_return;
3502
3503 amt = max_sym_count * sizeof (asection *);
3504 finfo.sections = bfd_malloc (amt);
3505 if (finfo.sections == NULL)
3506 goto error_return;
3507 }
3508
3509 if (max_sym_shndx_count != 0)
3510 {
3511 amt = max_sym_shndx_count * sizeof (Elf_External_Sym_Shndx);
3512 finfo.locsym_shndx = bfd_malloc (amt);
3513 if (finfo.locsym_shndx == NULL)
3514 goto error_return;
3515 }
3516
3517 if (finfo.first_tls_sec)
3518 {
3519 unsigned int align = 0;
3520 bfd_vma base = finfo.first_tls_sec->vma, end = 0;
3521 asection *sec;
3522
3523 for (sec = finfo.first_tls_sec;
3524 sec && (sec->flags & SEC_THREAD_LOCAL);
3525 sec = sec->next)
3526 {
3527 bfd_vma size = sec->_raw_size;
3528
3529 if (bfd_get_section_alignment (abfd, sec) > align)
3530 align = bfd_get_section_alignment (abfd, sec);
3531 if (sec->_raw_size == 0 && (sec->flags & SEC_HAS_CONTENTS) == 0)
3532 {
3533 struct bfd_link_order *o;
3534
3535 size = 0;
3536 for (o = sec->link_order_head; o != NULL; o = o->next)
3537 if (size < o->offset + o->size)
3538 size = o->offset + o->size;
3539 }
3540 end = sec->vma + size;
3541 }
3542 elf_hash_table (info)->tls_segment
3543 = bfd_zalloc (abfd, sizeof (struct elf_link_tls_segment));
3544 if (elf_hash_table (info)->tls_segment == NULL)
3545 goto error_return;
3546 elf_hash_table (info)->tls_segment->start = base;
3547 elf_hash_table (info)->tls_segment->size = end - base;
3548 elf_hash_table (info)->tls_segment->align = align;
3549 }
3550
3551 /* Since ELF permits relocations to be against local symbols, we
3552 must have the local symbols available when we do the relocations.
3553 Since we would rather only read the local symbols once, and we
3554 would rather not keep them in memory, we handle all the
3555 relocations for a single input file at the same time.
3556
3557 Unfortunately, there is no way to know the total number of local
3558 symbols until we have seen all of them, and the local symbol
3559 indices precede the global symbol indices. This means that when
3560 we are generating relocatable output, and we see a reloc against
3561 a global symbol, we can not know the symbol index until we have
3562 finished examining all the local symbols to see which ones we are
3563 going to output. To deal with this, we keep the relocations in
3564 memory, and don't output them until the end of the link. This is
3565 an unfortunate waste of memory, but I don't see a good way around
3566 it. Fortunately, it only happens when performing a relocatable
3567 link, which is not the common case. FIXME: If keep_memory is set
3568 we could write the relocs out and then read them again; I don't
3569 know how bad the memory loss will be. */
3570
3571 for (sub = info->input_bfds; sub != NULL; sub = sub->link_next)
3572 sub->output_has_begun = FALSE;
3573 for (o = abfd->sections; o != NULL; o = o->next)
3574 {
3575 for (p = o->link_order_head; p != NULL; p = p->next)
3576 {
3577 if (p->type == bfd_indirect_link_order
3578 && (bfd_get_flavour ((sub = p->u.indirect.section->owner))
3579 == bfd_target_elf_flavour)
3580 && elf_elfheader (sub)->e_ident[EI_CLASS] == bed->s->elfclass)
3581 {
3582 if (! sub->output_has_begun)
3583 {
3584 if (! elf_link_input_bfd (&finfo, sub))
3585 goto error_return;
3586 sub->output_has_begun = TRUE;
3587 }
3588 }
3589 else if (p->type == bfd_section_reloc_link_order
3590 || p->type == bfd_symbol_reloc_link_order)
3591 {
3592 if (! elf_reloc_link_order (abfd, info, o, p))
3593 goto error_return;
3594 }
3595 else
3596 {
3597 if (! _bfd_default_link_order (abfd, info, o, p))
3598 goto error_return;
3599 }
3600 }
3601 }
3602
3603 /* Output any global symbols that got converted to local in a
3604 version script or due to symbol visibility. We do this in a
3605 separate step since ELF requires all local symbols to appear
3606 prior to any global symbols. FIXME: We should only do this if
3607 some global symbols were, in fact, converted to become local.
3608 FIXME: Will this work correctly with the Irix 5 linker? */
3609 eoinfo.failed = FALSE;
3610 eoinfo.finfo = &finfo;
3611 eoinfo.localsyms = TRUE;
3612 elf_link_hash_traverse (elf_hash_table (info), elf_link_output_extsym,
3613 &eoinfo);
3614 if (eoinfo.failed)
3615 return FALSE;
3616
3617 /* That wrote out all the local symbols. Finish up the symbol table
3618 with the global symbols. Even if we want to strip everything we
3619 can, we still need to deal with those global symbols that got
3620 converted to local in a version script. */
3621
3622 /* The sh_info field records the index of the first non local symbol. */
3623 symtab_hdr->sh_info = bfd_get_symcount (abfd);
3624
3625 if (dynamic
3626 && finfo.dynsym_sec->output_section != bfd_abs_section_ptr)
3627 {
3628 Elf_Internal_Sym sym;
3629 Elf_External_Sym *dynsym =
3630 (Elf_External_Sym *) finfo.dynsym_sec->contents;
3631 long last_local = 0;
3632
3633 /* Write out the section symbols for the output sections. */
3634 if (info->shared)
3635 {
3636 asection *s;
3637
3638 sym.st_size = 0;
3639 sym.st_name = 0;
3640 sym.st_info = ELF_ST_INFO (STB_LOCAL, STT_SECTION);
3641 sym.st_other = 0;
3642
3643 for (s = abfd->sections; s != NULL; s = s->next)
3644 {
3645 int indx;
3646 Elf_External_Sym *dest;
3647
3648 indx = elf_section_data (s)->this_idx;
3649 BFD_ASSERT (indx > 0);
3650 sym.st_shndx = indx;
3651 sym.st_value = s->vma;
3652 dest = dynsym + elf_section_data (s)->dynindx;
3653 elf_swap_symbol_out (abfd, &sym, dest, 0);
3654 }
3655
3656 last_local = bfd_count_sections (abfd);
3657 }
3658
3659 /* Write out the local dynsyms. */
3660 if (elf_hash_table (info)->dynlocal)
3661 {
3662 struct elf_link_local_dynamic_entry *e;
3663 for (e = elf_hash_table (info)->dynlocal; e ; e = e->next)
3664 {
3665 asection *s;
3666 Elf_External_Sym *dest;
3667
3668 sym.st_size = e->isym.st_size;
3669 sym.st_other = e->isym.st_other;
3670
3671 /* Copy the internal symbol as is.
3672 Note that we saved a word of storage and overwrote
3673 the original st_name with the dynstr_index. */
3674 sym = e->isym;
3675
3676 if (e->isym.st_shndx != SHN_UNDEF
3677 && (e->isym.st_shndx < SHN_LORESERVE
3678 || e->isym.st_shndx > SHN_HIRESERVE))
3679 {
3680 s = bfd_section_from_elf_index (e->input_bfd,
3681 e->isym.st_shndx);
3682
3683 sym.st_shndx =
3684 elf_section_data (s->output_section)->this_idx;
3685 sym.st_value = (s->output_section->vma
3686 + s->output_offset
3687 + e->isym.st_value);
3688 }
3689
3690 if (last_local < e->dynindx)
3691 last_local = e->dynindx;
3692
3693 dest = dynsym + e->dynindx;
3694 elf_swap_symbol_out (abfd, &sym, dest, 0);
3695 }
3696 }
3697
3698 elf_section_data (finfo.dynsym_sec->output_section)->this_hdr.sh_info =
3699 last_local + 1;
3700 }
3701
3702 /* We get the global symbols from the hash table. */
3703 eoinfo.failed = FALSE;
3704 eoinfo.localsyms = FALSE;
3705 eoinfo.finfo = &finfo;
3706 elf_link_hash_traverse (elf_hash_table (info), elf_link_output_extsym,
3707 &eoinfo);
3708 if (eoinfo.failed)
3709 return FALSE;
3710
3711 /* If backend needs to output some symbols not present in the hash
3712 table, do it now. */
3713 if (bed->elf_backend_output_arch_syms)
3714 {
3715 typedef bfd_boolean (*out_sym_func)
3716 (void *, const char *, Elf_Internal_Sym *, asection *);
3717
3718 if (! ((*bed->elf_backend_output_arch_syms)
3719 (abfd, info, &finfo, (out_sym_func) elf_link_output_sym)))
3720 return FALSE;
3721 }
3722
3723 /* Flush all symbols to the file. */
3724 if (! elf_link_flush_output_syms (&finfo))
3725 return FALSE;
3726
3727 /* Now we know the size of the symtab section. */
3728 off += symtab_hdr->sh_size;
3729
3730 symtab_shndx_hdr = &elf_tdata (abfd)->symtab_shndx_hdr;
3731 if (symtab_shndx_hdr->sh_name != 0)
3732 {
3733 symtab_shndx_hdr->sh_type = SHT_SYMTAB_SHNDX;
3734 symtab_shndx_hdr->sh_entsize = sizeof (Elf_External_Sym_Shndx);
3735 symtab_shndx_hdr->sh_addralign = sizeof (Elf_External_Sym_Shndx);
3736 amt = bfd_get_symcount (abfd) * sizeof (Elf_External_Sym_Shndx);
3737 symtab_shndx_hdr->sh_size = amt;
3738
3739 off = _bfd_elf_assign_file_position_for_section (symtab_shndx_hdr,
3740 off, TRUE);
3741
3742 if (bfd_seek (abfd, symtab_shndx_hdr->sh_offset, SEEK_SET) != 0
3743 || (bfd_bwrite (finfo.symshndxbuf, amt, abfd) != amt))
3744 return FALSE;
3745 }
3746
3747
3748 /* Finish up and write out the symbol string table (.strtab)
3749 section. */
3750 symstrtab_hdr = &elf_tdata (abfd)->strtab_hdr;
3751 /* sh_name was set in prep_headers. */
3752 symstrtab_hdr->sh_type = SHT_STRTAB;
3753 symstrtab_hdr->sh_flags = 0;
3754 symstrtab_hdr->sh_addr = 0;
3755 symstrtab_hdr->sh_size = _bfd_stringtab_size (finfo.symstrtab);
3756 symstrtab_hdr->sh_entsize = 0;
3757 symstrtab_hdr->sh_link = 0;
3758 symstrtab_hdr->sh_info = 0;
3759 /* sh_offset is set just below. */
3760 symstrtab_hdr->sh_addralign = 1;
3761
3762 off = _bfd_elf_assign_file_position_for_section (symstrtab_hdr, off, TRUE);
3763 elf_tdata (abfd)->next_file_pos = off;
3764
3765 if (bfd_get_symcount (abfd) > 0)
3766 {
3767 if (bfd_seek (abfd, symstrtab_hdr->sh_offset, SEEK_SET) != 0
3768 || ! _bfd_stringtab_emit (abfd, finfo.symstrtab))
3769 return FALSE;
3770 }
3771
3772 /* Adjust the relocs to have the correct symbol indices. */
3773 for (o = abfd->sections; o != NULL; o = o->next)
3774 {
3775 if ((o->flags & SEC_RELOC) == 0)
3776 continue;
3777
3778 elf_link_adjust_relocs (abfd, &elf_section_data (o)->rel_hdr,
3779 elf_section_data (o)->rel_count,
3780 elf_section_data (o)->rel_hashes);
3781 if (elf_section_data (o)->rel_hdr2 != NULL)
3782 elf_link_adjust_relocs (abfd, elf_section_data (o)->rel_hdr2,
3783 elf_section_data (o)->rel_count2,
3784 (elf_section_data (o)->rel_hashes
3785 + elf_section_data (o)->rel_count));
3786
3787 /* Set the reloc_count field to 0 to prevent write_relocs from
3788 trying to swap the relocs out itself. */
3789 o->reloc_count = 0;
3790 }
3791
3792 if (dynamic && info->combreloc && dynobj != NULL)
3793 relativecount = elf_link_sort_relocs (abfd, info, &reldyn);
3794
3795 /* If we are linking against a dynamic object, or generating a
3796 shared library, finish up the dynamic linking information. */
3797 if (dynamic)
3798 {
3799 Elf_External_Dyn *dyncon, *dynconend;
3800
3801 /* Fix up .dynamic entries. */
3802 o = bfd_get_section_by_name (dynobj, ".dynamic");
3803 BFD_ASSERT (o != NULL);
3804
3805 dyncon = (Elf_External_Dyn *) o->contents;
3806 dynconend = (Elf_External_Dyn *) (o->contents + o->_raw_size);
3807 for (; dyncon < dynconend; dyncon++)
3808 {
3809 Elf_Internal_Dyn dyn;
3810 const char *name;
3811 unsigned int type;
3812
3813 elf_swap_dyn_in (dynobj, dyncon, &dyn);
3814
3815 switch (dyn.d_tag)
3816 {
3817 default:
3818 break;
3819 case DT_NULL:
3820 if (relativecount > 0 && dyncon + 1 < dynconend)
3821 {
3822 switch (elf_section_data (reldyn)->this_hdr.sh_type)
3823 {
3824 case SHT_REL: dyn.d_tag = DT_RELCOUNT; break;
3825 case SHT_RELA: dyn.d_tag = DT_RELACOUNT; break;
3826 default: break;
3827 }
3828 if (dyn.d_tag != DT_NULL)
3829 {
3830 dyn.d_un.d_val = relativecount;
3831 elf_swap_dyn_out (dynobj, &dyn, dyncon);
3832 relativecount = 0;
3833 }
3834 }
3835 break;
3836 case DT_INIT:
3837 name = info->init_function;
3838 goto get_sym;
3839 case DT_FINI:
3840 name = info->fini_function;
3841 get_sym:
3842 {
3843 struct elf_link_hash_entry *h;
3844
3845 h = elf_link_hash_lookup (elf_hash_table (info), name,
3846 FALSE, FALSE, TRUE);
3847 if (h != NULL
3848 && (h->root.type == bfd_link_hash_defined
3849 || h->root.type == bfd_link_hash_defweak))
3850 {
3851 dyn.d_un.d_val = h->root.u.def.value;
3852 o = h->root.u.def.section;
3853 if (o->output_section != NULL)
3854 dyn.d_un.d_val += (o->output_section->vma
3855 + o->output_offset);
3856 else
3857 {
3858 /* The symbol is imported from another shared
3859 library and does not apply to this one. */
3860 dyn.d_un.d_val = 0;
3861 }
3862
3863 elf_swap_dyn_out (dynobj, &dyn, dyncon);
3864 }
3865 }
3866 break;
3867
3868 case DT_PREINIT_ARRAYSZ:
3869 name = ".preinit_array";
3870 goto get_size;
3871 case DT_INIT_ARRAYSZ:
3872 name = ".init_array";
3873 goto get_size;
3874 case DT_FINI_ARRAYSZ:
3875 name = ".fini_array";
3876 get_size:
3877 o = bfd_get_section_by_name (abfd, name);
3878 if (o == NULL)
3879 {
3880 (*_bfd_error_handler)
3881 (_("%s: could not find output section %s"),
3882 bfd_get_filename (abfd), name);
3883 goto error_return;
3884 }
3885 if (o->_raw_size == 0)
3886 (*_bfd_error_handler)
3887 (_("warning: %s section has zero size"), name);
3888 dyn.d_un.d_val = o->_raw_size;
3889 elf_swap_dyn_out (dynobj, &dyn, dyncon);
3890 break;
3891
3892 case DT_PREINIT_ARRAY:
3893 name = ".preinit_array";
3894 goto get_vma;
3895 case DT_INIT_ARRAY:
3896 name = ".init_array";
3897 goto get_vma;
3898 case DT_FINI_ARRAY:
3899 name = ".fini_array";
3900 goto get_vma;
3901
3902 case DT_HASH:
3903 name = ".hash";
3904 goto get_vma;
3905 case DT_STRTAB:
3906 name = ".dynstr";
3907 goto get_vma;
3908 case DT_SYMTAB:
3909 name = ".dynsym";
3910 goto get_vma;
3911 case DT_VERDEF:
3912 name = ".gnu.version_d";
3913 goto get_vma;
3914 case DT_VERNEED:
3915 name = ".gnu.version_r";
3916 goto get_vma;
3917 case DT_VERSYM:
3918 name = ".gnu.version";
3919 get_vma:
3920 o = bfd_get_section_by_name (abfd, name);
3921 if (o == NULL)
3922 {
3923 (*_bfd_error_handler)
3924 (_("%s: could not find output section %s"),
3925 bfd_get_filename (abfd), name);
3926 goto error_return;
3927 }
3928 dyn.d_un.d_ptr = o->vma;
3929 elf_swap_dyn_out (dynobj, &dyn, dyncon);
3930 break;
3931
3932 case DT_REL:
3933 case DT_RELA:
3934 case DT_RELSZ:
3935 case DT_RELASZ:
3936 if (dyn.d_tag == DT_REL || dyn.d_tag == DT_RELSZ)
3937 type = SHT_REL;
3938 else
3939 type = SHT_RELA;
3940 dyn.d_un.d_val = 0;
3941 for (i = 1; i < elf_numsections (abfd); i++)
3942 {
3943 Elf_Internal_Shdr *hdr;
3944
3945 hdr = elf_elfsections (abfd)[i];
3946 if (hdr->sh_type == type
3947 && (hdr->sh_flags & SHF_ALLOC) != 0)
3948 {
3949 if (dyn.d_tag == DT_RELSZ || dyn.d_tag == DT_RELASZ)
3950 dyn.d_un.d_val += hdr->sh_size;
3951 else
3952 {
3953 if (dyn.d_un.d_val == 0
3954 || hdr->sh_addr < dyn.d_un.d_val)
3955 dyn.d_un.d_val = hdr->sh_addr;
3956 }
3957 }
3958 }
3959 elf_swap_dyn_out (dynobj, &dyn, dyncon);
3960 break;
3961 }
3962 }
3963 }
3964
3965 /* If we have created any dynamic sections, then output them. */
3966 if (dynobj != NULL)
3967 {
3968 if (! (*bed->elf_backend_finish_dynamic_sections) (abfd, info))
3969 goto error_return;
3970
3971 for (o = dynobj->sections; o != NULL; o = o->next)
3972 {
3973 if ((o->flags & SEC_HAS_CONTENTS) == 0
3974 || o->_raw_size == 0
3975 || o->output_section == bfd_abs_section_ptr)
3976 continue;
3977 if ((o->flags & SEC_LINKER_CREATED) == 0)
3978 {
3979 /* At this point, we are only interested in sections
3980 created by _bfd_elf_link_create_dynamic_sections. */
3981 continue;
3982 }
3983 if ((elf_section_data (o->output_section)->this_hdr.sh_type
3984 != SHT_STRTAB)
3985 || strcmp (bfd_get_section_name (abfd, o), ".dynstr") != 0)
3986 {
3987 if (! bfd_set_section_contents (abfd, o->output_section,
3988 o->contents,
3989 (file_ptr) o->output_offset,
3990 o->_raw_size))
3991 goto error_return;
3992 }
3993 else
3994 {
3995 /* The contents of the .dynstr section are actually in a
3996 stringtab. */
3997 off = elf_section_data (o->output_section)->this_hdr.sh_offset;
3998 if (bfd_seek (abfd, off, SEEK_SET) != 0
3999 || ! _bfd_elf_strtab_emit (abfd,
4000 elf_hash_table (info)->dynstr))
4001 goto error_return;
4002 }
4003 }
4004 }
4005
4006 if (info->relocatable)
4007 {
4008 bfd_boolean failed = FALSE;
4009
4010 bfd_map_over_sections (abfd, bfd_elf_set_group_contents, &failed);
4011 if (failed)
4012 goto error_return;
4013 }
4014
4015 /* If we have optimized stabs strings, output them. */
4016 if (elf_hash_table (info)->stab_info != NULL)
4017 {
4018 if (! _bfd_write_stab_strings (abfd, &elf_hash_table (info)->stab_info))
4019 goto error_return;
4020 }
4021
4022 if (info->eh_frame_hdr)
4023 {
4024 if (! _bfd_elf_write_section_eh_frame_hdr (abfd, info))
4025 goto error_return;
4026 }
4027
4028 if (finfo.symstrtab != NULL)
4029 _bfd_stringtab_free (finfo.symstrtab);
4030 if (finfo.contents != NULL)
4031 free (finfo.contents);
4032 if (finfo.external_relocs != NULL)
4033 free (finfo.external_relocs);
4034 if (finfo.internal_relocs != NULL)
4035 free (finfo.internal_relocs);
4036 if (finfo.external_syms != NULL)
4037 free (finfo.external_syms);
4038 if (finfo.locsym_shndx != NULL)
4039 free (finfo.locsym_shndx);
4040 if (finfo.internal_syms != NULL)
4041 free (finfo.internal_syms);
4042 if (finfo.indices != NULL)
4043 free (finfo.indices);
4044 if (finfo.sections != NULL)
4045 free (finfo.sections);
4046 if (finfo.symbuf != NULL)
4047 free (finfo.symbuf);
4048 if (finfo.symshndxbuf != NULL)
4049 free (finfo.symshndxbuf);
4050 for (o = abfd->sections; o != NULL; o = o->next)
4051 {
4052 if ((o->flags & SEC_RELOC) != 0
4053 && elf_section_data (o)->rel_hashes != NULL)
4054 free (elf_section_data (o)->rel_hashes);
4055 }
4056
4057 elf_tdata (abfd)->linker = TRUE;
4058
4059 return TRUE;
4060
4061 error_return:
4062 if (finfo.symstrtab != NULL)
4063 _bfd_stringtab_free (finfo.symstrtab);
4064 if (finfo.contents != NULL)
4065 free (finfo.contents);
4066 if (finfo.external_relocs != NULL)
4067 free (finfo.external_relocs);
4068 if (finfo.internal_relocs != NULL)
4069 free (finfo.internal_relocs);
4070 if (finfo.external_syms != NULL)
4071 free (finfo.external_syms);
4072 if (finfo.locsym_shndx != NULL)
4073 free (finfo.locsym_shndx);
4074 if (finfo.internal_syms != NULL)
4075 free (finfo.internal_syms);
4076 if (finfo.indices != NULL)
4077 free (finfo.indices);
4078 if (finfo.sections != NULL)
4079 free (finfo.sections);
4080 if (finfo.symbuf != NULL)
4081 free (finfo.symbuf);
4082 if (finfo.symshndxbuf != NULL)
4083 free (finfo.symshndxbuf);
4084 for (o = abfd->sections; o != NULL; o = o->next)
4085 {
4086 if ((o->flags & SEC_RELOC) != 0
4087 && elf_section_data (o)->rel_hashes != NULL)
4088 free (elf_section_data (o)->rel_hashes);
4089 }
4090
4091 return FALSE;
4092 }
4093
4094 /* Add a symbol to the output symbol table. */
4095
4096 static bfd_boolean
4097 elf_link_output_sym (struct elf_final_link_info *finfo,
4098 const char *name,
4099 Elf_Internal_Sym *elfsym,
4100 asection *input_sec)
4101 {
4102 Elf_External_Sym *dest;
4103 Elf_External_Sym_Shndx *destshndx;
4104 bfd_boolean (*output_symbol_hook)
4105 (bfd *, struct bfd_link_info *info, const char *,
4106 Elf_Internal_Sym *, asection *);
4107
4108 output_symbol_hook = get_elf_backend_data (finfo->output_bfd)->
4109 elf_backend_link_output_symbol_hook;
4110 if (output_symbol_hook != NULL)
4111 {
4112 if (! ((*output_symbol_hook)
4113 (finfo->output_bfd, finfo->info, name, elfsym, input_sec)))
4114 return FALSE;
4115 }
4116
4117 if (name == NULL || *name == '\0')
4118 elfsym->st_name = 0;
4119 else if (input_sec->flags & SEC_EXCLUDE)
4120 elfsym->st_name = 0;
4121 else
4122 {
4123 elfsym->st_name = (unsigned long) _bfd_stringtab_add (finfo->symstrtab,
4124 name, TRUE, FALSE);
4125 if (elfsym->st_name == (unsigned long) -1)
4126 return FALSE;
4127 }
4128
4129 if (finfo->symbuf_count >= finfo->symbuf_size)
4130 {
4131 if (! elf_link_flush_output_syms (finfo))
4132 return FALSE;
4133 }
4134
4135 dest = finfo->symbuf + finfo->symbuf_count;
4136 destshndx = finfo->symshndxbuf;
4137 if (destshndx != NULL)
4138 {
4139 if (bfd_get_symcount (finfo->output_bfd) >= finfo->shndxbuf_size)
4140 {
4141 bfd_size_type amt;
4142
4143 amt = finfo->shndxbuf_size * sizeof (Elf_External_Sym_Shndx);
4144 finfo->symshndxbuf = destshndx = bfd_realloc (destshndx, amt * 2);
4145 if (destshndx == NULL)
4146 return FALSE;
4147 memset ((char *) destshndx + amt, 0, amt);
4148 finfo->shndxbuf_size *= 2;
4149 }
4150 destshndx += bfd_get_symcount (finfo->output_bfd);
4151 }
4152
4153 elf_swap_symbol_out (finfo->output_bfd, elfsym, dest, destshndx);
4154 finfo->symbuf_count += 1;
4155 bfd_get_symcount (finfo->output_bfd) += 1;
4156
4157 return TRUE;
4158 }
4159
4160 /* Flush the output symbols to the file. */
4161
4162 static bfd_boolean
4163 elf_link_flush_output_syms (struct elf_final_link_info *finfo)
4164 {
4165 if (finfo->symbuf_count > 0)
4166 {
4167 Elf_Internal_Shdr *hdr;
4168 file_ptr pos;
4169 bfd_size_type amt;
4170
4171 hdr = &elf_tdata (finfo->output_bfd)->symtab_hdr;
4172 pos = hdr->sh_offset + hdr->sh_size;
4173 amt = finfo->symbuf_count * sizeof (Elf_External_Sym);
4174 if (bfd_seek (finfo->output_bfd, pos, SEEK_SET) != 0
4175 || bfd_bwrite (finfo->symbuf, amt, finfo->output_bfd) != amt)
4176 return FALSE;
4177
4178 hdr->sh_size += amt;
4179 finfo->symbuf_count = 0;
4180 }
4181
4182 return TRUE;
4183 }
4184
4185 /* For DSOs loaded in via a DT_NEEDED entry, emulate ld.so in
4186 allowing an unsatisfied unversioned symbol in the DSO to match a
4187 versioned symbol that would normally require an explicit version.
4188 We also handle the case that a DSO references a hidden symbol
4189 which may be satisfied by a versioned symbol in another DSO. */
4190
4191 static bfd_boolean
4192 elf_link_check_versioned_symbol (struct bfd_link_info *info,
4193 struct elf_link_hash_entry *h)
4194 {
4195 bfd *abfd;
4196 struct elf_link_loaded_list *loaded;
4197
4198 if (info->hash->creator->flavour != bfd_target_elf_flavour)
4199 return FALSE;
4200
4201 switch (h->root.type)
4202 {
4203 default:
4204 abfd = NULL;
4205 break;
4206
4207 case bfd_link_hash_undefined:
4208 case bfd_link_hash_undefweak:
4209 abfd = h->root.u.undef.abfd;
4210 if ((abfd->flags & DYNAMIC) == 0 || elf_dt_soname (abfd) == NULL)
4211 return FALSE;
4212 break;
4213
4214 case bfd_link_hash_defined:
4215 case bfd_link_hash_defweak:
4216 abfd = h->root.u.def.section->owner;
4217 break;
4218
4219 case bfd_link_hash_common:
4220 abfd = h->root.u.c.p->section->owner;
4221 break;
4222 }
4223 BFD_ASSERT (abfd != NULL);
4224
4225 for (loaded = elf_hash_table (info)->loaded;
4226 loaded != NULL;
4227 loaded = loaded->next)
4228 {
4229 bfd *input;
4230 Elf_Internal_Shdr *hdr;
4231 bfd_size_type symcount;
4232 bfd_size_type extsymcount;
4233 bfd_size_type extsymoff;
4234 Elf_Internal_Shdr *versymhdr;
4235 Elf_Internal_Sym *isym;
4236 Elf_Internal_Sym *isymend;
4237 Elf_Internal_Sym *isymbuf;
4238 Elf_External_Versym *ever;
4239 Elf_External_Versym *extversym;
4240
4241 input = loaded->abfd;
4242
4243 /* We check each DSO for a possible hidden versioned definition. */
4244 if (input == abfd
4245 || (input->flags & DYNAMIC) == 0
4246 || elf_dynversym (input) == 0)
4247 continue;
4248
4249 hdr = &elf_tdata (input)->dynsymtab_hdr;
4250
4251 symcount = hdr->sh_size / sizeof (Elf_External_Sym);
4252 if (elf_bad_symtab (input))
4253 {
4254 extsymcount = symcount;
4255 extsymoff = 0;
4256 }
4257 else
4258 {
4259 extsymcount = symcount - hdr->sh_info;
4260 extsymoff = hdr->sh_info;
4261 }
4262
4263 if (extsymcount == 0)
4264 continue;
4265
4266 isymbuf = bfd_elf_get_elf_syms (input, hdr, extsymcount, extsymoff,
4267 NULL, NULL, NULL);
4268 if (isymbuf == NULL)
4269 return FALSE;
4270
4271 /* Read in any version definitions. */
4272 versymhdr = &elf_tdata (input)->dynversym_hdr;
4273 extversym = bfd_malloc (versymhdr->sh_size);
4274 if (extversym == NULL)
4275 goto error_ret;
4276
4277 if (bfd_seek (input, versymhdr->sh_offset, SEEK_SET) != 0
4278 || (bfd_bread (extversym, versymhdr->sh_size, input)
4279 != versymhdr->sh_size))
4280 {
4281 free (extversym);
4282 error_ret:
4283 free (isymbuf);
4284 return FALSE;
4285 }
4286
4287 ever = extversym + extsymoff;
4288 isymend = isymbuf + extsymcount;
4289 for (isym = isymbuf; isym < isymend; isym++, ever++)
4290 {
4291 const char *name;
4292 Elf_Internal_Versym iver;
4293 unsigned short version_index;
4294
4295 if (ELF_ST_BIND (isym->st_info) == STB_LOCAL
4296 || isym->st_shndx == SHN_UNDEF)
4297 continue;
4298
4299 name = bfd_elf_string_from_elf_section (input,
4300 hdr->sh_link,
4301 isym->st_name);
4302 if (strcmp (name, h->root.root.string) != 0)
4303 continue;
4304
4305 _bfd_elf_swap_versym_in (input, ever, &iver);
4306
4307 if ((iver.vs_vers & VERSYM_HIDDEN) == 0)
4308 {
4309 /* If we have a non-hidden versioned sym, then it should
4310 have provided a definition for the undefined sym. */
4311 abort ();
4312 }
4313
4314 version_index = iver.vs_vers & VERSYM_VERSION;
4315 if (version_index == 1 || version_index == 2)
4316 {
4317 /* This is the base or first version. We can use it. */
4318 free (extversym);
4319 free (isymbuf);
4320 return TRUE;
4321 }
4322 }
4323
4324 free (extversym);
4325 free (isymbuf);
4326 }
4327
4328 return FALSE;
4329 }
4330
4331 /* Add an external symbol to the symbol table. This is called from
4332 the hash table traversal routine. When generating a shared object,
4333 we go through the symbol table twice. The first time we output
4334 anything that might have been forced to local scope in a version
4335 script. The second time we output the symbols that are still
4336 global symbols. */
4337
4338 static bfd_boolean
4339 elf_link_output_extsym (struct elf_link_hash_entry *h, void *data)
4340 {
4341 struct elf_outext_info *eoinfo = data;
4342 struct elf_final_link_info *finfo = eoinfo->finfo;
4343 bfd_boolean strip;
4344 Elf_Internal_Sym sym;
4345 asection *input_sec;
4346
4347 if (h->root.type == bfd_link_hash_warning)
4348 {
4349 h = (struct elf_link_hash_entry *) h->root.u.i.link;
4350 if (h->root.type == bfd_link_hash_new)
4351 return TRUE;
4352 }
4353
4354 /* Decide whether to output this symbol in this pass. */
4355 if (eoinfo->localsyms)
4356 {
4357 if ((h->elf_link_hash_flags & ELF_LINK_FORCED_LOCAL) == 0)
4358 return TRUE;
4359 }
4360 else
4361 {
4362 if ((h->elf_link_hash_flags & ELF_LINK_FORCED_LOCAL) != 0)
4363 return TRUE;
4364 }
4365
4366 /* If we are not creating a shared library, and this symbol is
4367 referenced by a shared library but is not defined anywhere, then
4368 warn that it is undefined. If we do not do this, the runtime
4369 linker will complain that the symbol is undefined when the
4370 program is run. We don't have to worry about symbols that are
4371 referenced by regular files, because we will already have issued
4372 warnings for them. */
4373 if (! finfo->info->relocatable
4374 && (finfo->info->executable
4375 || ! finfo->info->allow_shlib_undefined)
4376 && h->root.type == bfd_link_hash_undefined
4377 && (h->elf_link_hash_flags & ELF_LINK_HASH_REF_DYNAMIC) != 0
4378 && (h->elf_link_hash_flags & ELF_LINK_HASH_REF_REGULAR) == 0
4379 && ! elf_link_check_versioned_symbol (finfo->info, h))
4380 {
4381 if (! ((*finfo->info->callbacks->undefined_symbol)
4382 (finfo->info, h->root.root.string, h->root.u.undef.abfd,
4383 NULL, 0, TRUE)))
4384 {
4385 eoinfo->failed = TRUE;
4386 return FALSE;
4387 }
4388 }
4389
4390 /* We should also warn if a forced local symbol is referenced from
4391 shared libraries. */
4392 if (! finfo->info->relocatable
4393 && (! finfo->info->shared || ! finfo->info->allow_shlib_undefined)
4394 && (h->elf_link_hash_flags
4395 & (ELF_LINK_FORCED_LOCAL | ELF_LINK_HASH_REF_DYNAMIC
4396 | ELF_LINK_DYNAMIC_DEF | ELF_LINK_DYNAMIC_WEAK))
4397 == (ELF_LINK_FORCED_LOCAL | ELF_LINK_HASH_REF_DYNAMIC)
4398 && ! elf_link_check_versioned_symbol (finfo->info, h))
4399 {
4400 (*_bfd_error_handler)
4401 (_("%s: %s symbol `%s' in %s is referenced by DSO"),
4402 bfd_get_filename (finfo->output_bfd),
4403 ELF_ST_VISIBILITY (h->other) == STV_INTERNAL
4404 ? "internal"
4405 : ELF_ST_VISIBILITY (h->other) == STV_HIDDEN
4406 ? "hidden" : "local",
4407 h->root.root.string,
4408 bfd_archive_filename (h->root.u.def.section->owner));
4409 eoinfo->failed = TRUE;
4410 return FALSE;
4411 }
4412
4413 /* We don't want to output symbols that have never been mentioned by
4414 a regular file, or that we have been told to strip. However, if
4415 h->indx is set to -2, the symbol is used by a reloc and we must
4416 output it. */
4417 if (h->indx == -2)
4418 strip = FALSE;
4419 else if (((h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) != 0
4420 || (h->elf_link_hash_flags & ELF_LINK_HASH_REF_DYNAMIC) != 0)
4421 && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0
4422 && (h->elf_link_hash_flags & ELF_LINK_HASH_REF_REGULAR) == 0)
4423 strip = TRUE;
4424 else if (finfo->info->strip == strip_all)
4425 strip = TRUE;
4426 else if (finfo->info->strip == strip_some
4427 && bfd_hash_lookup (finfo->info->keep_hash,
4428 h->root.root.string, FALSE, FALSE) == NULL)
4429 strip = TRUE;
4430 else if (finfo->info->strip_discarded
4431 && (h->root.type == bfd_link_hash_defined
4432 || h->root.type == bfd_link_hash_defweak)
4433 && elf_discarded_section (h->root.u.def.section))
4434 strip = TRUE;
4435 else
4436 strip = FALSE;
4437
4438 /* If we're stripping it, and it's not a dynamic symbol, there's
4439 nothing else to do unless it is a forced local symbol. */
4440 if (strip
4441 && h->dynindx == -1
4442 && (h->elf_link_hash_flags & ELF_LINK_FORCED_LOCAL) == 0)
4443 return TRUE;
4444
4445 sym.st_value = 0;
4446 sym.st_size = h->size;
4447 sym.st_other = h->other;
4448 if ((h->elf_link_hash_flags & ELF_LINK_FORCED_LOCAL) != 0)
4449 sym.st_info = ELF_ST_INFO (STB_LOCAL, h->type);
4450 else if (h->root.type == bfd_link_hash_undefweak
4451 || h->root.type == bfd_link_hash_defweak)
4452 sym.st_info = ELF_ST_INFO (STB_WEAK, h->type);
4453 else
4454 sym.st_info = ELF_ST_INFO (STB_GLOBAL, h->type);
4455
4456 switch (h->root.type)
4457 {
4458 default:
4459 case bfd_link_hash_new:
4460 case bfd_link_hash_warning:
4461 abort ();
4462 return FALSE;
4463
4464 case bfd_link_hash_undefined:
4465 case bfd_link_hash_undefweak:
4466 input_sec = bfd_und_section_ptr;
4467 sym.st_shndx = SHN_UNDEF;
4468 break;
4469
4470 case bfd_link_hash_defined:
4471 case bfd_link_hash_defweak:
4472 {
4473 input_sec = h->root.u.def.section;
4474 if (input_sec->output_section != NULL)
4475 {
4476 sym.st_shndx =
4477 _bfd_elf_section_from_bfd_section (finfo->output_bfd,
4478 input_sec->output_section);
4479 if (sym.st_shndx == SHN_BAD)
4480 {
4481 (*_bfd_error_handler)
4482 (_("%s: could not find output section %s for input section %s"),
4483 bfd_get_filename (finfo->output_bfd),
4484 input_sec->output_section->name,
4485 input_sec->name);
4486 eoinfo->failed = TRUE;
4487 return FALSE;
4488 }
4489
4490 /* ELF symbols in relocatable files are section relative,
4491 but in nonrelocatable files they are virtual
4492 addresses. */
4493 sym.st_value = h->root.u.def.value + input_sec->output_offset;
4494 if (! finfo->info->relocatable)
4495 {
4496 sym.st_value += input_sec->output_section->vma;
4497 if (h->type == STT_TLS)
4498 {
4499 /* STT_TLS symbols are relative to PT_TLS segment
4500 base. */
4501 BFD_ASSERT (finfo->first_tls_sec != NULL);
4502 sym.st_value -= finfo->first_tls_sec->vma;
4503 }
4504 }
4505 }
4506 else
4507 {
4508 BFD_ASSERT (input_sec->owner == NULL
4509 || (input_sec->owner->flags & DYNAMIC) != 0);
4510 sym.st_shndx = SHN_UNDEF;
4511 input_sec = bfd_und_section_ptr;
4512 }
4513 }
4514 break;
4515
4516 case bfd_link_hash_common:
4517 input_sec = h->root.u.c.p->section;
4518 sym.st_shndx = SHN_COMMON;
4519 sym.st_value = 1 << h->root.u.c.p->alignment_power;
4520 break;
4521
4522 case bfd_link_hash_indirect:
4523 /* These symbols are created by symbol versioning. They point
4524 to the decorated version of the name. For example, if the
4525 symbol foo@@GNU_1.2 is the default, which should be used when
4526 foo is used with no version, then we add an indirect symbol
4527 foo which points to foo@@GNU_1.2. We ignore these symbols,
4528 since the indirected symbol is already in the hash table. */
4529 return TRUE;
4530 }
4531
4532 /* Give the processor backend a chance to tweak the symbol value,
4533 and also to finish up anything that needs to be done for this
4534 symbol. FIXME: Not calling elf_backend_finish_dynamic_symbol for
4535 forced local syms when non-shared is due to a historical quirk. */
4536 if ((h->dynindx != -1
4537 || (h->elf_link_hash_flags & ELF_LINK_FORCED_LOCAL) != 0)
4538 && ((finfo->info->shared
4539 && (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
4540 || h->root.type != bfd_link_hash_undefweak))
4541 || (h->elf_link_hash_flags & ELF_LINK_FORCED_LOCAL) == 0)
4542 && elf_hash_table (finfo->info)->dynamic_sections_created)
4543 {
4544 const struct elf_backend_data *bed;
4545
4546 bed = get_elf_backend_data (finfo->output_bfd);
4547 if (! ((*bed->elf_backend_finish_dynamic_symbol)
4548 (finfo->output_bfd, finfo->info, h, &sym)))
4549 {
4550 eoinfo->failed = TRUE;
4551 return FALSE;
4552 }
4553 }
4554
4555 /* If we are marking the symbol as undefined, and there are no
4556 non-weak references to this symbol from a regular object, then
4557 mark the symbol as weak undefined; if there are non-weak
4558 references, mark the symbol as strong. We can't do this earlier,
4559 because it might not be marked as undefined until the
4560 finish_dynamic_symbol routine gets through with it. */
4561 if (sym.st_shndx == SHN_UNDEF
4562 && (h->elf_link_hash_flags & ELF_LINK_HASH_REF_REGULAR) != 0
4563 && (ELF_ST_BIND (sym.st_info) == STB_GLOBAL
4564 || ELF_ST_BIND (sym.st_info) == STB_WEAK))
4565 {
4566 int bindtype;
4567
4568 if ((h->elf_link_hash_flags & ELF_LINK_HASH_REF_REGULAR_NONWEAK) != 0)
4569 bindtype = STB_GLOBAL;
4570 else
4571 bindtype = STB_WEAK;
4572 sym.st_info = ELF_ST_INFO (bindtype, ELF_ST_TYPE (sym.st_info));
4573 }
4574
4575 /* If a non-weak symbol with non-default visibility is not defined
4576 locally, it is a fatal error. */
4577 if (! finfo->info->relocatable
4578 && ELF_ST_VISIBILITY (sym.st_other) != STV_DEFAULT
4579 && ELF_ST_BIND (sym.st_info) != STB_WEAK
4580 && h->root.type == bfd_link_hash_undefined
4581 && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0)
4582 {
4583 (*_bfd_error_handler)
4584 (_("%s: %s symbol `%s' isn't defined"),
4585 bfd_get_filename (finfo->output_bfd),
4586 ELF_ST_VISIBILITY (sym.st_other) == STV_PROTECTED
4587 ? "protected"
4588 : ELF_ST_VISIBILITY (sym.st_other) == STV_INTERNAL
4589 ? "internal" : "hidden",
4590 h->root.root.string);
4591 eoinfo->failed = TRUE;
4592 return FALSE;
4593 }
4594
4595 /* If this symbol should be put in the .dynsym section, then put it
4596 there now. We already know the symbol index. We also fill in
4597 the entry in the .hash section. */
4598 if (h->dynindx != -1
4599 && elf_hash_table (finfo->info)->dynamic_sections_created)
4600 {
4601 size_t bucketcount;
4602 size_t bucket;
4603 size_t hash_entry_size;
4604 bfd_byte *bucketpos;
4605 bfd_vma chain;
4606 Elf_External_Sym *esym;
4607
4608 sym.st_name = h->dynstr_index;
4609 esym = (Elf_External_Sym *) finfo->dynsym_sec->contents + h->dynindx;
4610 elf_swap_symbol_out (finfo->output_bfd, &sym, esym, 0);
4611
4612 bucketcount = elf_hash_table (finfo->info)->bucketcount;
4613 bucket = h->elf_hash_value % bucketcount;
4614 hash_entry_size
4615 = elf_section_data (finfo->hash_sec)->this_hdr.sh_entsize;
4616 bucketpos = ((bfd_byte *) finfo->hash_sec->contents
4617 + (bucket + 2) * hash_entry_size);
4618 chain = bfd_get (8 * hash_entry_size, finfo->output_bfd, bucketpos);
4619 bfd_put (8 * hash_entry_size, finfo->output_bfd, h->dynindx, bucketpos);
4620 bfd_put (8 * hash_entry_size, finfo->output_bfd, chain,
4621 ((bfd_byte *) finfo->hash_sec->contents
4622 + (bucketcount + 2 + h->dynindx) * hash_entry_size));
4623
4624 if (finfo->symver_sec != NULL && finfo->symver_sec->contents != NULL)
4625 {
4626 Elf_Internal_Versym iversym;
4627 Elf_External_Versym *eversym;
4628
4629 if ((h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0)
4630 {
4631 if (h->verinfo.verdef == NULL)
4632 iversym.vs_vers = 0;
4633 else
4634 iversym.vs_vers = h->verinfo.verdef->vd_exp_refno + 1;
4635 }
4636 else
4637 {
4638 if (h->verinfo.vertree == NULL)
4639 iversym.vs_vers = 1;
4640 else
4641 iversym.vs_vers = h->verinfo.vertree->vernum + 1;
4642 }
4643
4644 if ((h->elf_link_hash_flags & ELF_LINK_HIDDEN) != 0)
4645 iversym.vs_vers |= VERSYM_HIDDEN;
4646
4647 eversym = (Elf_External_Versym *) finfo->symver_sec->contents;
4648 eversym += h->dynindx;
4649 _bfd_elf_swap_versym_out (finfo->output_bfd, &iversym, eversym);
4650 }
4651 }
4652
4653 /* If we're stripping it, then it was just a dynamic symbol, and
4654 there's nothing else to do. */
4655 if (strip || (input_sec->flags & SEC_EXCLUDE) != 0)
4656 return TRUE;
4657
4658 h->indx = bfd_get_symcount (finfo->output_bfd);
4659
4660 if (! elf_link_output_sym (finfo, h->root.root.string, &sym, input_sec))
4661 {
4662 eoinfo->failed = TRUE;
4663 return FALSE;
4664 }
4665
4666 return TRUE;
4667 }
4668
4669 /* Link an input file into the linker output file. This function
4670 handles all the sections and relocations of the input file at once.
4671 This is so that we only have to read the local symbols once, and
4672 don't have to keep them in memory. */
4673
4674 static bfd_boolean
4675 elf_link_input_bfd (struct elf_final_link_info *finfo, bfd *input_bfd)
4676 {
4677 bfd_boolean (*relocate_section)
4678 (bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *,
4679 Elf_Internal_Rela *, Elf_Internal_Sym *, asection **);
4680 bfd *output_bfd;
4681 Elf_Internal_Shdr *symtab_hdr;
4682 size_t locsymcount;
4683 size_t extsymoff;
4684 Elf_Internal_Sym *isymbuf;
4685 Elf_Internal_Sym *isym;
4686 Elf_Internal_Sym *isymend;
4687 long *pindex;
4688 asection **ppsection;
4689 asection *o;
4690 const struct elf_backend_data *bed;
4691 bfd_boolean emit_relocs;
4692 struct elf_link_hash_entry **sym_hashes;
4693
4694 output_bfd = finfo->output_bfd;
4695 bed = get_elf_backend_data (output_bfd);
4696 relocate_section = bed->elf_backend_relocate_section;
4697
4698 /* If this is a dynamic object, we don't want to do anything here:
4699 we don't want the local symbols, and we don't want the section
4700 contents. */
4701 if ((input_bfd->flags & DYNAMIC) != 0)
4702 return TRUE;
4703
4704 emit_relocs = (finfo->info->relocatable
4705 || finfo->info->emitrelocations
4706 || bed->elf_backend_emit_relocs);
4707
4708 symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
4709 if (elf_bad_symtab (input_bfd))
4710 {
4711 locsymcount = symtab_hdr->sh_size / sizeof (Elf_External_Sym);
4712 extsymoff = 0;
4713 }
4714 else
4715 {
4716 locsymcount = symtab_hdr->sh_info;
4717 extsymoff = symtab_hdr->sh_info;
4718 }
4719
4720 /* Read the local symbols. */
4721 isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents;
4722 if (isymbuf == NULL && locsymcount != 0)
4723 {
4724 isymbuf = bfd_elf_get_elf_syms (input_bfd, symtab_hdr, locsymcount, 0,
4725 finfo->internal_syms,
4726 finfo->external_syms,
4727 finfo->locsym_shndx);
4728 if (isymbuf == NULL)
4729 return FALSE;
4730 }
4731
4732 /* Find local symbol sections and adjust values of symbols in
4733 SEC_MERGE sections. Write out those local symbols we know are
4734 going into the output file. */
4735 isymend = isymbuf + locsymcount;
4736 for (isym = isymbuf, pindex = finfo->indices, ppsection = finfo->sections;
4737 isym < isymend;
4738 isym++, pindex++, ppsection++)
4739 {
4740 asection *isec;
4741 const char *name;
4742 Elf_Internal_Sym osym;
4743
4744 *pindex = -1;
4745
4746 if (elf_bad_symtab (input_bfd))
4747 {
4748 if (ELF_ST_BIND (isym->st_info) != STB_LOCAL)
4749 {
4750 *ppsection = NULL;
4751 continue;
4752 }
4753 }
4754
4755 if (isym->st_shndx == SHN_UNDEF)
4756 isec = bfd_und_section_ptr;
4757 else if (isym->st_shndx < SHN_LORESERVE
4758 || isym->st_shndx > SHN_HIRESERVE)
4759 {
4760 isec = section_from_elf_index (input_bfd, isym->st_shndx);
4761 if (isec
4762 && isec->sec_info_type == ELF_INFO_TYPE_MERGE
4763 && ELF_ST_TYPE (isym->st_info) != STT_SECTION)
4764 isym->st_value =
4765 _bfd_merged_section_offset (output_bfd, &isec,
4766 elf_section_data (isec)->sec_info,
4767 isym->st_value, 0);
4768 }
4769 else if (isym->st_shndx == SHN_ABS)
4770 isec = bfd_abs_section_ptr;
4771 else if (isym->st_shndx == SHN_COMMON)
4772 isec = bfd_com_section_ptr;
4773 else
4774 {
4775 /* Who knows? */
4776 isec = NULL;
4777 }
4778
4779 *ppsection = isec;
4780
4781 /* Don't output the first, undefined, symbol. */
4782 if (ppsection == finfo->sections)
4783 continue;
4784
4785 if (ELF_ST_TYPE (isym->st_info) == STT_SECTION)
4786 {
4787 /* We never output section symbols. Instead, we use the
4788 section symbol of the corresponding section in the output
4789 file. */
4790 continue;
4791 }
4792
4793 /* If we are stripping all symbols, we don't want to output this
4794 one. */
4795 if (finfo->info->strip == strip_all)
4796 continue;
4797
4798 /* If we are discarding all local symbols, we don't want to
4799 output this one. If we are generating a relocatable output
4800 file, then some of the local symbols may be required by
4801 relocs; we output them below as we discover that they are
4802 needed. */
4803 if (finfo->info->discard == discard_all)
4804 continue;
4805
4806 /* If this symbol is defined in a section which we are
4807 discarding, we don't need to keep it, but note that
4808 linker_mark is only reliable for sections that have contents.
4809 For the benefit of the MIPS ELF linker, we check SEC_EXCLUDE
4810 as well as linker_mark. */
4811 if ((isym->st_shndx < SHN_LORESERVE || isym->st_shndx > SHN_HIRESERVE)
4812 && isec != NULL
4813 && ((! isec->linker_mark && (isec->flags & SEC_HAS_CONTENTS) != 0)
4814 || (! finfo->info->relocatable
4815 && (isec->flags & SEC_EXCLUDE) != 0)))
4816 continue;
4817
4818 /* Get the name of the symbol. */
4819 name = bfd_elf_string_from_elf_section (input_bfd, symtab_hdr->sh_link,
4820 isym->st_name);
4821 if (name == NULL)
4822 return FALSE;
4823
4824 /* See if we are discarding symbols with this name. */
4825 if ((finfo->info->strip == strip_some
4826 && (bfd_hash_lookup (finfo->info->keep_hash, name, FALSE, FALSE)
4827 == NULL))
4828 || (((finfo->info->discard == discard_sec_merge
4829 && (isec->flags & SEC_MERGE) && ! finfo->info->relocatable)
4830 || finfo->info->discard == discard_l)
4831 && bfd_is_local_label_name (input_bfd, name)))
4832 continue;
4833
4834 /* If we get here, we are going to output this symbol. */
4835
4836 osym = *isym;
4837
4838 /* Adjust the section index for the output file. */
4839 osym.st_shndx = _bfd_elf_section_from_bfd_section (output_bfd,
4840 isec->output_section);
4841 if (osym.st_shndx == SHN_BAD)
4842 return FALSE;
4843
4844 *pindex = bfd_get_symcount (output_bfd);
4845
4846 /* ELF symbols in relocatable files are section relative, but
4847 in executable files they are virtual addresses. Note that
4848 this code assumes that all ELF sections have an associated
4849 BFD section with a reasonable value for output_offset; below
4850 we assume that they also have a reasonable value for
4851 output_section. Any special sections must be set up to meet
4852 these requirements. */
4853 osym.st_value += isec->output_offset;
4854 if (! finfo->info->relocatable)
4855 {
4856 osym.st_value += isec->output_section->vma;
4857 if (ELF_ST_TYPE (osym.st_info) == STT_TLS)
4858 {
4859 /* STT_TLS symbols are relative to PT_TLS segment base. */
4860 BFD_ASSERT (finfo->first_tls_sec != NULL);
4861 osym.st_value -= finfo->first_tls_sec->vma;
4862 }
4863 }
4864
4865 if (! elf_link_output_sym (finfo, name, &osym, isec))
4866 return FALSE;
4867 }
4868
4869 /* Relocate the contents of each section. */
4870 sym_hashes = elf_sym_hashes (input_bfd);
4871 for (o = input_bfd->sections; o != NULL; o = o->next)
4872 {
4873 bfd_byte *contents;
4874
4875 if (! o->linker_mark)
4876 {
4877 /* This section was omitted from the link. */
4878 continue;
4879 }
4880
4881 if ((o->flags & SEC_HAS_CONTENTS) == 0
4882 || (o->_raw_size == 0 && (o->flags & SEC_RELOC) == 0))
4883 continue;
4884
4885 if ((o->flags & SEC_LINKER_CREATED) != 0)
4886 {
4887 /* Section was created by _bfd_elf_link_create_dynamic_sections
4888 or somesuch. */
4889 continue;
4890 }
4891
4892 /* Get the contents of the section. They have been cached by a
4893 relaxation routine. Note that o is a section in an input
4894 file, so the contents field will not have been set by any of
4895 the routines which work on output files. */
4896 if (elf_section_data (o)->this_hdr.contents != NULL)
4897 contents = elf_section_data (o)->this_hdr.contents;
4898 else
4899 {
4900 contents = finfo->contents;
4901 if (! bfd_get_section_contents (input_bfd, o, contents, 0,
4902 o->_raw_size))
4903 return FALSE;
4904 }
4905
4906 if ((o->flags & SEC_RELOC) != 0)
4907 {
4908 Elf_Internal_Rela *internal_relocs;
4909
4910 /* Get the swapped relocs. */
4911 internal_relocs
4912 = _bfd_elf_link_read_relocs (input_bfd, o, finfo->external_relocs,
4913 finfo->internal_relocs, FALSE);
4914 if (internal_relocs == NULL
4915 && o->reloc_count > 0)
4916 return FALSE;
4917
4918 /* Run through the relocs looking for any against symbols
4919 from discarded sections and section symbols from
4920 removed link-once sections. Complain about relocs
4921 against discarded sections. Zero relocs against removed
4922 link-once sections. Preserve debug information as much
4923 as we can. */
4924 if (!elf_section_ignore_discarded_relocs (o))
4925 {
4926 Elf_Internal_Rela *rel, *relend;
4927
4928 rel = internal_relocs;
4929 relend = rel + o->reloc_count * bed->s->int_rels_per_ext_rel;
4930 for ( ; rel < relend; rel++)
4931 {
4932 unsigned long r_symndx = ELF_R_SYM (rel->r_info);
4933 asection *sec;
4934
4935 if (r_symndx >= locsymcount
4936 || (elf_bad_symtab (input_bfd)
4937 && finfo->sections[r_symndx] == NULL))
4938 {
4939 struct elf_link_hash_entry *h;
4940
4941 h = sym_hashes[r_symndx - extsymoff];
4942 while (h->root.type == bfd_link_hash_indirect
4943 || h->root.type == bfd_link_hash_warning)
4944 h = (struct elf_link_hash_entry *) h->root.u.i.link;
4945
4946 /* Complain if the definition comes from a
4947 discarded section. */
4948 sec = h->root.u.def.section;
4949 if ((h->root.type == bfd_link_hash_defined
4950 || h->root.type == bfd_link_hash_defweak)
4951 && elf_discarded_section (sec))
4952 {
4953 if ((o->flags & SEC_DEBUGGING) != 0)
4954 {
4955 BFD_ASSERT (r_symndx != 0);
4956 /* Try to preserve debug information. */
4957 if ((o->flags & SEC_DEBUGGING) != 0
4958 && sec->kept_section != NULL
4959 && sec->_raw_size == sec->kept_section->_raw_size)
4960 h->root.u.def.section
4961 = sec->kept_section;
4962 else
4963 memset (rel, 0, sizeof (*rel));
4964 }
4965 else
4966 finfo->info->callbacks->error_handler
4967 (LD_DEFINITION_IN_DISCARDED_SECTION,
4968 _("%T: discarded in section `%s' from %s\n"),
4969 h->root.root.string,
4970 h->root.root.string,
4971 h->root.u.def.section->name,
4972 bfd_archive_filename (h->root.u.def.section->owner));
4973 }
4974 }
4975 else
4976 {
4977 sec = finfo->sections[r_symndx];
4978
4979 if (sec != NULL && elf_discarded_section (sec))
4980 {
4981 if ((o->flags & SEC_DEBUGGING) != 0
4982 || (sec->flags & SEC_LINK_ONCE) != 0)
4983 {
4984 BFD_ASSERT (r_symndx != 0);
4985 /* Try to preserve debug information. */
4986 if ((o->flags & SEC_DEBUGGING) != 0
4987 && sec->kept_section != NULL
4988 && sec->_raw_size == sec->kept_section->_raw_size)
4989 finfo->sections[r_symndx]
4990 = sec->kept_section;
4991 else
4992 {
4993 rel->r_info
4994 = ELF_R_INFO (0, ELF_R_TYPE (rel->r_info));
4995 rel->r_addend = 0;
4996 }
4997 }
4998 else
4999 {
5000 static int count;
5001 int ok;
5002 char *buf;
5003
5004 ok = asprintf (&buf, "local symbol %d",
5005 count++);
5006 if (ok <= 0)
5007 buf = (char *) "local symbol";
5008 finfo->info->callbacks->error_handler
5009 (LD_DEFINITION_IN_DISCARDED_SECTION,
5010 _("%T: discarded in section `%s' from %s\n"),
5011 buf, buf, sec->name,
5012 bfd_archive_filename (input_bfd));
5013 if (ok != -1)
5014 free (buf);
5015 }
5016 }
5017 }
5018 }
5019 }
5020
5021 /* Relocate the section by invoking a back end routine.
5022
5023 The back end routine is responsible for adjusting the
5024 section contents as necessary, and (if using Rela relocs
5025 and generating a relocatable output file) adjusting the
5026 reloc addend as necessary.
5027
5028 The back end routine does not have to worry about setting
5029 the reloc address or the reloc symbol index.
5030
5031 The back end routine is given a pointer to the swapped in
5032 internal symbols, and can access the hash table entries
5033 for the external symbols via elf_sym_hashes (input_bfd).
5034
5035 When generating relocatable output, the back end routine
5036 must handle STB_LOCAL/STT_SECTION symbols specially. The
5037 output symbol is going to be a section symbol
5038 corresponding to the output section, which will require
5039 the addend to be adjusted. */
5040
5041 if (! (*relocate_section) (output_bfd, finfo->info,
5042 input_bfd, o, contents,
5043 internal_relocs,
5044 isymbuf,
5045 finfo->sections))
5046 return FALSE;
5047
5048 if (emit_relocs)
5049 {
5050 Elf_Internal_Rela *irela;
5051 Elf_Internal_Rela *irelaend;
5052 bfd_vma last_offset;
5053 struct elf_link_hash_entry **rel_hash;
5054 Elf_Internal_Shdr *input_rel_hdr, *input_rel_hdr2;
5055 unsigned int next_erel;
5056 bfd_boolean (*reloc_emitter)
5057 (bfd *, asection *, Elf_Internal_Shdr *, Elf_Internal_Rela *);
5058 bfd_boolean rela_normal;
5059
5060 input_rel_hdr = &elf_section_data (o)->rel_hdr;
5061 rela_normal = (bed->rela_normal
5062 && (input_rel_hdr->sh_entsize
5063 == sizeof (Elf_External_Rela)));
5064
5065 /* Adjust the reloc addresses and symbol indices. */
5066
5067 irela = internal_relocs;
5068 irelaend = irela + o->reloc_count * bed->s->int_rels_per_ext_rel;
5069 rel_hash = (elf_section_data (o->output_section)->rel_hashes
5070 + elf_section_data (o->output_section)->rel_count
5071 + elf_section_data (o->output_section)->rel_count2);
5072 last_offset = o->output_offset;
5073 if (!finfo->info->relocatable)
5074 last_offset += o->output_section->vma;
5075 for (next_erel = 0; irela < irelaend; irela++, next_erel++)
5076 {
5077 unsigned long r_symndx;
5078 asection *sec;
5079 Elf_Internal_Sym sym;
5080
5081 if (next_erel == bed->s->int_rels_per_ext_rel)
5082 {
5083 rel_hash++;
5084 next_erel = 0;
5085 }
5086
5087 irela->r_offset = _bfd_elf_section_offset (output_bfd,
5088 finfo->info, o,
5089 irela->r_offset);
5090 if (irela->r_offset >= (bfd_vma) -2)
5091 {
5092 /* This is a reloc for a deleted entry or somesuch.
5093 Turn it into an R_*_NONE reloc, at the same
5094 offset as the last reloc. elf_eh_frame.c and
5095 elf_bfd_discard_info rely on reloc offsets
5096 being ordered. */
5097 irela->r_offset = last_offset;
5098 irela->r_info = 0;
5099 irela->r_addend = 0;
5100 continue;
5101 }
5102
5103 irela->r_offset += o->output_offset;
5104
5105 /* Relocs in an executable have to be virtual addresses. */
5106 if (!finfo->info->relocatable)
5107 irela->r_offset += o->output_section->vma;
5108
5109 last_offset = irela->r_offset;
5110
5111 r_symndx = ELF_R_SYM (irela->r_info);
5112 if (r_symndx == STN_UNDEF)
5113 continue;
5114
5115 if (r_symndx >= locsymcount
5116 || (elf_bad_symtab (input_bfd)
5117 && finfo->sections[r_symndx] == NULL))
5118 {
5119 struct elf_link_hash_entry *rh;
5120 unsigned long indx;
5121
5122 /* This is a reloc against a global symbol. We
5123 have not yet output all the local symbols, so
5124 we do not know the symbol index of any global
5125 symbol. We set the rel_hash entry for this
5126 reloc to point to the global hash table entry
5127 for this symbol. The symbol index is then
5128 set at the end of elf_bfd_final_link. */
5129 indx = r_symndx - extsymoff;
5130 rh = elf_sym_hashes (input_bfd)[indx];
5131 while (rh->root.type == bfd_link_hash_indirect
5132 || rh->root.type == bfd_link_hash_warning)
5133 rh = (struct elf_link_hash_entry *) rh->root.u.i.link;
5134
5135 /* Setting the index to -2 tells
5136 elf_link_output_extsym that this symbol is
5137 used by a reloc. */
5138 BFD_ASSERT (rh->indx < 0);
5139 rh->indx = -2;
5140
5141 *rel_hash = rh;
5142
5143 continue;
5144 }
5145
5146 /* This is a reloc against a local symbol. */
5147
5148 *rel_hash = NULL;
5149 sym = isymbuf[r_symndx];
5150 sec = finfo->sections[r_symndx];
5151 if (ELF_ST_TYPE (sym.st_info) == STT_SECTION)
5152 {
5153 /* I suppose the backend ought to fill in the
5154 section of any STT_SECTION symbol against a
5155 processor specific section. If we have
5156 discarded a section, the output_section will
5157 be the absolute section. */
5158 if (bfd_is_abs_section (sec)
5159 || (sec != NULL
5160 && bfd_is_abs_section (sec->output_section)))
5161 r_symndx = 0;
5162 else if (sec == NULL || sec->owner == NULL)
5163 {
5164 bfd_set_error (bfd_error_bad_value);
5165 return FALSE;
5166 }
5167 else
5168 {
5169 r_symndx = sec->output_section->target_index;
5170 BFD_ASSERT (r_symndx != 0);
5171 }
5172
5173 /* Adjust the addend according to where the
5174 section winds up in the output section. */
5175 if (rela_normal)
5176 irela->r_addend += sec->output_offset;
5177 }
5178 else
5179 {
5180 if (finfo->indices[r_symndx] == -1)
5181 {
5182 unsigned long shlink;
5183 const char *name;
5184 asection *osec;
5185
5186 if (finfo->info->strip == strip_all)
5187 {
5188 /* You can't do ld -r -s. */
5189 bfd_set_error (bfd_error_invalid_operation);
5190 return FALSE;
5191 }
5192
5193 /* This symbol was skipped earlier, but
5194 since it is needed by a reloc, we
5195 must output it now. */
5196 shlink = symtab_hdr->sh_link;
5197 name = (bfd_elf_string_from_elf_section
5198 (input_bfd, shlink, sym.st_name));
5199 if (name == NULL)
5200 return FALSE;
5201
5202 osec = sec->output_section;
5203 sym.st_shndx =
5204 _bfd_elf_section_from_bfd_section (output_bfd,
5205 osec);
5206 if (sym.st_shndx == SHN_BAD)
5207 return FALSE;
5208
5209 sym.st_value += sec->output_offset;
5210 if (! finfo->info->relocatable)
5211 {
5212 sym.st_value += osec->vma;
5213 if (ELF_ST_TYPE (sym.st_info) == STT_TLS)
5214 {
5215 /* STT_TLS symbols are relative to PT_TLS
5216 segment base. */
5217 BFD_ASSERT (finfo->first_tls_sec != NULL);
5218 sym.st_value -= finfo->first_tls_sec->vma;
5219 }
5220 }
5221
5222 finfo->indices[r_symndx]
5223 = bfd_get_symcount (output_bfd);
5224
5225 if (! elf_link_output_sym (finfo, name, &sym, sec))
5226 return FALSE;
5227 }
5228
5229 r_symndx = finfo->indices[r_symndx];
5230 }
5231
5232 irela->r_info = ELF_R_INFO (r_symndx,
5233 ELF_R_TYPE (irela->r_info));
5234 }
5235
5236 /* Swap out the relocs. */
5237 if (bed->elf_backend_emit_relocs
5238 && !(finfo->info->relocatable
5239 || finfo->info->emitrelocations))
5240 reloc_emitter = bed->elf_backend_emit_relocs;
5241 else
5242 reloc_emitter = _bfd_elf_link_output_relocs;
5243
5244 if (input_rel_hdr->sh_size != 0
5245 && ! (*reloc_emitter) (output_bfd, o, input_rel_hdr,
5246 internal_relocs))
5247 return FALSE;
5248
5249 input_rel_hdr2 = elf_section_data (o)->rel_hdr2;
5250 if (input_rel_hdr2 && input_rel_hdr2->sh_size != 0)
5251 {
5252 internal_relocs += (NUM_SHDR_ENTRIES (input_rel_hdr)
5253 * bed->s->int_rels_per_ext_rel);
5254 if (! (*reloc_emitter) (output_bfd, o, input_rel_hdr2,
5255 internal_relocs))
5256 return FALSE;
5257 }
5258 }
5259 }
5260
5261 /* Write out the modified section contents. */
5262 if (bed->elf_backend_write_section
5263 && (*bed->elf_backend_write_section) (output_bfd, o, contents))
5264 {
5265 /* Section written out. */
5266 }
5267 else switch (o->sec_info_type)
5268 {
5269 case ELF_INFO_TYPE_STABS:
5270 if (! (_bfd_write_section_stabs
5271 (output_bfd,
5272 &elf_hash_table (finfo->info)->stab_info,
5273 o, &elf_section_data (o)->sec_info, contents)))
5274 return FALSE;
5275 break;
5276 case ELF_INFO_TYPE_MERGE:
5277 if (! _bfd_write_merged_section (output_bfd, o,
5278 elf_section_data (o)->sec_info))
5279 return FALSE;
5280 break;
5281 case ELF_INFO_TYPE_EH_FRAME:
5282 {
5283 if (! _bfd_elf_write_section_eh_frame (output_bfd, finfo->info,
5284 o, contents))
5285 return FALSE;
5286 }
5287 break;
5288 default:
5289 {
5290 bfd_size_type sec_size;
5291
5292 sec_size = (o->_cooked_size != 0 ? o->_cooked_size : o->_raw_size);
5293 if (! (o->flags & SEC_EXCLUDE)
5294 && ! bfd_set_section_contents (output_bfd, o->output_section,
5295 contents,
5296 (file_ptr) o->output_offset,
5297 sec_size))
5298 return FALSE;
5299 }
5300 break;
5301 }
5302 }
5303
5304 return TRUE;
5305 }
5306
5307 /* Generate a reloc when linking an ELF file. This is a reloc
5308 requested by the linker, and does come from any input file. This
5309 is used to build constructor and destructor tables when linking
5310 with -Ur. */
5311
5312 static bfd_boolean
5313 elf_reloc_link_order (bfd *output_bfd,
5314 struct bfd_link_info *info,
5315 asection *output_section,
5316 struct bfd_link_order *link_order)
5317 {
5318 reloc_howto_type *howto;
5319 long indx;
5320 bfd_vma offset;
5321 bfd_vma addend;
5322 struct elf_link_hash_entry **rel_hash_ptr;
5323 Elf_Internal_Shdr *rel_hdr;
5324 const struct elf_backend_data *bed = get_elf_backend_data (output_bfd);
5325 Elf_Internal_Rela irel[MAX_INT_RELS_PER_EXT_REL];
5326 bfd_byte *erel;
5327 unsigned int i;
5328
5329 howto = bfd_reloc_type_lookup (output_bfd, link_order->u.reloc.p->reloc);
5330 if (howto == NULL)
5331 {
5332 bfd_set_error (bfd_error_bad_value);
5333 return FALSE;
5334 }
5335
5336 addend = link_order->u.reloc.p->addend;
5337
5338 /* Figure out the symbol index. */
5339 rel_hash_ptr = (elf_section_data (output_section)->rel_hashes
5340 + elf_section_data (output_section)->rel_count
5341 + elf_section_data (output_section)->rel_count2);
5342 if (link_order->type == bfd_section_reloc_link_order)
5343 {
5344 indx = link_order->u.reloc.p->u.section->target_index;
5345 BFD_ASSERT (indx != 0);
5346 *rel_hash_ptr = NULL;
5347 }
5348 else
5349 {
5350 struct elf_link_hash_entry *h;
5351
5352 /* Treat a reloc against a defined symbol as though it were
5353 actually against the section. */
5354 h = ((struct elf_link_hash_entry *)
5355 bfd_wrapped_link_hash_lookup (output_bfd, info,
5356 link_order->u.reloc.p->u.name,
5357 FALSE, FALSE, TRUE));
5358 if (h != NULL
5359 && (h->root.type == bfd_link_hash_defined
5360 || h->root.type == bfd_link_hash_defweak))
5361 {
5362 asection *section;
5363
5364 section = h->root.u.def.section;
5365 indx = section->output_section->target_index;
5366 *rel_hash_ptr = NULL;
5367 /* It seems that we ought to add the symbol value to the
5368 addend here, but in practice it has already been added
5369 because it was passed to constructor_callback. */
5370 addend += section->output_section->vma + section->output_offset;
5371 }
5372 else if (h != NULL)
5373 {
5374 /* Setting the index to -2 tells elf_link_output_extsym that
5375 this symbol is used by a reloc. */
5376 h->indx = -2;
5377 *rel_hash_ptr = h;
5378 indx = 0;
5379 }
5380 else
5381 {
5382 if (! ((*info->callbacks->unattached_reloc)
5383 (info, link_order->u.reloc.p->u.name, NULL, NULL, 0)))
5384 return FALSE;
5385 indx = 0;
5386 }
5387 }
5388
5389 /* If this is an inplace reloc, we must write the addend into the
5390 object file. */
5391 if (howto->partial_inplace && addend != 0)
5392 {
5393 bfd_size_type size;
5394 bfd_reloc_status_type rstat;
5395 bfd_byte *buf;
5396 bfd_boolean ok;
5397 const char *sym_name;
5398
5399 size = bfd_get_reloc_size (howto);
5400 buf = bfd_zmalloc (size);
5401 if (buf == NULL)
5402 return FALSE;
5403 rstat = _bfd_relocate_contents (howto, output_bfd, addend, buf);
5404 switch (rstat)
5405 {
5406 case bfd_reloc_ok:
5407 break;
5408
5409 default:
5410 case bfd_reloc_outofrange:
5411 abort ();
5412
5413 case bfd_reloc_overflow:
5414 if (link_order->type == bfd_section_reloc_link_order)
5415 sym_name = bfd_section_name (output_bfd,
5416 link_order->u.reloc.p->u.section);
5417 else
5418 sym_name = link_order->u.reloc.p->u.name;
5419 if (! ((*info->callbacks->reloc_overflow)
5420 (info, sym_name, howto->name, addend, NULL, NULL, 0)))
5421 {
5422 free (buf);
5423 return FALSE;
5424 }
5425 break;
5426 }
5427 ok = bfd_set_section_contents (output_bfd, output_section, buf,
5428 link_order->offset, size);
5429 free (buf);
5430 if (! ok)
5431 return FALSE;
5432 }
5433
5434 /* The address of a reloc is relative to the section in a
5435 relocatable file, and is a virtual address in an executable
5436 file. */
5437 offset = link_order->offset;
5438 if (! info->relocatable)
5439 offset += output_section->vma;
5440
5441 for (i = 0; i < bed->s->int_rels_per_ext_rel; i++)
5442 {
5443 irel[i].r_offset = offset;
5444 irel[i].r_info = 0;
5445 irel[i].r_addend = 0;
5446 }
5447 irel[0].r_info = ELF_R_INFO (indx, howto->type);
5448
5449 rel_hdr = &elf_section_data (output_section)->rel_hdr;
5450 erel = rel_hdr->contents;
5451 if (rel_hdr->sh_type == SHT_REL)
5452 {
5453 erel += (elf_section_data (output_section)->rel_count
5454 * sizeof (Elf_External_Rel));
5455 (*bed->s->swap_reloc_out) (output_bfd, irel, erel);
5456 }
5457 else
5458 {
5459 irel[0].r_addend = addend;
5460 erel += (elf_section_data (output_section)->rel_count
5461 * sizeof (Elf_External_Rela));
5462 (*bed->s->swap_reloca_out) (output_bfd, irel, erel);
5463 }
5464
5465 ++elf_section_data (output_section)->rel_count;
5466
5467 return TRUE;
5468 }
5469 \f
5470 /* Garbage collect unused sections. */
5471
5472 static bfd_boolean elf_gc_sweep_symbol
5473 (struct elf_link_hash_entry *, void *);
5474
5475 static bfd_boolean elf_gc_allocate_got_offsets
5476 (struct elf_link_hash_entry *, void *);
5477
5478 /* The mark phase of garbage collection. For a given section, mark
5479 it and any sections in this section's group, and all the sections
5480 which define symbols to which it refers. */
5481
5482 typedef asection * (*gc_mark_hook_fn)
5483 (asection *, struct bfd_link_info *, Elf_Internal_Rela *,
5484 struct elf_link_hash_entry *, Elf_Internal_Sym *);
5485
5486 static bfd_boolean
5487 elf_gc_mark (struct bfd_link_info *info,
5488 asection *sec,
5489 gc_mark_hook_fn gc_mark_hook)
5490 {
5491 bfd_boolean ret;
5492 asection *group_sec;
5493
5494 sec->gc_mark = 1;
5495
5496 /* Mark all the sections in the group. */
5497 group_sec = elf_section_data (sec)->next_in_group;
5498 if (group_sec && !group_sec->gc_mark)
5499 if (!elf_gc_mark (info, group_sec, gc_mark_hook))
5500 return FALSE;
5501
5502 /* Look through the section relocs. */
5503 ret = TRUE;
5504 if ((sec->flags & SEC_RELOC) != 0 && sec->reloc_count > 0)
5505 {
5506 Elf_Internal_Rela *relstart, *rel, *relend;
5507 Elf_Internal_Shdr *symtab_hdr;
5508 struct elf_link_hash_entry **sym_hashes;
5509 size_t nlocsyms;
5510 size_t extsymoff;
5511 bfd *input_bfd = sec->owner;
5512 const struct elf_backend_data *bed = get_elf_backend_data (input_bfd);
5513 Elf_Internal_Sym *isym = NULL;
5514
5515 symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
5516 sym_hashes = elf_sym_hashes (input_bfd);
5517
5518 /* Read the local symbols. */
5519 if (elf_bad_symtab (input_bfd))
5520 {
5521 nlocsyms = symtab_hdr->sh_size / sizeof (Elf_External_Sym);
5522 extsymoff = 0;
5523 }
5524 else
5525 extsymoff = nlocsyms = symtab_hdr->sh_info;
5526
5527 isym = (Elf_Internal_Sym *) symtab_hdr->contents;
5528 if (isym == NULL && nlocsyms != 0)
5529 {
5530 isym = bfd_elf_get_elf_syms (input_bfd, symtab_hdr, nlocsyms, 0,
5531 NULL, NULL, NULL);
5532 if (isym == NULL)
5533 return FALSE;
5534 }
5535
5536 /* Read the relocations. */
5537 relstart = _bfd_elf_link_read_relocs (input_bfd, sec, NULL, NULL,
5538 info->keep_memory);
5539 if (relstart == NULL)
5540 {
5541 ret = FALSE;
5542 goto out1;
5543 }
5544 relend = relstart + sec->reloc_count * bed->s->int_rels_per_ext_rel;
5545
5546 for (rel = relstart; rel < relend; rel++)
5547 {
5548 unsigned long r_symndx;
5549 asection *rsec;
5550 struct elf_link_hash_entry *h;
5551
5552 r_symndx = ELF_R_SYM (rel->r_info);
5553 if (r_symndx == 0)
5554 continue;
5555
5556 if (r_symndx >= nlocsyms
5557 || ELF_ST_BIND (isym[r_symndx].st_info) != STB_LOCAL)
5558 {
5559 h = sym_hashes[r_symndx - extsymoff];
5560 rsec = (*gc_mark_hook) (sec, info, rel, h, NULL);
5561 }
5562 else
5563 {
5564 rsec = (*gc_mark_hook) (sec, info, rel, NULL, &isym[r_symndx]);
5565 }
5566
5567 if (rsec && !rsec->gc_mark)
5568 {
5569 if (bfd_get_flavour (rsec->owner) != bfd_target_elf_flavour)
5570 rsec->gc_mark = 1;
5571 else if (!elf_gc_mark (info, rsec, gc_mark_hook))
5572 {
5573 ret = FALSE;
5574 goto out2;
5575 }
5576 }
5577 }
5578
5579 out2:
5580 if (elf_section_data (sec)->relocs != relstart)
5581 free (relstart);
5582 out1:
5583 if (isym != NULL && symtab_hdr->contents != (unsigned char *) isym)
5584 {
5585 if (! info->keep_memory)
5586 free (isym);
5587 else
5588 symtab_hdr->contents = (unsigned char *) isym;
5589 }
5590 }
5591
5592 return ret;
5593 }
5594
5595 /* The sweep phase of garbage collection. Remove all garbage sections. */
5596
5597 typedef bfd_boolean (*gc_sweep_hook_fn)
5598 (bfd *, struct bfd_link_info *, asection *, const Elf_Internal_Rela *);
5599
5600 static bfd_boolean
5601 elf_gc_sweep (struct bfd_link_info *info, gc_sweep_hook_fn gc_sweep_hook)
5602 {
5603 bfd *sub;
5604
5605 for (sub = info->input_bfds; sub != NULL; sub = sub->link_next)
5606 {
5607 asection *o;
5608
5609 if (bfd_get_flavour (sub) != bfd_target_elf_flavour)
5610 continue;
5611
5612 for (o = sub->sections; o != NULL; o = o->next)
5613 {
5614 /* Keep special sections. Keep .debug sections. */
5615 if ((o->flags & SEC_LINKER_CREATED)
5616 || (o->flags & SEC_DEBUGGING))
5617 o->gc_mark = 1;
5618
5619 if (o->gc_mark)
5620 continue;
5621
5622 /* Skip sweeping sections already excluded. */
5623 if (o->flags & SEC_EXCLUDE)
5624 continue;
5625
5626 /* Since this is early in the link process, it is simple
5627 to remove a section from the output. */
5628 o->flags |= SEC_EXCLUDE;
5629
5630 /* But we also have to update some of the relocation
5631 info we collected before. */
5632 if (gc_sweep_hook
5633 && (o->flags & SEC_RELOC) && o->reloc_count > 0)
5634 {
5635 Elf_Internal_Rela *internal_relocs;
5636 bfd_boolean r;
5637
5638 internal_relocs
5639 = _bfd_elf_link_read_relocs (o->owner, o, NULL, NULL,
5640 info->keep_memory);
5641 if (internal_relocs == NULL)
5642 return FALSE;
5643
5644 r = (*gc_sweep_hook) (o->owner, info, o, internal_relocs);
5645
5646 if (elf_section_data (o)->relocs != internal_relocs)
5647 free (internal_relocs);
5648
5649 if (!r)
5650 return FALSE;
5651 }
5652 }
5653 }
5654
5655 /* Remove the symbols that were in the swept sections from the dynamic
5656 symbol table. GCFIXME: Anyone know how to get them out of the
5657 static symbol table as well? */
5658 {
5659 int i = 0;
5660
5661 elf_link_hash_traverse (elf_hash_table (info), elf_gc_sweep_symbol, &i);
5662
5663 elf_hash_table (info)->dynsymcount = i;
5664 }
5665
5666 return TRUE;
5667 }
5668
5669 /* Sweep symbols in swept sections. Called via elf_link_hash_traverse. */
5670
5671 static bfd_boolean
5672 elf_gc_sweep_symbol (struct elf_link_hash_entry *h, void *idxptr)
5673 {
5674 int *idx = idxptr;
5675
5676 if (h->root.type == bfd_link_hash_warning)
5677 h = (struct elf_link_hash_entry *) h->root.u.i.link;
5678
5679 if (h->dynindx != -1
5680 && ((h->root.type != bfd_link_hash_defined
5681 && h->root.type != bfd_link_hash_defweak)
5682 || h->root.u.def.section->gc_mark))
5683 h->dynindx = (*idx)++;
5684
5685 return TRUE;
5686 }
5687
5688 /* Propogate collected vtable information. This is called through
5689 elf_link_hash_traverse. */
5690
5691 static bfd_boolean
5692 elf_gc_propagate_vtable_entries_used (struct elf_link_hash_entry *h, void *okp)
5693 {
5694 if (h->root.type == bfd_link_hash_warning)
5695 h = (struct elf_link_hash_entry *) h->root.u.i.link;
5696
5697 /* Those that are not vtables. */
5698 if (h->vtable_parent == NULL)
5699 return TRUE;
5700
5701 /* Those vtables that do not have parents, we cannot merge. */
5702 if (h->vtable_parent == (struct elf_link_hash_entry *) -1)
5703 return TRUE;
5704
5705 /* If we've already been done, exit. */
5706 if (h->vtable_entries_used && h->vtable_entries_used[-1])
5707 return TRUE;
5708
5709 /* Make sure the parent's table is up to date. */
5710 elf_gc_propagate_vtable_entries_used (h->vtable_parent, okp);
5711
5712 if (h->vtable_entries_used == NULL)
5713 {
5714 /* None of this table's entries were referenced. Re-use the
5715 parent's table. */
5716 h->vtable_entries_used = h->vtable_parent->vtable_entries_used;
5717 h->vtable_entries_size = h->vtable_parent->vtable_entries_size;
5718 }
5719 else
5720 {
5721 size_t n;
5722 bfd_boolean *cu, *pu;
5723
5724 /* Or the parent's entries into ours. */
5725 cu = h->vtable_entries_used;
5726 cu[-1] = TRUE;
5727 pu = h->vtable_parent->vtable_entries_used;
5728 if (pu != NULL)
5729 {
5730 const struct elf_backend_data *bed;
5731 unsigned int log_file_align;
5732
5733 bed = get_elf_backend_data (h->root.u.def.section->owner);
5734 log_file_align = bed->s->log_file_align;
5735 n = h->vtable_parent->vtable_entries_size >> log_file_align;
5736 while (n--)
5737 {
5738 if (*pu)
5739 *cu = TRUE;
5740 pu++;
5741 cu++;
5742 }
5743 }
5744 }
5745
5746 return TRUE;
5747 }
5748
5749 static bfd_boolean
5750 elf_gc_smash_unused_vtentry_relocs (struct elf_link_hash_entry *h, void *okp)
5751 {
5752 asection *sec;
5753 bfd_vma hstart, hend;
5754 Elf_Internal_Rela *relstart, *relend, *rel;
5755 const struct elf_backend_data *bed;
5756 unsigned int log_file_align;
5757
5758 if (h->root.type == bfd_link_hash_warning)
5759 h = (struct elf_link_hash_entry *) h->root.u.i.link;
5760
5761 /* Take care of both those symbols that do not describe vtables as
5762 well as those that are not loaded. */
5763 if (h->vtable_parent == NULL)
5764 return TRUE;
5765
5766 BFD_ASSERT (h->root.type == bfd_link_hash_defined
5767 || h->root.type == bfd_link_hash_defweak);
5768
5769 sec = h->root.u.def.section;
5770 hstart = h->root.u.def.value;
5771 hend = hstart + h->size;
5772
5773 relstart = _bfd_elf_link_read_relocs (sec->owner, sec, NULL, NULL, TRUE);
5774 if (!relstart)
5775 return *(bfd_boolean *) okp = FALSE;
5776 bed = get_elf_backend_data (sec->owner);
5777 log_file_align = bed->s->log_file_align;
5778
5779 relend = relstart + sec->reloc_count * bed->s->int_rels_per_ext_rel;
5780
5781 for (rel = relstart; rel < relend; ++rel)
5782 if (rel->r_offset >= hstart && rel->r_offset < hend)
5783 {
5784 /* If the entry is in use, do nothing. */
5785 if (h->vtable_entries_used
5786 && (rel->r_offset - hstart) < h->vtable_entries_size)
5787 {
5788 bfd_vma entry = (rel->r_offset - hstart) >> log_file_align;
5789 if (h->vtable_entries_used[entry])
5790 continue;
5791 }
5792 /* Otherwise, kill it. */
5793 rel->r_offset = rel->r_info = rel->r_addend = 0;
5794 }
5795
5796 return TRUE;
5797 }
5798
5799 /* Do mark and sweep of unused sections. */
5800
5801 bfd_boolean
5802 elf_gc_sections (bfd *abfd, struct bfd_link_info *info)
5803 {
5804 bfd_boolean ok = TRUE;
5805 bfd *sub;
5806 asection * (*gc_mark_hook)
5807 (asection *, struct bfd_link_info *, Elf_Internal_Rela *,
5808 struct elf_link_hash_entry *h, Elf_Internal_Sym *);
5809
5810 if (!get_elf_backend_data (abfd)->can_gc_sections
5811 || info->relocatable || info->emitrelocations
5812 || elf_hash_table (info)->dynamic_sections_created)
5813 return TRUE;
5814
5815 /* Apply transitive closure to the vtable entry usage info. */
5816 elf_link_hash_traverse (elf_hash_table (info),
5817 elf_gc_propagate_vtable_entries_used,
5818 &ok);
5819 if (!ok)
5820 return FALSE;
5821
5822 /* Kill the vtable relocations that were not used. */
5823 elf_link_hash_traverse (elf_hash_table (info),
5824 elf_gc_smash_unused_vtentry_relocs,
5825 &ok);
5826 if (!ok)
5827 return FALSE;
5828
5829 /* Grovel through relocs to find out who stays ... */
5830
5831 gc_mark_hook = get_elf_backend_data (abfd)->gc_mark_hook;
5832 for (sub = info->input_bfds; sub != NULL; sub = sub->link_next)
5833 {
5834 asection *o;
5835
5836 if (bfd_get_flavour (sub) != bfd_target_elf_flavour)
5837 continue;
5838
5839 for (o = sub->sections; o != NULL; o = o->next)
5840 {
5841 if (o->flags & SEC_KEEP)
5842 if (!elf_gc_mark (info, o, gc_mark_hook))
5843 return FALSE;
5844 }
5845 }
5846
5847 /* ... and mark SEC_EXCLUDE for those that go. */
5848 if (!elf_gc_sweep (info, get_elf_backend_data (abfd)->gc_sweep_hook))
5849 return FALSE;
5850
5851 return TRUE;
5852 }
5853 \f
5854 /* Called from check_relocs to record the existance of a VTINHERIT reloc. */
5855
5856 bfd_boolean
5857 elf_gc_record_vtinherit (bfd *abfd,
5858 asection *sec,
5859 struct elf_link_hash_entry *h,
5860 bfd_vma offset)
5861 {
5862 struct elf_link_hash_entry **sym_hashes, **sym_hashes_end;
5863 struct elf_link_hash_entry **search, *child;
5864 bfd_size_type extsymcount;
5865
5866 /* The sh_info field of the symtab header tells us where the
5867 external symbols start. We don't care about the local symbols at
5868 this point. */
5869 extsymcount = elf_tdata (abfd)->symtab_hdr.sh_size/sizeof (Elf_External_Sym);
5870 if (!elf_bad_symtab (abfd))
5871 extsymcount -= elf_tdata (abfd)->symtab_hdr.sh_info;
5872
5873 sym_hashes = elf_sym_hashes (abfd);
5874 sym_hashes_end = sym_hashes + extsymcount;
5875
5876 /* Hunt down the child symbol, which is in this section at the same
5877 offset as the relocation. */
5878 for (search = sym_hashes; search != sym_hashes_end; ++search)
5879 {
5880 if ((child = *search) != NULL
5881 && (child->root.type == bfd_link_hash_defined
5882 || child->root.type == bfd_link_hash_defweak)
5883 && child->root.u.def.section == sec
5884 && child->root.u.def.value == offset)
5885 goto win;
5886 }
5887
5888 (*_bfd_error_handler) ("%s: %s+%lu: No symbol found for INHERIT",
5889 bfd_archive_filename (abfd), sec->name,
5890 (unsigned long) offset);
5891 bfd_set_error (bfd_error_invalid_operation);
5892 return FALSE;
5893
5894 win:
5895 if (!h)
5896 {
5897 /* This *should* only be the absolute section. It could potentially
5898 be that someone has defined a non-global vtable though, which
5899 would be bad. It isn't worth paging in the local symbols to be
5900 sure though; that case should simply be handled by the assembler. */
5901
5902 child->vtable_parent = (struct elf_link_hash_entry *) -1;
5903 }
5904 else
5905 child->vtable_parent = h;
5906
5907 return TRUE;
5908 }
5909
5910 /* Called from check_relocs to record the existance of a VTENTRY reloc. */
5911
5912 bfd_boolean
5913 elf_gc_record_vtentry (bfd *abfd ATTRIBUTE_UNUSED,
5914 asection *sec ATTRIBUTE_UNUSED,
5915 struct elf_link_hash_entry *h,
5916 bfd_vma addend)
5917 {
5918 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
5919 unsigned int log_file_align = bed->s->log_file_align;
5920
5921 if (addend >= h->vtable_entries_size)
5922 {
5923 size_t size, bytes, file_align;
5924 bfd_boolean *ptr = h->vtable_entries_used;
5925
5926 /* While the symbol is undefined, we have to be prepared to handle
5927 a zero size. */
5928 file_align = 1 << log_file_align;
5929 if (h->root.type == bfd_link_hash_undefined)
5930 size = addend + file_align;
5931 else
5932 {
5933 size = h->size;
5934 if (addend >= size)
5935 {
5936 /* Oops! We've got a reference past the defined end of
5937 the table. This is probably a bug -- shall we warn? */
5938 size = addend + file_align;
5939 }
5940 }
5941 size = (size + file_align - 1) & -file_align;
5942
5943 /* Allocate one extra entry for use as a "done" flag for the
5944 consolidation pass. */
5945 bytes = ((size >> log_file_align) + 1) * sizeof (bfd_boolean);
5946
5947 if (ptr)
5948 {
5949 ptr = bfd_realloc (ptr - 1, bytes);
5950
5951 if (ptr != NULL)
5952 {
5953 size_t oldbytes;
5954
5955 oldbytes = (((h->vtable_entries_size >> log_file_align) + 1)
5956 * sizeof (bfd_boolean));
5957 memset (((char *) ptr) + oldbytes, 0, bytes - oldbytes);
5958 }
5959 }
5960 else
5961 ptr = bfd_zmalloc (bytes);
5962
5963 if (ptr == NULL)
5964 return FALSE;
5965
5966 /* And arrange for that done flag to be at index -1. */
5967 h->vtable_entries_used = ptr + 1;
5968 h->vtable_entries_size = size;
5969 }
5970
5971 h->vtable_entries_used[addend >> log_file_align] = TRUE;
5972
5973 return TRUE;
5974 }
5975
5976 /* And an accompanying bit to work out final got entry offsets once
5977 we're done. Should be called from final_link. */
5978
5979 bfd_boolean
5980 elf_gc_common_finalize_got_offsets (bfd *abfd,
5981 struct bfd_link_info *info)
5982 {
5983 bfd *i;
5984 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
5985 bfd_vma gotoff;
5986
5987 /* The GOT offset is relative to the .got section, but the GOT header is
5988 put into the .got.plt section, if the backend uses it. */
5989 if (bed->want_got_plt)
5990 gotoff = 0;
5991 else
5992 gotoff = bed->got_header_size;
5993
5994 /* Do the local .got entries first. */
5995 for (i = info->input_bfds; i; i = i->link_next)
5996 {
5997 bfd_signed_vma *local_got;
5998 bfd_size_type j, locsymcount;
5999 Elf_Internal_Shdr *symtab_hdr;
6000
6001 if (bfd_get_flavour (i) != bfd_target_elf_flavour)
6002 continue;
6003
6004 local_got = elf_local_got_refcounts (i);
6005 if (!local_got)
6006 continue;
6007
6008 symtab_hdr = &elf_tdata (i)->symtab_hdr;
6009 if (elf_bad_symtab (i))
6010 locsymcount = symtab_hdr->sh_size / sizeof (Elf_External_Sym);
6011 else
6012 locsymcount = symtab_hdr->sh_info;
6013
6014 for (j = 0; j < locsymcount; ++j)
6015 {
6016 if (local_got[j] > 0)
6017 {
6018 local_got[j] = gotoff;
6019 gotoff += ARCH_SIZE / 8;
6020 }
6021 else
6022 local_got[j] = (bfd_vma) -1;
6023 }
6024 }
6025
6026 /* Then the global .got entries. .plt refcounts are handled by
6027 adjust_dynamic_symbol */
6028 elf_link_hash_traverse (elf_hash_table (info),
6029 elf_gc_allocate_got_offsets,
6030 &gotoff);
6031 return TRUE;
6032 }
6033
6034 /* We need a special top-level link routine to convert got reference counts
6035 to real got offsets. */
6036
6037 static bfd_boolean
6038 elf_gc_allocate_got_offsets (struct elf_link_hash_entry *h, void *offarg)
6039 {
6040 bfd_vma *off = offarg;
6041
6042 if (h->root.type == bfd_link_hash_warning)
6043 h = (struct elf_link_hash_entry *) h->root.u.i.link;
6044
6045 if (h->got.refcount > 0)
6046 {
6047 h->got.offset = off[0];
6048 off[0] += ARCH_SIZE / 8;
6049 }
6050 else
6051 h->got.offset = (bfd_vma) -1;
6052
6053 return TRUE;
6054 }
6055
6056 /* Many folk need no more in the way of final link than this, once
6057 got entry reference counting is enabled. */
6058
6059 bfd_boolean
6060 elf_gc_common_final_link (bfd *abfd, struct bfd_link_info *info)
6061 {
6062 if (!elf_gc_common_finalize_got_offsets (abfd, info))
6063 return FALSE;
6064
6065 /* Invoke the regular ELF backend linker to do all the work. */
6066 return elf_bfd_final_link (abfd, info);
6067 }
6068
6069 /* This function will be called though elf_link_hash_traverse to store
6070 all hash value of the exported symbols in an array. */
6071
6072 static bfd_boolean
6073 elf_collect_hash_codes (struct elf_link_hash_entry *h, void *data)
6074 {
6075 unsigned long **valuep = data;
6076 const char *name;
6077 char *p;
6078 unsigned long ha;
6079 char *alc = NULL;
6080
6081 if (h->root.type == bfd_link_hash_warning)
6082 h = (struct elf_link_hash_entry *) h->root.u.i.link;
6083
6084 /* Ignore indirect symbols. These are added by the versioning code. */
6085 if (h->dynindx == -1)
6086 return TRUE;
6087
6088 name = h->root.root.string;
6089 p = strchr (name, ELF_VER_CHR);
6090 if (p != NULL)
6091 {
6092 alc = bfd_malloc (p - name + 1);
6093 memcpy (alc, name, p - name);
6094 alc[p - name] = '\0';
6095 name = alc;
6096 }
6097
6098 /* Compute the hash value. */
6099 ha = bfd_elf_hash (name);
6100
6101 /* Store the found hash value in the array given as the argument. */
6102 *(*valuep)++ = ha;
6103
6104 /* And store it in the struct so that we can put it in the hash table
6105 later. */
6106 h->elf_hash_value = ha;
6107
6108 if (alc != NULL)
6109 free (alc);
6110
6111 return TRUE;
6112 }
6113
6114 bfd_boolean
6115 elf_reloc_symbol_deleted_p (bfd_vma offset, void *cookie)
6116 {
6117 struct elf_reloc_cookie *rcookie = cookie;
6118
6119 if (rcookie->bad_symtab)
6120 rcookie->rel = rcookie->rels;
6121
6122 for (; rcookie->rel < rcookie->relend; rcookie->rel++)
6123 {
6124 unsigned long r_symndx;
6125
6126 if (! rcookie->bad_symtab)
6127 if (rcookie->rel->r_offset > offset)
6128 return FALSE;
6129 if (rcookie->rel->r_offset != offset)
6130 continue;
6131
6132 r_symndx = ELF_R_SYM (rcookie->rel->r_info);
6133 if (r_symndx == SHN_UNDEF)
6134 return TRUE;
6135
6136 if (r_symndx >= rcookie->locsymcount
6137 || ELF_ST_BIND (rcookie->locsyms[r_symndx].st_info) != STB_LOCAL)
6138 {
6139 struct elf_link_hash_entry *h;
6140
6141 h = rcookie->sym_hashes[r_symndx - rcookie->extsymoff];
6142
6143 while (h->root.type == bfd_link_hash_indirect
6144 || h->root.type == bfd_link_hash_warning)
6145 h = (struct elf_link_hash_entry *) h->root.u.i.link;
6146
6147 if ((h->root.type == bfd_link_hash_defined
6148 || h->root.type == bfd_link_hash_defweak)
6149 && elf_discarded_section (h->root.u.def.section))
6150 return TRUE;
6151 else
6152 return FALSE;
6153 }
6154 else
6155 {
6156 /* It's not a relocation against a global symbol,
6157 but it could be a relocation against a local
6158 symbol for a discarded section. */
6159 asection *isec;
6160 Elf_Internal_Sym *isym;
6161
6162 /* Need to: get the symbol; get the section. */
6163 isym = &rcookie->locsyms[r_symndx];
6164 if (isym->st_shndx < SHN_LORESERVE || isym->st_shndx > SHN_HIRESERVE)
6165 {
6166 isec = section_from_elf_index (rcookie->abfd, isym->st_shndx);
6167 if (isec != NULL && elf_discarded_section (isec))
6168 return TRUE;
6169 }
6170 }
6171 return FALSE;
6172 }
6173 return FALSE;
6174 }
6175
6176 /* Discard unneeded references to discarded sections.
6177 Returns TRUE if any section's size was changed. */
6178 /* This function assumes that the relocations are in sorted order,
6179 which is true for all known assemblers. */
6180
6181 bfd_boolean
6182 elf_bfd_discard_info (bfd *output_bfd, struct bfd_link_info *info)
6183 {
6184 struct elf_reloc_cookie cookie;
6185 asection *stab, *eh;
6186 Elf_Internal_Shdr *symtab_hdr;
6187 const struct elf_backend_data *bed;
6188 bfd *abfd;
6189 unsigned int count;
6190 bfd_boolean ret = FALSE;
6191
6192 if (info->traditional_format
6193 || info->hash->creator->flavour != bfd_target_elf_flavour
6194 || ! is_elf_hash_table (info))
6195 return FALSE;
6196
6197 for (abfd = info->input_bfds; abfd != NULL; abfd = abfd->link_next)
6198 {
6199 if (bfd_get_flavour (abfd) != bfd_target_elf_flavour)
6200 continue;
6201
6202 bed = get_elf_backend_data (abfd);
6203
6204 if ((abfd->flags & DYNAMIC) != 0)
6205 continue;
6206
6207 eh = bfd_get_section_by_name (abfd, ".eh_frame");
6208 if (info->relocatable
6209 || (eh != NULL
6210 && (eh->_raw_size == 0
6211 || bfd_is_abs_section (eh->output_section))))
6212 eh = NULL;
6213
6214 stab = bfd_get_section_by_name (abfd, ".stab");
6215 if (stab != NULL
6216 && (stab->_raw_size == 0
6217 || bfd_is_abs_section (stab->output_section)
6218 || stab->sec_info_type != ELF_INFO_TYPE_STABS))
6219 stab = NULL;
6220
6221 if (stab == NULL
6222 && eh == NULL
6223 && bed->elf_backend_discard_info == NULL)
6224 continue;
6225
6226 symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
6227 cookie.abfd = abfd;
6228 cookie.sym_hashes = elf_sym_hashes (abfd);
6229 cookie.bad_symtab = elf_bad_symtab (abfd);
6230 if (cookie.bad_symtab)
6231 {
6232 cookie.locsymcount = symtab_hdr->sh_size / sizeof (Elf_External_Sym);
6233 cookie.extsymoff = 0;
6234 }
6235 else
6236 {
6237 cookie.locsymcount = symtab_hdr->sh_info;
6238 cookie.extsymoff = symtab_hdr->sh_info;
6239 }
6240
6241 cookie.locsyms = (Elf_Internal_Sym *) symtab_hdr->contents;
6242 if (cookie.locsyms == NULL && cookie.locsymcount != 0)
6243 {
6244 cookie.locsyms = bfd_elf_get_elf_syms (abfd, symtab_hdr,
6245 cookie.locsymcount, 0,
6246 NULL, NULL, NULL);
6247 if (cookie.locsyms == NULL)
6248 return FALSE;
6249 }
6250
6251 if (stab != NULL)
6252 {
6253 cookie.rels = NULL;
6254 count = stab->reloc_count;
6255 if (count != 0)
6256 cookie.rels = _bfd_elf_link_read_relocs (abfd, stab, NULL, NULL,
6257 info->keep_memory);
6258 if (cookie.rels != NULL)
6259 {
6260 cookie.rel = cookie.rels;
6261 cookie.relend = cookie.rels;
6262 cookie.relend += count * bed->s->int_rels_per_ext_rel;
6263 if (_bfd_discard_section_stabs (abfd, stab,
6264 elf_section_data (stab)->sec_info,
6265 elf_reloc_symbol_deleted_p,
6266 &cookie))
6267 ret = TRUE;
6268 if (elf_section_data (stab)->relocs != cookie.rels)
6269 free (cookie.rels);
6270 }
6271 }
6272
6273 if (eh != NULL)
6274 {
6275 cookie.rels = NULL;
6276 count = eh->reloc_count;
6277 if (count != 0)
6278 cookie.rels = _bfd_elf_link_read_relocs (abfd, eh, NULL, NULL,
6279 info->keep_memory);
6280 cookie.rel = cookie.rels;
6281 cookie.relend = cookie.rels;
6282 if (cookie.rels != NULL)
6283 cookie.relend += count * bed->s->int_rels_per_ext_rel;
6284
6285 if (_bfd_elf_discard_section_eh_frame (abfd, info, eh,
6286 elf_reloc_symbol_deleted_p,
6287 &cookie))
6288 ret = TRUE;
6289
6290 if (cookie.rels != NULL
6291 && elf_section_data (eh)->relocs != cookie.rels)
6292 free (cookie.rels);
6293 }
6294
6295 if (bed->elf_backend_discard_info != NULL
6296 && (*bed->elf_backend_discard_info) (abfd, &cookie, info))
6297 ret = TRUE;
6298
6299 if (cookie.locsyms != NULL
6300 && symtab_hdr->contents != (unsigned char *) cookie.locsyms)
6301 {
6302 if (! info->keep_memory)
6303 free (cookie.locsyms);
6304 else
6305 symtab_hdr->contents = (unsigned char *) cookie.locsyms;
6306 }
6307 }
6308
6309 if (info->eh_frame_hdr
6310 && !info->relocatable
6311 && _bfd_elf_discard_section_eh_frame_hdr (output_bfd, info))
6312 ret = TRUE;
6313
6314 return ret;
6315 }
6316
6317 static bfd_boolean
6318 elf_section_ignore_discarded_relocs (asection *sec)
6319 {
6320 const struct elf_backend_data *bed;
6321
6322 switch (sec->sec_info_type)
6323 {
6324 case ELF_INFO_TYPE_STABS:
6325 case ELF_INFO_TYPE_EH_FRAME:
6326 return TRUE;
6327 default:
6328 break;
6329 }
6330
6331 bed = get_elf_backend_data (sec->owner);
6332 if (bed->elf_backend_ignore_discarded_relocs != NULL
6333 && (*bed->elf_backend_ignore_discarded_relocs) (sec))
6334 return TRUE;
6335
6336 return FALSE;
6337 }
This page took 0.219921 seconds and 4 git commands to generate.