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 /* This struct is used to pass information to routines called via
24 elf_link_hash_traverse which must return failure. */
25
26 struct elf_info_failed
27 {
28 bfd_boolean failed;
29 struct bfd_link_info *info;
30 struct bfd_elf_version_tree *verdefs;
31 };
32
33 static bfd_boolean is_global_data_symbol_definition
34 PARAMS ((bfd *, Elf_Internal_Sym *));
35 static bfd_boolean elf_link_is_defined_archive_symbol
36 PARAMS ((bfd *, carsym *));
37 static bfd_boolean elf_link_add_object_symbols
38 PARAMS ((bfd *, struct bfd_link_info *));
39 static bfd_boolean elf_link_add_archive_symbols
40 PARAMS ((bfd *, struct bfd_link_info *));
41 static bfd_boolean elf_merge_symbol
42 PARAMS ((bfd *, struct bfd_link_info *, const char *,
43 Elf_Internal_Sym *, asection **, bfd_vma *,
44 struct elf_link_hash_entry **, bfd_boolean *, bfd_boolean *,
45 bfd_boolean *, bfd_boolean *, bfd_boolean));
46 static bfd_boolean elf_add_default_symbol
47 PARAMS ((bfd *, struct bfd_link_info *, struct elf_link_hash_entry *,
48 const char *, Elf_Internal_Sym *, asection **, bfd_vma *,
49 bfd_boolean *, bfd_boolean, bfd_boolean));
50 static bfd_boolean elf_export_symbol
51 PARAMS ((struct elf_link_hash_entry *, PTR));
52 static bfd_boolean elf_finalize_dynstr
53 PARAMS ((bfd *, struct bfd_link_info *));
54 static bfd_boolean elf_fix_symbol_flags
55 PARAMS ((struct elf_link_hash_entry *, struct elf_info_failed *));
56 static bfd_boolean elf_adjust_dynamic_symbol
57 PARAMS ((struct elf_link_hash_entry *, PTR));
58 static bfd_boolean elf_link_find_version_dependencies
59 PARAMS ((struct elf_link_hash_entry *, PTR));
60 static bfd_boolean elf_link_assign_sym_version
61 PARAMS ((struct elf_link_hash_entry *, PTR));
62 static bfd_boolean elf_collect_hash_codes
63 PARAMS ((struct elf_link_hash_entry *, PTR));
64 static bfd_boolean elf_link_read_relocs_from_section
65 PARAMS ((bfd *, Elf_Internal_Shdr *, PTR, Elf_Internal_Rela *));
66 static size_t compute_bucket_count
67 PARAMS ((struct bfd_link_info *));
68 static bfd_boolean elf_link_output_relocs
69 PARAMS ((bfd *, asection *, Elf_Internal_Shdr *, Elf_Internal_Rela *));
70 static bfd_boolean elf_link_size_reloc_section
71 PARAMS ((bfd *, Elf_Internal_Shdr *, asection *));
72 static void elf_link_adjust_relocs
73 PARAMS ((bfd *, Elf_Internal_Shdr *, unsigned int,
74 struct elf_link_hash_entry **));
75 static int elf_link_sort_cmp1
76 PARAMS ((const void *, const void *));
77 static int elf_link_sort_cmp2
78 PARAMS ((const void *, const void *));
79 static size_t elf_link_sort_relocs
80 PARAMS ((bfd *, struct bfd_link_info *, asection **));
81 static bfd_boolean elf_section_ignore_discarded_relocs
82 PARAMS ((asection *));
83
84 /* Given an ELF BFD, add symbols to the global hash table as
85 appropriate. */
86
87 bfd_boolean
elf_bfd_link_add_symbols(abfd,info)88 elf_bfd_link_add_symbols (abfd, info)
89 bfd *abfd;
90 struct bfd_link_info *info;
91 {
92 switch (bfd_get_format (abfd))
93 {
94 case bfd_object:
95 return elf_link_add_object_symbols (abfd, info);
96 case bfd_archive:
97 return elf_link_add_archive_symbols (abfd, info);
98 default:
99 bfd_set_error (bfd_error_wrong_format);
100 return FALSE;
101 }
102 }
103
104 /* Return TRUE iff this is a non-common, definition of a non-function symbol. */
105 static bfd_boolean
is_global_data_symbol_definition(abfd,sym)106 is_global_data_symbol_definition (abfd, sym)
107 bfd * abfd ATTRIBUTE_UNUSED;
108 Elf_Internal_Sym * sym;
109 {
110 /* Local symbols do not count, but target specific ones might. */
111 if (ELF_ST_BIND (sym->st_info) != STB_GLOBAL
112 && ELF_ST_BIND (sym->st_info) < STB_LOOS)
113 return FALSE;
114
115 /* Function symbols do not count. */
116 if (ELF_ST_TYPE (sym->st_info) == STT_FUNC)
117 return FALSE;
118
119 /* If the section is undefined, then so is the symbol. */
120 if (sym->st_shndx == SHN_UNDEF)
121 return FALSE;
122
123 /* If the symbol is defined in the common section, then
124 it is a common definition and so does not count. */
125 if (sym->st_shndx == SHN_COMMON)
126 return FALSE;
127
128 /* If the symbol is in a target specific section then we
129 must rely upon the backend to tell us what it is. */
130 if (sym->st_shndx >= SHN_LORESERVE && sym->st_shndx < SHN_ABS)
131 /* FIXME - this function is not coded yet:
132
133 return _bfd_is_global_symbol_definition (abfd, sym);
134
135 Instead for now assume that the definition is not global,
136 Even if this is wrong, at least the linker will behave
137 in the same way that it used to do. */
138 return FALSE;
139
140 return TRUE;
141 }
142
143 /* Search the symbol table of the archive element of the archive ABFD
144 whose archive map contains a mention of SYMDEF, and determine if
145 the symbol is defined in this element. */
146 static bfd_boolean
elf_link_is_defined_archive_symbol(abfd,symdef)147 elf_link_is_defined_archive_symbol (abfd, symdef)
148 bfd * abfd;
149 carsym * symdef;
150 {
151 Elf_Internal_Shdr * hdr;
152 bfd_size_type symcount;
153 bfd_size_type extsymcount;
154 bfd_size_type extsymoff;
155 Elf_Internal_Sym *isymbuf;
156 Elf_Internal_Sym *isym;
157 Elf_Internal_Sym *isymend;
158 bfd_boolean result;
159
160 abfd = _bfd_get_elt_at_filepos (abfd, symdef->file_offset);
161 if (abfd == (bfd *) NULL)
162 return FALSE;
163
164 if (! bfd_check_format (abfd, bfd_object))
165 return FALSE;
166
167 /* If we have already included the element containing this symbol in the
168 link then we do not need to include it again. Just claim that any symbol
169 it contains is not a definition, so that our caller will not decide to
170 (re)include this element. */
171 if (abfd->archive_pass)
172 return FALSE;
173
174 /* Select the appropriate symbol table. */
175 if ((abfd->flags & DYNAMIC) == 0 || elf_dynsymtab (abfd) == 0)
176 hdr = &elf_tdata (abfd)->symtab_hdr;
177 else
178 hdr = &elf_tdata (abfd)->dynsymtab_hdr;
179
180 symcount = hdr->sh_size / sizeof (Elf_External_Sym);
181
182 /* The sh_info field of the symtab header tells us where the
183 external symbols start. We don't care about the local symbols. */
184 if (elf_bad_symtab (abfd))
185 {
186 extsymcount = symcount;
187 extsymoff = 0;
188 }
189 else
190 {
191 extsymcount = symcount - hdr->sh_info;
192 extsymoff = hdr->sh_info;
193 }
194
195 if (extsymcount == 0)
196 return FALSE;
197
198 /* Read in the symbol table. */
199 isymbuf = bfd_elf_get_elf_syms (abfd, hdr, extsymcount, extsymoff,
200 NULL, NULL, NULL);
201 if (isymbuf == NULL)
202 return FALSE;
203
204 /* Scan the symbol table looking for SYMDEF. */
205 result = FALSE;
206 for (isym = isymbuf, isymend = isymbuf + extsymcount; isym < isymend; isym++)
207 {
208 const char *name;
209
210 name = bfd_elf_string_from_elf_section (abfd, hdr->sh_link,
211 isym->st_name);
212 if (name == (const char *) NULL)
213 break;
214
215 if (strcmp (name, symdef->name) == 0)
216 {
217 result = is_global_data_symbol_definition (abfd, isym);
218 break;
219 }
220 }
221
222 free (isymbuf);
223
224 return result;
225 }
226
227 /* Add symbols from an ELF archive file to the linker hash table. We
228 don't use _bfd_generic_link_add_archive_symbols because of a
229 problem which arises on UnixWare. The UnixWare libc.so is an
230 archive which includes an entry libc.so.1 which defines a bunch of
231 symbols. The libc.so archive also includes a number of other
232 object files, which also define symbols, some of which are the same
233 as those defined in libc.so.1. Correct linking requires that we
234 consider each object file in turn, and include it if it defines any
235 symbols we need. _bfd_generic_link_add_archive_symbols does not do
236 this; it looks through the list of undefined symbols, and includes
237 any object file which defines them. When this algorithm is used on
238 UnixWare, it winds up pulling in libc.so.1 early and defining a
239 bunch of symbols. This means that some of the other objects in the
240 archive are not included in the link, which is incorrect since they
241 precede libc.so.1 in the archive.
242
243 Fortunately, ELF archive handling is simpler than that done by
244 _bfd_generic_link_add_archive_symbols, which has to allow for a.out
245 oddities. In ELF, if we find a symbol in the archive map, and the
246 symbol is currently undefined, we know that we must pull in that
247 object file.
248
249 Unfortunately, we do have to make multiple passes over the symbol
250 table until nothing further is resolved. */
251
252 static bfd_boolean
elf_link_add_archive_symbols(abfd,info)253 elf_link_add_archive_symbols (abfd, info)
254 bfd *abfd;
255 struct bfd_link_info *info;
256 {
257 symindex c;
258 bfd_boolean *defined = NULL;
259 bfd_boolean *included = NULL;
260 carsym *symdefs;
261 bfd_boolean loop;
262 bfd_size_type amt;
263
264 if (! bfd_has_map (abfd))
265 {
266 /* An empty archive is a special case. */
267 if (bfd_openr_next_archived_file (abfd, (bfd *) NULL) == NULL)
268 return TRUE;
269 bfd_set_error (bfd_error_no_armap);
270 return FALSE;
271 }
272
273 /* Keep track of all symbols we know to be already defined, and all
274 files we know to be already included. This is to speed up the
275 second and subsequent passes. */
276 c = bfd_ardata (abfd)->symdef_count;
277 if (c == 0)
278 return TRUE;
279 amt = c;
280 amt *= sizeof (bfd_boolean);
281 defined = (bfd_boolean *) bfd_zmalloc (amt);
282 included = (bfd_boolean *) bfd_zmalloc (amt);
283 if (defined == (bfd_boolean *) NULL || included == (bfd_boolean *) NULL)
284 goto error_return;
285
286 symdefs = bfd_ardata (abfd)->symdefs;
287
288 do
289 {
290 file_ptr last;
291 symindex i;
292 carsym *symdef;
293 carsym *symdefend;
294
295 loop = FALSE;
296 last = -1;
297
298 symdef = symdefs;
299 symdefend = symdef + c;
300 for (i = 0; symdef < symdefend; symdef++, i++)
301 {
302 struct elf_link_hash_entry *h;
303 bfd *element;
304 struct bfd_link_hash_entry *undefs_tail;
305 symindex mark;
306
307 if (defined[i] || included[i])
308 continue;
309 if (symdef->file_offset == last)
310 {
311 included[i] = TRUE;
312 continue;
313 }
314
315 h = elf_link_hash_lookup (elf_hash_table (info), symdef->name,
316 FALSE, FALSE, FALSE);
317
318 if (h == NULL)
319 {
320 char *p, *copy;
321 size_t len, first;
322
323 /* If this is a default version (the name contains @@),
324 look up the symbol again with only one `@' as well
325 as without the version. The effect is that references
326 to the symbol with and without the version will be
327 matched by the default symbol in the archive. */
328
329 p = strchr (symdef->name, ELF_VER_CHR);
330 if (p == NULL || p[1] != ELF_VER_CHR)
331 continue;
332
333 /* First check with only one `@'. */
334 len = strlen (symdef->name);
335 copy = bfd_alloc (abfd, (bfd_size_type) len);
336 if (copy == NULL)
337 goto error_return;
338 first = p - symdef->name + 1;
339 memcpy (copy, symdef->name, first);
340 memcpy (copy + first, symdef->name + first + 1, len - first);
341
342 h = elf_link_hash_lookup (elf_hash_table (info), copy,
343 FALSE, FALSE, FALSE);
344
345 if (h == NULL)
346 {
347 /* We also need to check references to the symbol
348 without the version. */
349
350 copy[first - 1] = '\0';
351 h = elf_link_hash_lookup (elf_hash_table (info),
352 copy, FALSE, FALSE, FALSE);
353 }
354
355 bfd_release (abfd, copy);
356 }
357
358 if (h == NULL)
359 continue;
360
361 if (h->root.type == bfd_link_hash_common)
362 {
363 /* We currently have a common symbol. The archive map contains
364 a reference to this symbol, so we may want to include it. We
365 only want to include it however, if this archive element
366 contains a definition of the symbol, not just another common
367 declaration of it.
368
369 Unfortunately some archivers (including GNU ar) will put
370 declarations of common symbols into their archive maps, as
371 well as real definitions, so we cannot just go by the archive
372 map alone. Instead we must read in the element's symbol
373 table and check that to see what kind of symbol definition
374 this is. */
375 if (! elf_link_is_defined_archive_symbol (abfd, symdef))
376 continue;
377 }
378 else if (h->root.type != bfd_link_hash_undefined)
379 {
380 if (h->root.type != bfd_link_hash_undefweak)
381 defined[i] = TRUE;
382 continue;
383 }
384
385 /* We need to include this archive member. */
386 element = _bfd_get_elt_at_filepos (abfd, symdef->file_offset);
387 if (element == (bfd *) NULL)
388 goto error_return;
389
390 if (! bfd_check_format (element, bfd_object))
391 goto error_return;
392
393 /* Doublecheck that we have not included this object
394 already--it should be impossible, but there may be
395 something wrong with the archive. */
396 if (element->archive_pass != 0)
397 {
398 bfd_set_error (bfd_error_bad_value);
399 goto error_return;
400 }
401 element->archive_pass = 1;
402
403 undefs_tail = info->hash->undefs_tail;
404
405 if (! (*info->callbacks->add_archive_element) (info, element,
406 symdef->name))
407 goto error_return;
408 if (! elf_link_add_object_symbols (element, info))
409 goto error_return;
410
411 /* If there are any new undefined symbols, we need to make
412 another pass through the archive in order to see whether
413 they can be defined. FIXME: This isn't perfect, because
414 common symbols wind up on undefs_tail and because an
415 undefined symbol which is defined later on in this pass
416 does not require another pass. This isn't a bug, but it
417 does make the code less efficient than it could be. */
418 if (undefs_tail != info->hash->undefs_tail)
419 loop = TRUE;
420
421 /* Look backward to mark all symbols from this object file
422 which we have already seen in this pass. */
423 mark = i;
424 do
425 {
426 included[mark] = TRUE;
427 if (mark == 0)
428 break;
429 --mark;
430 }
431 while (symdefs[mark].file_offset == symdef->file_offset);
432
433 /* We mark subsequent symbols from this object file as we go
434 on through the loop. */
435 last = symdef->file_offset;
436 }
437 }
438 while (loop);
439
440 free (defined);
441 free (included);
442
443 return TRUE;
444
445 error_return:
446 if (defined != (bfd_boolean *) NULL)
447 free (defined);
448 if (included != (bfd_boolean *) NULL)
449 free (included);
450 return FALSE;
451 }
452
453 /* This function is called when we want to define a new symbol. It
454 handles the various cases which arise when we find a definition in
455 a dynamic object, or when there is already a definition in a
456 dynamic object. The new symbol is described by NAME, SYM, PSEC,
457 and PVALUE. We set SYM_HASH to the hash table entry. We set
458 OVERRIDE if the old symbol is overriding a new definition. We set
459 TYPE_CHANGE_OK if it is OK for the type to change. We set
460 SIZE_CHANGE_OK if it is OK for the size to change. By OK to
461 change, we mean that we shouldn't warn if the type or size does
462 change. DT_NEEDED indicates if it comes from a DT_NEEDED entry of
463 a shared object. */
464
465 static bfd_boolean
elf_merge_symbol(abfd,info,name,sym,psec,pvalue,sym_hash,skip,override,type_change_ok,size_change_ok,dt_needed)466 elf_merge_symbol (abfd, info, name, sym, psec, pvalue, sym_hash, skip,
467 override, type_change_ok, size_change_ok, dt_needed)
468 bfd *abfd;
469 struct bfd_link_info *info;
470 const char *name;
471 Elf_Internal_Sym *sym;
472 asection **psec;
473 bfd_vma *pvalue;
474 struct elf_link_hash_entry **sym_hash;
475 bfd_boolean *skip;
476 bfd_boolean *override;
477 bfd_boolean *type_change_ok;
478 bfd_boolean *size_change_ok;
479 bfd_boolean dt_needed;
480 {
481 asection *sec;
482 struct elf_link_hash_entry *h;
483 struct elf_link_hash_entry *flip;
484 int bind;
485 bfd *oldbfd;
486 bfd_boolean newdyn, olddyn, olddef, newdef, newdyncommon, olddyncommon;
487 bfd_boolean newweakdef, oldweakdef, newweakundef, oldweakundef;
488
489 *skip = FALSE;
490 *override = FALSE;
491
492 sec = *psec;
493 bind = ELF_ST_BIND (sym->st_info);
494
495 if (! bfd_is_und_section (sec))
496 h = elf_link_hash_lookup (elf_hash_table (info), name, TRUE, FALSE, FALSE);
497 else
498 h = ((struct elf_link_hash_entry *)
499 bfd_wrapped_link_hash_lookup (abfd, info, name, TRUE, FALSE, FALSE));
500 if (h == NULL)
501 return FALSE;
502 *sym_hash = h;
503
504 /* This code is for coping with dynamic objects, and is only useful
505 if we are doing an ELF link. */
506 if (info->hash->creator != abfd->xvec)
507 return TRUE;
508
509 /* For merging, we only care about real symbols. */
510
511 while (h->root.type == bfd_link_hash_indirect
512 || h->root.type == bfd_link_hash_warning)
513 h = (struct elf_link_hash_entry *) h->root.u.i.link;
514
515 /* If we just created the symbol, mark it as being an ELF symbol.
516 Other than that, there is nothing to do--there is no merge issue
517 with a newly defined symbol--so we just return. */
518
519 if (h->root.type == bfd_link_hash_new)
520 {
521 h->elf_link_hash_flags &=~ ELF_LINK_NON_ELF;
522 return TRUE;
523 }
524
525 /* OLDBFD is a BFD associated with the existing symbol. */
526
527 switch (h->root.type)
528 {
529 default:
530 oldbfd = NULL;
531 break;
532
533 case bfd_link_hash_undefined:
534 case bfd_link_hash_undefweak:
535 oldbfd = h->root.u.undef.abfd;
536 break;
537
538 case bfd_link_hash_defined:
539 case bfd_link_hash_defweak:
540 oldbfd = h->root.u.def.section->owner;
541 break;
542
543 case bfd_link_hash_common:
544 oldbfd = h->root.u.c.p->section->owner;
545 break;
546 }
547
548 /* In cases involving weak versioned symbols, we may wind up trying
549 to merge a symbol with itself. Catch that here, to avoid the
550 confusion that results if we try to override a symbol with
551 itself. The additional tests catch cases like
552 _GLOBAL_OFFSET_TABLE_, which are regular symbols defined in a
553 dynamic object, which we do want to handle here. */
554 if (abfd == oldbfd
555 && ((abfd->flags & DYNAMIC) == 0
556 || (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0))
557 return TRUE;
558
559 /* NEWDYN and OLDDYN indicate whether the new or old symbol,
560 respectively, is from a dynamic object. */
561
562 if ((abfd->flags & DYNAMIC) != 0)
563 newdyn = TRUE;
564 else
565 newdyn = FALSE;
566
567 if (oldbfd != NULL)
568 olddyn = (oldbfd->flags & DYNAMIC) != 0;
569 else
570 {
571 asection *hsec;
572
573 /* This code handles the special SHN_MIPS_{TEXT,DATA} section
574 indices used by MIPS ELF. */
575 switch (h->root.type)
576 {
577 default:
578 hsec = NULL;
579 break;
580
581 case bfd_link_hash_defined:
582 case bfd_link_hash_defweak:
583 hsec = h->root.u.def.section;
584 break;
585
586 case bfd_link_hash_common:
587 hsec = h->root.u.c.p->section;
588 break;
589 }
590
591 if (hsec == NULL)
592 olddyn = FALSE;
593 else
594 olddyn = (hsec->symbol->flags & BSF_DYNAMIC) != 0;
595 }
596
597 /* NEWDEF and OLDDEF indicate whether the new or old symbol,
598 respectively, appear to be a definition rather than reference. */
599
600 if (bfd_is_und_section (sec) || bfd_is_com_section (sec))
601 newdef = FALSE;
602 else
603 newdef = TRUE;
604
605 if (h->root.type == bfd_link_hash_undefined
606 || h->root.type == bfd_link_hash_undefweak
607 || h->root.type == bfd_link_hash_common)
608 olddef = FALSE;
609 else
610 olddef = TRUE;
611
612 /* We need to rememeber if a symbol has a definition in a dynamic
613 object or is weak in all dynamic objects. Internal and hidden
614 visibility will make it unavailable to dynamic objects. */
615 if (newdyn && (h->elf_link_hash_flags & ELF_LINK_DYNAMIC_DEF) == 0)
616 {
617 if (!bfd_is_und_section (sec))
618 h->elf_link_hash_flags |= ELF_LINK_DYNAMIC_DEF;
619 else
620 {
621 /* Check if this symbol is weak in all dynamic objects. If it
622 is the first time we see it in a dynamic object, we mark
623 if it is weak. Otherwise, we clear it. */
624 if ((h->elf_link_hash_flags & ELF_LINK_HASH_REF_DYNAMIC) == 0)
625 {
626 if (bind == STB_WEAK)
627 h->elf_link_hash_flags |= ELF_LINK_DYNAMIC_WEAK;
628 }
629 else if (bind != STB_WEAK)
630 h->elf_link_hash_flags &= ~ELF_LINK_DYNAMIC_WEAK;
631 }
632 }
633
634 /* If the old symbol has non-default visibility, we ignore the new
635 definition from a dynamic object. */
636 if (newdyn
637 && ELF_ST_VISIBILITY (h->other)
638 && !bfd_is_und_section (sec))
639 {
640 *skip = TRUE;
641 /* Make sure this symbol is dynamic. */
642 h->elf_link_hash_flags |= ELF_LINK_HASH_REF_DYNAMIC;
643 /* A protected symbol has external availability. Make sure it is
644 recorded as dynamic.
645
646 FIXME: Should we check type and size for protected symbol? */
647 if (ELF_ST_VISIBILITY (h->other) == STV_PROTECTED)
648 return _bfd_elf_link_record_dynamic_symbol (info, h);
649 else
650 return TRUE;
651 }
652 else if (!newdyn
653 && ELF_ST_VISIBILITY (sym->st_other)
654 && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) != 0)
655 {
656 /* If the new symbol with non-default visibility comes from a
657 relocatable file and the old definition comes from a dynamic
658 object, we remove the old definition. */
659 if ((*sym_hash)->root.type == bfd_link_hash_indirect)
660 h = *sym_hash;
661 h->root.type = bfd_link_hash_new;
662 h->root.u.undef.abfd = NULL;
663 if (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC)
664 {
665 h->elf_link_hash_flags &= ~ELF_LINK_HASH_DEF_DYNAMIC;
666 h->elf_link_hash_flags |= (ELF_LINK_HASH_REF_DYNAMIC
667 | ELF_LINK_DYNAMIC_DEF);
668 }
669 /* FIXME: Should we check type and size for protected symbol? */
670 h->size = 0;
671 h->type = 0;
672 return TRUE;
673 }
674
675 /* We need to treat weak definiton right, depending on if there is a
676 definition from a dynamic object. */
677 if (bind == STB_WEAK)
678 {
679 if (olddef)
680 {
681 newweakdef = TRUE;
682 newweakundef = FALSE;
683 }
684 else
685 {
686 newweakdef = FALSE;
687 newweakundef = TRUE;
688 }
689 }
690 else
691 newweakdef = newweakundef = FALSE;
692
693 /* If the new weak definition comes from a relocatable file and the
694 old symbol comes from a dynamic object, we treat the new one as
695 strong. */
696 if (newweakdef && !newdyn && olddyn)
697 newweakdef = FALSE;
698
699 if (h->root.type == bfd_link_hash_defweak)
700 {
701 oldweakdef = TRUE;
702 oldweakundef = FALSE;
703 }
704 else if (h->root.type == bfd_link_hash_undefweak)
705 {
706 oldweakdef = FALSE;
707 oldweakundef = TRUE;
708 }
709 else
710 oldweakdef = oldweakundef = FALSE;
711
712 /* If the old weak definition comes from a relocatable file and the
713 new symbol comes from a dynamic object, we treat the old one as
714 strong. */
715 if (oldweakdef && !olddyn && newdyn)
716 oldweakdef = FALSE;
717
718 /* NEWDYNCOMMON and OLDDYNCOMMON indicate whether the new or old
719 symbol, respectively, appears to be a common symbol in a dynamic
720 object. If a symbol appears in an uninitialized section, and is
721 not weak, and is not a function, then it may be a common symbol
722 which was resolved when the dynamic object was created. We want
723 to treat such symbols specially, because they raise special
724 considerations when setting the symbol size: if the symbol
725 appears as a common symbol in a regular object, and the size in
726 the regular object is larger, we must make sure that we use the
727 larger size. This problematic case can always be avoided in C,
728 but it must be handled correctly when using Fortran shared
729 libraries.
730
731 Note that if NEWDYNCOMMON is set, NEWDEF will be set, and
732 likewise for OLDDYNCOMMON and OLDDEF.
733
734 Note that this test is just a heuristic, and that it is quite
735 possible to have an uninitialized symbol in a shared object which
736 is really a definition, rather than a common symbol. This could
737 lead to some minor confusion when the symbol really is a common
738 symbol in some regular object. However, I think it will be
739 harmless. */
740
741 if (newdyn
742 && newdef
743 && (sec->flags & SEC_ALLOC) != 0
744 && (sec->flags & SEC_LOAD) == 0
745 && sym->st_size > 0
746 && !newweakdef
747 && !newweakundef
748 && ELF_ST_TYPE (sym->st_info) != STT_FUNC)
749 newdyncommon = TRUE;
750 else
751 newdyncommon = FALSE;
752
753 if (olddyn
754 && olddef
755 && h->root.type == bfd_link_hash_defined
756 && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) != 0
757 && (h->root.u.def.section->flags & SEC_ALLOC) != 0
758 && (h->root.u.def.section->flags & SEC_LOAD) == 0
759 && h->size > 0
760 && h->type != STT_FUNC)
761 olddyncommon = TRUE;
762 else
763 olddyncommon = FALSE;
764
765 /* It's OK to change the type if either the existing symbol or the
766 new symbol is weak unless it comes from a DT_NEEDED entry of
767 a shared object, in which case, the DT_NEEDED entry may not be
768 required at the run time. */
769
770 if ((! dt_needed && oldweakdef)
771 || oldweakundef
772 || newweakdef
773 || newweakundef)
774 *type_change_ok = TRUE;
775
776 /* It's OK to change the size if either the existing symbol or the
777 new symbol is weak, or if the old symbol is undefined. */
778
779 if (*type_change_ok
780 || h->root.type == bfd_link_hash_undefined)
781 *size_change_ok = TRUE;
782
783 /* If both the old and the new symbols look like common symbols in a
784 dynamic object, set the size of the symbol to the larger of the
785 two. */
786
787 if (olddyncommon
788 && newdyncommon
789 && sym->st_size != h->size)
790 {
791 /* Since we think we have two common symbols, issue a multiple
792 common warning if desired. Note that we only warn if the
793 size is different. If the size is the same, we simply let
794 the old symbol override the new one as normally happens with
795 symbols defined in dynamic objects. */
796
797 if (! ((*info->callbacks->multiple_common)
798 (info, h->root.root.string, oldbfd, bfd_link_hash_common,
799 h->size, abfd, bfd_link_hash_common, sym->st_size)))
800 return FALSE;
801
802 if (sym->st_size > h->size)
803 h->size = sym->st_size;
804
805 *size_change_ok = TRUE;
806 }
807
808 /* If we are looking at a dynamic object, and we have found a
809 definition, we need to see if the symbol was already defined by
810 some other object. If so, we want to use the existing
811 definition, and we do not want to report a multiple symbol
812 definition error; we do this by clobbering *PSEC to be
813 bfd_und_section_ptr.
814
815 We treat a common symbol as a definition if the symbol in the
816 shared library is a function, since common symbols always
817 represent variables; this can cause confusion in principle, but
818 any such confusion would seem to indicate an erroneous program or
819 shared library. We also permit a common symbol in a regular
820 object to override a weak symbol in a shared object.
821
822 We prefer a non-weak definition in a shared library to a weak
823 definition in the executable unless it comes from a DT_NEEDED
824 entry of a shared object, in which case, the DT_NEEDED entry
825 may not be required at the run time. */
826
827 if (newdyn
828 && newdef
829 && (olddef
830 || (h->root.type == bfd_link_hash_common
831 && (newweakdef
832 || newweakundef
833 || ELF_ST_TYPE (sym->st_info) == STT_FUNC)))
834 && (!oldweakdef
835 || dt_needed
836 || newweakdef
837 || newweakundef))
838 {
839 *override = TRUE;
840 newdef = FALSE;
841 newdyncommon = FALSE;
842
843 *psec = sec = bfd_und_section_ptr;
844 *size_change_ok = TRUE;
845
846 /* If we get here when the old symbol is a common symbol, then
847 we are explicitly letting it override a weak symbol or
848 function in a dynamic object, and we don't want to warn about
849 a type change. If the old symbol is a defined symbol, a type
850 change warning may still be appropriate. */
851
852 if (h->root.type == bfd_link_hash_common)
853 *type_change_ok = TRUE;
854 }
855
856 /* Handle the special case of an old common symbol merging with a
857 new symbol which looks like a common symbol in a shared object.
858 We change *PSEC and *PVALUE to make the new symbol look like a
859 common symbol, and let _bfd_generic_link_add_one_symbol will do
860 the right thing. */
861
862 if (newdyncommon
863 && h->root.type == bfd_link_hash_common)
864 {
865 *override = TRUE;
866 newdef = FALSE;
867 newdyncommon = FALSE;
868 *pvalue = sym->st_size;
869 *psec = sec = bfd_com_section_ptr;
870 *size_change_ok = TRUE;
871 }
872
873 /* If the old symbol is from a dynamic object, and the new symbol is
874 a definition which is not from a dynamic object, then the new
875 symbol overrides the old symbol. Symbols from regular files
876 always take precedence over symbols from dynamic objects, even if
877 they are defined after the dynamic object in the link.
878
879 As above, we again permit a common symbol in a regular object to
880 override a definition in a shared object if the shared object
881 symbol is a function or is weak.
882
883 As above, we permit a non-weak definition in a shared object to
884 override a weak definition in a regular object. */
885
886 flip = NULL;
887 if (! newdyn
888 && (newdef
889 || (bfd_is_com_section (sec)
890 && (oldweakdef || h->type == STT_FUNC)))
891 && olddyn
892 && olddef
893 && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) != 0
894 && ((!newweakdef && !newweakundef) || oldweakdef))
895 {
896 /* Change the hash table entry to undefined, and let
897 _bfd_generic_link_add_one_symbol do the right thing with the
898 new definition. */
899
900 h->root.type = bfd_link_hash_undefined;
901 h->root.u.undef.abfd = h->root.u.def.section->owner;
902 *size_change_ok = TRUE;
903
904 olddef = FALSE;
905 olddyncommon = FALSE;
906
907 /* We again permit a type change when a common symbol may be
908 overriding a function. */
909
910 if (bfd_is_com_section (sec))
911 *type_change_ok = TRUE;
912
913 if ((*sym_hash)->root.type == bfd_link_hash_indirect)
914 flip = *sym_hash;
915 else
916 /* This union may have been set to be non-NULL when this symbol
917 was seen in a dynamic object. We must force the union to be
918 NULL, so that it is correct for a regular symbol. */
919 h->verinfo.vertree = NULL;
920 }
921
922 /* Handle the special case of a new common symbol merging with an
923 old symbol that looks like it might be a common symbol defined in
924 a shared object. Note that we have already handled the case in
925 which a new common symbol should simply override the definition
926 in the shared library. */
927
928 if (! newdyn
929 && bfd_is_com_section (sec)
930 && olddyncommon)
931 {
932 /* It would be best if we could set the hash table entry to a
933 common symbol, but we don't know what to use for the section
934 or the alignment. */
935 if (! ((*info->callbacks->multiple_common)
936 (info, h->root.root.string, oldbfd, bfd_link_hash_common,
937 h->size, abfd, bfd_link_hash_common, sym->st_size)))
938 return FALSE;
939
940 /* If the predumed common symbol in the dynamic object is
941 larger, pretend that the new symbol has its size. */
942
943 if (h->size > *pvalue)
944 *pvalue = h->size;
945
946 /* FIXME: We no longer know the alignment required by the symbol
947 in the dynamic object, so we just wind up using the one from
948 the regular object. */
949
950 olddef = FALSE;
951 olddyncommon = FALSE;
952
953 h->root.type = bfd_link_hash_undefined;
954 h->root.u.undef.abfd = h->root.u.def.section->owner;
955
956 *size_change_ok = TRUE;
957 *type_change_ok = TRUE;
958
959 if ((*sym_hash)->root.type == bfd_link_hash_indirect)
960 flip = *sym_hash;
961 else
962 h->verinfo.vertree = NULL;
963 }
964
965 if (flip != NULL)
966 {
967 /* Handle the case where we had a versioned symbol in a dynamic
968 library and now find a definition in a normal object. In this
969 case, we make the versioned symbol point to the normal one. */
970 struct elf_backend_data *bed = get_elf_backend_data (abfd);
971 flip->root.type = h->root.type;
972 h->root.type = bfd_link_hash_indirect;
973 h->root.u.i.link = (struct bfd_link_hash_entry *) flip;
974 (*bed->elf_backend_copy_indirect_symbol) (bed, flip, h);
975 flip->root.u.undef.abfd = h->root.u.undef.abfd;
976 if (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC)
977 {
978 h->elf_link_hash_flags &= ~ELF_LINK_HASH_DEF_DYNAMIC;
979 flip->elf_link_hash_flags |= ELF_LINK_HASH_REF_DYNAMIC;
980 }
981 }
982
983 /* Handle the special case of a weak definition in a regular object
984 followed by a non-weak definition in a shared object. In this
985 case, we prefer the definition in the shared object unless it
986 comes from a DT_NEEDED entry of a shared object, in which case,
987 the DT_NEEDED entry may not be required at the run time. */
988 if (olddef
989 && ! dt_needed
990 && oldweakdef
991 && newdef
992 && newdyn
993 && !newweakdef
994 && !newweakundef)
995 {
996 /* To make this work we have to frob the flags so that the rest
997 of the code does not think we are using the regular
998 definition. */
999 if ((h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) != 0)
1000 h->elf_link_hash_flags |= ELF_LINK_HASH_REF_REGULAR;
1001 else if ((h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) != 0)
1002 h->elf_link_hash_flags |= ELF_LINK_HASH_REF_DYNAMIC;
1003 h->elf_link_hash_flags &= ~ (ELF_LINK_HASH_DEF_REGULAR
1004 | ELF_LINK_HASH_DEF_DYNAMIC);
1005
1006 /* If H is the target of an indirection, we want the caller to
1007 use H rather than the indirect symbol. Otherwise if we are
1008 defining a new indirect symbol we will wind up attaching it
1009 to the entry we are overriding. */
1010 *sym_hash = h;
1011 }
1012
1013 /* Handle the special case of a non-weak definition in a shared
1014 object followed by a weak definition in a regular object. In
1015 this case we prefer the definition in the shared object. To make
1016 this work we have to tell the caller to not treat the new symbol
1017 as a definition. */
1018 if (olddef
1019 && olddyn
1020 && !oldweakdef
1021 && newdef
1022 && ! newdyn
1023 && (newweakdef || newweakundef))
1024 *override = TRUE;
1025
1026 return TRUE;
1027 }
1028
1029 /* This function is called to create an indirect symbol from the
1030 default for the symbol with the default version if needed. The
1031 symbol is described by H, NAME, SYM, PSEC, VALUE, and OVERRIDE. We
1032 set DYNSYM if the new indirect symbol is dynamic. DT_NEEDED
1033 indicates if it comes from a DT_NEEDED entry of a shared object. */
1034
1035 static bfd_boolean
elf_add_default_symbol(abfd,info,h,name,sym,psec,value,dynsym,override,dt_needed)1036 elf_add_default_symbol (abfd, info, h, name, sym, psec, value,
1037 dynsym, override, dt_needed)
1038 bfd *abfd;
1039 struct bfd_link_info *info;
1040 struct elf_link_hash_entry *h;
1041 const char *name;
1042 Elf_Internal_Sym *sym;
1043 asection **psec;
1044 bfd_vma *value;
1045 bfd_boolean *dynsym;
1046 bfd_boolean override;
1047 bfd_boolean dt_needed;
1048 {
1049 bfd_boolean type_change_ok;
1050 bfd_boolean size_change_ok;
1051 bfd_boolean skip;
1052 char *shortname;
1053 struct elf_link_hash_entry *hi;
1054 struct bfd_link_hash_entry *bh;
1055 struct elf_backend_data *bed;
1056 bfd_boolean collect;
1057 bfd_boolean dynamic;
1058 char *p;
1059 size_t len, shortlen;
1060 asection *sec;
1061
1062 /* If this symbol has a version, and it is the default version, we
1063 create an indirect symbol from the default name to the fully
1064 decorated name. This will cause external references which do not
1065 specify a version to be bound to this version of the symbol. */
1066 p = strchr (name, ELF_VER_CHR);
1067 if (p == NULL || p[1] != ELF_VER_CHR)
1068 return TRUE;
1069
1070 if (override)
1071 {
1072 /* We are overridden by an old defition. We need to check if we
1073 need to create the indirect symbol from the default name. */
1074 hi = elf_link_hash_lookup (elf_hash_table (info), name, TRUE,
1075 FALSE, FALSE);
1076 BFD_ASSERT (hi != NULL);
1077 if (hi == h)
1078 return TRUE;
1079 while (hi->root.type == bfd_link_hash_indirect
1080 || hi->root.type == bfd_link_hash_warning)
1081 {
1082 hi = (struct elf_link_hash_entry *) hi->root.u.i.link;
1083 if (hi == h)
1084 return TRUE;
1085 }
1086 }
1087
1088 bed = get_elf_backend_data (abfd);
1089 collect = bed->collect;
1090 dynamic = (abfd->flags & DYNAMIC) != 0;
1091
1092 shortlen = p - name;
1093 shortname = bfd_hash_allocate (&info->hash->table, shortlen + 1);
1094 if (shortname == NULL)
1095 return FALSE;
1096 memcpy (shortname, name, shortlen);
1097 shortname[shortlen] = '\0';
1098
1099 /* We are going to create a new symbol. Merge it with any existing
1100 symbol with this name. For the purposes of the merge, act as
1101 though we were defining the symbol we just defined, although we
1102 actually going to define an indirect symbol. */
1103 type_change_ok = FALSE;
1104 size_change_ok = FALSE;
1105 sec = *psec;
1106 if (! elf_merge_symbol (abfd, info, shortname, sym, &sec, value,
1107 &hi, &skip, &override, &type_change_ok,
1108 &size_change_ok, dt_needed))
1109 return FALSE;
1110
1111 if (skip)
1112 goto nondefault;
1113
1114 if (! override)
1115 {
1116 bh = &hi->root;
1117 if (! (_bfd_generic_link_add_one_symbol
1118 (info, abfd, shortname, BSF_INDIRECT, bfd_ind_section_ptr,
1119 (bfd_vma) 0, name, FALSE, collect, &bh)))
1120 return FALSE;
1121 hi = (struct elf_link_hash_entry *) bh;
1122 }
1123 else
1124 {
1125 /* In this case the symbol named SHORTNAME is overriding the
1126 indirect symbol we want to add. We were planning on making
1127 SHORTNAME an indirect symbol referring to NAME. SHORTNAME
1128 is the name without a version. NAME is the fully versioned
1129 name, and it is the default version.
1130
1131 Overriding means that we already saw a definition for the
1132 symbol SHORTNAME in a regular object, and it is overriding
1133 the symbol defined in the dynamic object.
1134
1135 When this happens, we actually want to change NAME, the
1136 symbol we just added, to refer to SHORTNAME. This will cause
1137 references to NAME in the shared object to become references
1138 to SHORTNAME in the regular object. This is what we expect
1139 when we override a function in a shared object: that the
1140 references in the shared object will be mapped to the
1141 definition in the regular object. */
1142
1143 while (hi->root.type == bfd_link_hash_indirect
1144 || hi->root.type == bfd_link_hash_warning)
1145 hi = (struct elf_link_hash_entry *) hi->root.u.i.link;
1146
1147 h->root.type = bfd_link_hash_indirect;
1148 h->root.u.i.link = (struct bfd_link_hash_entry *) hi;
1149 if (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC)
1150 {
1151 h->elf_link_hash_flags &=~ ELF_LINK_HASH_DEF_DYNAMIC;
1152 hi->elf_link_hash_flags |= ELF_LINK_HASH_REF_DYNAMIC;
1153 if (hi->elf_link_hash_flags
1154 & (ELF_LINK_HASH_REF_REGULAR
1155 | ELF_LINK_HASH_DEF_REGULAR))
1156 {
1157 if (! _bfd_elf_link_record_dynamic_symbol (info, hi))
1158 return FALSE;
1159 }
1160 }
1161
1162 /* Now set HI to H, so that the following code will set the
1163 other fields correctly. */
1164 hi = h;
1165 }
1166
1167 /* If there is a duplicate definition somewhere, then HI may not
1168 point to an indirect symbol. We will have reported an error to
1169 the user in that case. */
1170
1171 if (hi->root.type == bfd_link_hash_indirect)
1172 {
1173 struct elf_link_hash_entry *ht;
1174
1175 /* If the symbol became indirect, then we assume that we have
1176 not seen a definition before. */
1177 BFD_ASSERT ((hi->elf_link_hash_flags
1178 & (ELF_LINK_HASH_DEF_DYNAMIC
1179 | ELF_LINK_HASH_DEF_REGULAR)) == 0);
1180
1181 ht = (struct elf_link_hash_entry *) hi->root.u.i.link;
1182 (*bed->elf_backend_copy_indirect_symbol) (bed, ht, hi);
1183
1184 /* See if the new flags lead us to realize that the symbol must
1185 be dynamic. */
1186 if (! *dynsym)
1187 {
1188 if (! dynamic)
1189 {
1190 if (info->shared
1191 || ((hi->elf_link_hash_flags
1192 & ELF_LINK_HASH_REF_DYNAMIC) != 0))
1193 *dynsym = TRUE;
1194 }
1195 else
1196 {
1197 if ((hi->elf_link_hash_flags
1198 & ELF_LINK_HASH_REF_REGULAR) != 0)
1199 *dynsym = TRUE;
1200 }
1201 }
1202 }
1203
1204 /* We also need to define an indirection from the nondefault version
1205 of the symbol. */
1206
1207 nondefault:
1208 len = strlen (name);
1209 shortname = bfd_hash_allocate (&info->hash->table, len);
1210 if (shortname == NULL)
1211 return FALSE;
1212 memcpy (shortname, name, shortlen);
1213 memcpy (shortname + shortlen, p + 1, len - shortlen);
1214
1215 /* Once again, merge with any existing symbol. */
1216 type_change_ok = FALSE;
1217 size_change_ok = FALSE;
1218 sec = *psec;
1219 if (! elf_merge_symbol (abfd, info, shortname, sym, &sec, value,
1220 &hi, &skip, &override, &type_change_ok,
1221 &size_change_ok, dt_needed))
1222 return FALSE;
1223
1224 if (skip)
1225 return TRUE;
1226
1227 if (override)
1228 {
1229 /* Here SHORTNAME is a versioned name, so we don't expect to see
1230 the type of override we do in the case above unless it is
1231 overridden by a versioned definiton. */
1232 if (hi->root.type != bfd_link_hash_defined
1233 && hi->root.type != bfd_link_hash_defweak)
1234 (*_bfd_error_handler)
1235 (_("%s: warning: unexpected redefinition of indirect versioned symbol `%s'"),
1236 bfd_archive_filename (abfd), shortname);
1237 }
1238 else
1239 {
1240 bh = &hi->root;
1241 if (! (_bfd_generic_link_add_one_symbol
1242 (info, abfd, shortname, BSF_INDIRECT,
1243 bfd_ind_section_ptr, (bfd_vma) 0, name, FALSE, collect, &bh)))
1244 return FALSE;
1245 hi = (struct elf_link_hash_entry *) bh;
1246
1247 /* If there is a duplicate definition somewhere, then HI may not
1248 point to an indirect symbol. We will have reported an error
1249 to the user in that case. */
1250
1251 if (hi->root.type == bfd_link_hash_indirect)
1252 {
1253 /* If the symbol became indirect, then we assume that we have
1254 not seen a definition before. */
1255 BFD_ASSERT ((hi->elf_link_hash_flags
1256 & (ELF_LINK_HASH_DEF_DYNAMIC
1257 | ELF_LINK_HASH_DEF_REGULAR)) == 0);
1258
1259 (*bed->elf_backend_copy_indirect_symbol) (bed, h, hi);
1260
1261 /* See if the new flags lead us to realize that the symbol
1262 must be dynamic. */
1263 if (! *dynsym)
1264 {
1265 if (! dynamic)
1266 {
1267 if (info->shared
1268 || ((hi->elf_link_hash_flags
1269 & ELF_LINK_HASH_REF_DYNAMIC) != 0))
1270 *dynsym = TRUE;
1271 }
1272 else
1273 {
1274 if ((hi->elf_link_hash_flags
1275 & ELF_LINK_HASH_REF_REGULAR) != 0)
1276 *dynsym = TRUE;
1277 }
1278 }
1279 }
1280 }
1281
1282 return TRUE;
1283 }
1284
1285 /* Add symbols from an ELF object file to the linker hash table. */
1286
1287 static bfd_boolean
elf_link_add_object_symbols(abfd,info)1288 elf_link_add_object_symbols (abfd, info)
1289 bfd *abfd;
1290 struct bfd_link_info *info;
1291 {
1292 bfd_boolean (*add_symbol_hook)
1293 PARAMS ((bfd *, struct bfd_link_info *, const Elf_Internal_Sym *,
1294 const char **, flagword *, asection **, bfd_vma *));
1295 bfd_boolean (*check_relocs)
1296 PARAMS ((bfd *, struct bfd_link_info *, asection *,
1297 const Elf_Internal_Rela *));
1298 bfd_boolean collect;
1299 Elf_Internal_Shdr *hdr;
1300 bfd_size_type symcount;
1301 bfd_size_type extsymcount;
1302 bfd_size_type extsymoff;
1303 struct elf_link_hash_entry **sym_hash;
1304 bfd_boolean dynamic;
1305 Elf_External_Versym *extversym = NULL;
1306 Elf_External_Versym *ever;
1307 struct elf_link_hash_entry *weaks;
1308 struct elf_link_hash_entry **nondeflt_vers = NULL;
1309 bfd_size_type nondeflt_vers_cnt = 0;
1310 Elf_Internal_Sym *isymbuf = NULL;
1311 Elf_Internal_Sym *isym;
1312 Elf_Internal_Sym *isymend;
1313 struct elf_backend_data *bed;
1314 bfd_boolean dt_needed;
1315 struct elf_link_hash_table * hash_table;
1316 bfd_size_type amt;
1317
1318 hash_table = elf_hash_table (info);
1319
1320 bed = get_elf_backend_data (abfd);
1321 add_symbol_hook = bed->elf_add_symbol_hook;
1322 collect = bed->collect;
1323
1324 if ((abfd->flags & DYNAMIC) == 0)
1325 dynamic = FALSE;
1326 else
1327 {
1328 dynamic = TRUE;
1329
1330 /* You can't use -r against a dynamic object. Also, there's no
1331 hope of using a dynamic object which does not exactly match
1332 the format of the output file. */
1333 if (info->relocateable || info->hash->creator != abfd->xvec)
1334 {
1335 bfd_set_error (bfd_error_invalid_operation);
1336 goto error_return;
1337 }
1338 }
1339
1340 /* As a GNU extension, any input sections which are named
1341 .gnu.warning.SYMBOL are treated as warning symbols for the given
1342 symbol. This differs from .gnu.warning sections, which generate
1343 warnings when they are included in an output file. */
1344 if (! info->shared)
1345 {
1346 asection *s;
1347
1348 for (s = abfd->sections; s != NULL; s = s->next)
1349 {
1350 const char *name;
1351
1352 name = bfd_get_section_name (abfd, s);
1353 if (strncmp (name, ".gnu.warning.", sizeof ".gnu.warning." - 1) == 0)
1354 {
1355 char *msg;
1356 bfd_size_type sz;
1357
1358 name += sizeof ".gnu.warning." - 1;
1359
1360 /* If this is a shared object, then look up the symbol
1361 in the hash table. If it is there, and it is already
1362 been defined, then we will not be using the entry
1363 from this shared object, so we don't need to warn.
1364 FIXME: If we see the definition in a regular object
1365 later on, we will warn, but we shouldn't. The only
1366 fix is to keep track of what warnings we are supposed
1367 to emit, and then handle them all at the end of the
1368 link. */
1369 if (dynamic && abfd->xvec == info->hash->creator)
1370 {
1371 struct elf_link_hash_entry *h;
1372
1373 h = elf_link_hash_lookup (hash_table, name,
1374 FALSE, FALSE, TRUE);
1375
1376 /* FIXME: What about bfd_link_hash_common? */
1377 if (h != NULL
1378 && (h->root.type == bfd_link_hash_defined
1379 || h->root.type == bfd_link_hash_defweak))
1380 {
1381 /* We don't want to issue this warning. Clobber
1382 the section size so that the warning does not
1383 get copied into the output file. */
1384 s->_raw_size = 0;
1385 continue;
1386 }
1387 }
1388
1389 sz = bfd_section_size (abfd, s);
1390 msg = (char *) bfd_alloc (abfd, sz + 1);
1391 if (msg == NULL)
1392 goto error_return;
1393
1394 if (! bfd_get_section_contents (abfd, s, msg, (file_ptr) 0, sz))
1395 goto error_return;
1396
1397 msg[sz] = '\0';
1398
1399 if (! (_bfd_generic_link_add_one_symbol
1400 (info, abfd, name, BSF_WARNING, s, (bfd_vma) 0, msg,
1401 FALSE, collect, (struct bfd_link_hash_entry **) NULL)))
1402 goto error_return;
1403
1404 if (! info->relocateable)
1405 {
1406 /* Clobber the section size so that the warning does
1407 not get copied into the output file. */
1408 s->_raw_size = 0;
1409 }
1410 }
1411 }
1412 }
1413
1414 dt_needed = FALSE;
1415 if (! dynamic)
1416 {
1417 /* If we are creating a shared library, create all the dynamic
1418 sections immediately. We need to attach them to something,
1419 so we attach them to this BFD, provided it is the right
1420 format. FIXME: If there are no input BFD's of the same
1421 format as the output, we can't make a shared library. */
1422 if (info->shared
1423 && is_elf_hash_table (info)
1424 && ! hash_table->dynamic_sections_created
1425 && abfd->xvec == info->hash->creator)
1426 {
1427 if (! elf_link_create_dynamic_sections (abfd, info))
1428 goto error_return;
1429 }
1430 }
1431 else if (! is_elf_hash_table (info))
1432 goto error_return;
1433 else
1434 {
1435 asection *s;
1436 bfd_boolean add_needed;
1437 const char *name;
1438 bfd_size_type oldsize;
1439 bfd_size_type strindex;
1440 struct bfd_link_needed_list *rpath = NULL, *runpath = NULL;
1441
1442 /* ld --just-symbols and dynamic objects don't mix very well.
1443 Test for --just-symbols by looking at info set up by
1444 _bfd_elf_link_just_syms. */
1445 if ((s = abfd->sections) != NULL
1446 && s->sec_info_type == ELF_INFO_TYPE_JUST_SYMS)
1447 goto error_return;
1448
1449 /* Find the name to use in a DT_NEEDED entry that refers to this
1450 object. If the object has a DT_SONAME entry, we use it.
1451 Otherwise, if the generic linker stuck something in
1452 elf_dt_name, we use that. Otherwise, we just use the file
1453 name. If the generic linker put a null string into
1454 elf_dt_name, we don't make a DT_NEEDED entry at all, even if
1455 there is a DT_SONAME entry. */
1456 add_needed = TRUE;
1457 name = bfd_get_filename (abfd);
1458 if (elf_dt_name (abfd) != NULL)
1459 {
1460 name = elf_dt_name (abfd);
1461 if (*name == '\0')
1462 {
1463 if (elf_dt_soname (abfd) != NULL)
1464 dt_needed = TRUE;
1465
1466 add_needed = FALSE;
1467 }
1468 }
1469 s = bfd_get_section_by_name (abfd, ".dynamic");
1470 if (s != NULL)
1471 {
1472 Elf_External_Dyn *dynbuf = NULL;
1473 Elf_External_Dyn *extdyn;
1474 Elf_External_Dyn *extdynend;
1475 int elfsec;
1476 unsigned long shlink;
1477
1478 dynbuf = (Elf_External_Dyn *) bfd_malloc (s->_raw_size);
1479 if (dynbuf == NULL)
1480 goto error_return;
1481
1482 if (! bfd_get_section_contents (abfd, s, (PTR) dynbuf,
1483 (file_ptr) 0, s->_raw_size))
1484 goto error_free_dyn;
1485
1486 elfsec = _bfd_elf_section_from_bfd_section (abfd, s);
1487 if (elfsec == -1)
1488 goto error_free_dyn;
1489 shlink = elf_elfsections (abfd)[elfsec]->sh_link;
1490
1491 extdyn = dynbuf;
1492 extdynend = extdyn + s->_raw_size / sizeof (Elf_External_Dyn);
1493 for (; extdyn < extdynend; extdyn++)
1494 {
1495 Elf_Internal_Dyn dyn;
1496
1497 elf_swap_dyn_in (abfd, extdyn, &dyn);
1498 if (dyn.d_tag == DT_SONAME)
1499 {
1500 unsigned int tagv = dyn.d_un.d_val;
1501 name = bfd_elf_string_from_elf_section (abfd, shlink, tagv);
1502 if (name == NULL)
1503 goto error_free_dyn;
1504 }
1505 if (dyn.d_tag == DT_NEEDED)
1506 {
1507 struct bfd_link_needed_list *n, **pn;
1508 char *fnm, *anm;
1509 unsigned int tagv = dyn.d_un.d_val;
1510
1511 amt = sizeof (struct bfd_link_needed_list);
1512 n = (struct bfd_link_needed_list *) bfd_alloc (abfd, amt);
1513 fnm = bfd_elf_string_from_elf_section (abfd, shlink, tagv);
1514 if (n == NULL || fnm == NULL)
1515 goto error_free_dyn;
1516 amt = strlen (fnm) + 1;
1517 anm = bfd_alloc (abfd, amt);
1518 if (anm == NULL)
1519 goto error_free_dyn;
1520 memcpy (anm, fnm, (size_t) amt);
1521 n->name = anm;
1522 n->by = abfd;
1523 n->next = NULL;
1524 for (pn = & hash_table->needed;
1525 *pn != NULL;
1526 pn = &(*pn)->next)
1527 ;
1528 *pn = n;
1529 }
1530 if (dyn.d_tag == DT_RUNPATH)
1531 {
1532 struct bfd_link_needed_list *n, **pn;
1533 char *fnm, *anm;
1534 unsigned int tagv = dyn.d_un.d_val;
1535
1536 amt = sizeof (struct bfd_link_needed_list);
1537 n = (struct bfd_link_needed_list *) bfd_alloc (abfd, amt);
1538 fnm = bfd_elf_string_from_elf_section (abfd, shlink, tagv);
1539 if (n == NULL || fnm == NULL)
1540 goto error_free_dyn;
1541 amt = strlen (fnm) + 1;
1542 anm = bfd_alloc (abfd, amt);
1543 if (anm == NULL)
1544 goto error_free_dyn;
1545 memcpy (anm, fnm, (size_t) amt);
1546 n->name = anm;
1547 n->by = abfd;
1548 n->next = NULL;
1549 for (pn = & runpath;
1550 *pn != NULL;
1551 pn = &(*pn)->next)
1552 ;
1553 *pn = n;
1554 }
1555 /* Ignore DT_RPATH if we have seen DT_RUNPATH. */
1556 if (!runpath && dyn.d_tag == DT_RPATH)
1557 {
1558 struct bfd_link_needed_list *n, **pn;
1559 char *fnm, *anm;
1560 unsigned int tagv = dyn.d_un.d_val;
1561
1562 amt = sizeof (struct bfd_link_needed_list);
1563 n = (struct bfd_link_needed_list *) bfd_alloc (abfd, amt);
1564 fnm = bfd_elf_string_from_elf_section (abfd, shlink, tagv);
1565 if (n == NULL || fnm == NULL)
1566 goto error_free_dyn;
1567 amt = strlen (fnm) + 1;
1568 anm = bfd_alloc (abfd, amt);
1569 if (anm == NULL)
1570 {
1571 error_free_dyn:
1572 free (dynbuf);
1573 goto error_return;
1574 }
1575 memcpy (anm, fnm, (size_t) amt);
1576 n->name = anm;
1577 n->by = abfd;
1578 n->next = NULL;
1579 for (pn = & rpath;
1580 *pn != NULL;
1581 pn = &(*pn)->next)
1582 ;
1583 *pn = n;
1584 }
1585 }
1586
1587 free (dynbuf);
1588 }
1589
1590 /* DT_RUNPATH overrides DT_RPATH. Do _NOT_ bfd_release, as that
1591 frees all more recently bfd_alloc'd blocks as well. */
1592 if (runpath)
1593 rpath = runpath;
1594
1595 if (rpath)
1596 {
1597 struct bfd_link_needed_list **pn;
1598 for (pn = & hash_table->runpath;
1599 *pn != NULL;
1600 pn = &(*pn)->next)
1601 ;
1602 *pn = rpath;
1603 }
1604
1605 /* We do not want to include any of the sections in a dynamic
1606 object in the output file. We hack by simply clobbering the
1607 list of sections in the BFD. This could be handled more
1608 cleanly by, say, a new section flag; the existing
1609 SEC_NEVER_LOAD flag is not the one we want, because that one
1610 still implies that the section takes up space in the output
1611 file. */
1612 bfd_section_list_clear (abfd);
1613
1614 /* If this is the first dynamic object found in the link, create
1615 the special sections required for dynamic linking. */
1616 if (! hash_table->dynamic_sections_created)
1617 if (! elf_link_create_dynamic_sections (abfd, info))
1618 goto error_return;
1619
1620 if (add_needed)
1621 {
1622 /* Add a DT_NEEDED entry for this dynamic object. */
1623 oldsize = _bfd_elf_strtab_size (hash_table->dynstr);
1624 strindex = _bfd_elf_strtab_add (hash_table->dynstr, name, FALSE);
1625 if (strindex == (bfd_size_type) -1)
1626 goto error_return;
1627
1628 if (oldsize == _bfd_elf_strtab_size (hash_table->dynstr))
1629 {
1630 asection *sdyn;
1631 Elf_External_Dyn *dyncon, *dynconend;
1632
1633 /* The hash table size did not change, which means that
1634 the dynamic object name was already entered. If we
1635 have already included this dynamic object in the
1636 link, just ignore it. There is no reason to include
1637 a particular dynamic object more than once. */
1638 sdyn = bfd_get_section_by_name (hash_table->dynobj, ".dynamic");
1639 BFD_ASSERT (sdyn != NULL);
1640
1641 dyncon = (Elf_External_Dyn *) sdyn->contents;
1642 dynconend = (Elf_External_Dyn *) (sdyn->contents +
1643 sdyn->_raw_size);
1644 for (; dyncon < dynconend; dyncon++)
1645 {
1646 Elf_Internal_Dyn dyn;
1647
1648 elf_swap_dyn_in (hash_table->dynobj, dyncon, & dyn);
1649 if (dyn.d_tag == DT_NEEDED
1650 && dyn.d_un.d_val == strindex)
1651 {
1652 _bfd_elf_strtab_delref (hash_table->dynstr, strindex);
1653 return TRUE;
1654 }
1655 }
1656 }
1657
1658 if (! elf_add_dynamic_entry (info, (bfd_vma) DT_NEEDED, strindex))
1659 goto error_return;
1660 }
1661
1662 /* Save the SONAME, if there is one, because sometimes the
1663 linker emulation code will need to know it. */
1664 if (*name == '\0')
1665 name = basename (bfd_get_filename (abfd));
1666 elf_dt_name (abfd) = name;
1667 }
1668
1669 /* If this is a dynamic object, we always link against the .dynsym
1670 symbol table, not the .symtab symbol table. The dynamic linker
1671 will only see the .dynsym symbol table, so there is no reason to
1672 look at .symtab for a dynamic object. */
1673
1674 if (! dynamic || elf_dynsymtab (abfd) == 0)
1675 hdr = &elf_tdata (abfd)->symtab_hdr;
1676 else
1677 hdr = &elf_tdata (abfd)->dynsymtab_hdr;
1678
1679 symcount = hdr->sh_size / sizeof (Elf_External_Sym);
1680
1681 /* The sh_info field of the symtab header tells us where the
1682 external symbols start. We don't care about the local symbols at
1683 this point. */
1684 if (elf_bad_symtab (abfd))
1685 {
1686 extsymcount = symcount;
1687 extsymoff = 0;
1688 }
1689 else
1690 {
1691 extsymcount = symcount - hdr->sh_info;
1692 extsymoff = hdr->sh_info;
1693 }
1694
1695 sym_hash = NULL;
1696 if (extsymcount != 0)
1697 {
1698 isymbuf = bfd_elf_get_elf_syms (abfd, hdr, extsymcount, extsymoff,
1699 NULL, NULL, NULL);
1700 if (isymbuf == NULL)
1701 goto error_return;
1702
1703 /* We store a pointer to the hash table entry for each external
1704 symbol. */
1705 amt = extsymcount * sizeof (struct elf_link_hash_entry *);
1706 sym_hash = (struct elf_link_hash_entry **) bfd_alloc (abfd, amt);
1707 if (sym_hash == NULL)
1708 goto error_free_sym;
1709 elf_sym_hashes (abfd) = sym_hash;
1710 }
1711
1712 if (dynamic)
1713 {
1714 /* Read in any version definitions. */
1715 if (! _bfd_elf_slurp_version_tables (abfd))
1716 goto error_free_sym;
1717
1718 /* Read in the symbol versions, but don't bother to convert them
1719 to internal format. */
1720 if (elf_dynversym (abfd) != 0)
1721 {
1722 Elf_Internal_Shdr *versymhdr;
1723
1724 versymhdr = &elf_tdata (abfd)->dynversym_hdr;
1725 extversym = (Elf_External_Versym *) bfd_malloc (versymhdr->sh_size);
1726 if (extversym == NULL)
1727 goto error_free_sym;
1728 amt = versymhdr->sh_size;
1729 if (bfd_seek (abfd, versymhdr->sh_offset, SEEK_SET) != 0
1730 || bfd_bread ((PTR) extversym, amt, abfd) != amt)
1731 goto error_free_vers;
1732 }
1733 }
1734
1735 weaks = NULL;
1736
1737 ever = extversym != NULL ? extversym + extsymoff : NULL;
1738 for (isym = isymbuf, isymend = isymbuf + extsymcount;
1739 isym < isymend;
1740 isym++, sym_hash++, ever = (ever != NULL ? ever + 1 : NULL))
1741 {
1742 int bind;
1743 bfd_vma value;
1744 asection *sec;
1745 flagword flags;
1746 const char *name;
1747 struct elf_link_hash_entry *h;
1748 bfd_boolean definition;
1749 bfd_boolean size_change_ok;
1750 bfd_boolean type_change_ok;
1751 bfd_boolean new_weakdef;
1752 bfd_boolean override;
1753 unsigned int old_alignment;
1754 bfd *old_bfd;
1755
1756 override = FALSE;
1757
1758 flags = BSF_NO_FLAGS;
1759 sec = NULL;
1760 value = isym->st_value;
1761 *sym_hash = NULL;
1762
1763 bind = ELF_ST_BIND (isym->st_info);
1764 if (bind == STB_LOCAL)
1765 {
1766 /* This should be impossible, since ELF requires that all
1767 global symbols follow all local symbols, and that sh_info
1768 point to the first global symbol. Unfortunatealy, Irix 5
1769 screws this up. */
1770 continue;
1771 }
1772 else if (bind == STB_GLOBAL)
1773 {
1774 if (isym->st_shndx != SHN_UNDEF
1775 && isym->st_shndx != SHN_COMMON)
1776 flags = BSF_GLOBAL;
1777 }
1778 else if (bind == STB_WEAK)
1779 flags = BSF_WEAK;
1780 else
1781 {
1782 /* Leave it up to the processor backend. */
1783 }
1784
1785 if (isym->st_shndx == SHN_UNDEF)
1786 sec = bfd_und_section_ptr;
1787 else if (isym->st_shndx < SHN_LORESERVE || isym->st_shndx > SHN_HIRESERVE)
1788 {
1789 sec = section_from_elf_index (abfd, isym->st_shndx);
1790 if (sec == NULL)
1791 sec = bfd_abs_section_ptr;
1792 else if ((abfd->flags & (EXEC_P | DYNAMIC)) != 0)
1793 value -= sec->vma;
1794 }
1795 else if (isym->st_shndx == SHN_ABS)
1796 sec = bfd_abs_section_ptr;
1797 else if (isym->st_shndx == SHN_COMMON)
1798 {
1799 sec = bfd_com_section_ptr;
1800 /* What ELF calls the size we call the value. What ELF
1801 calls the value we call the alignment. */
1802 value = isym->st_size;
1803 }
1804 else
1805 {
1806 /* Leave it up to the processor backend. */
1807 }
1808
1809 name = bfd_elf_string_from_elf_section (abfd, hdr->sh_link,
1810 isym->st_name);
1811 if (name == (const char *) NULL)
1812 goto error_free_vers;
1813
1814 if (isym->st_shndx == SHN_COMMON
1815 && ELF_ST_TYPE (isym->st_info) == STT_TLS)
1816 {
1817 asection *tcomm = bfd_get_section_by_name (abfd, ".tcommon");
1818
1819 if (tcomm == NULL)
1820 {
1821 tcomm = bfd_make_section (abfd, ".tcommon");
1822 if (tcomm == NULL
1823 || !bfd_set_section_flags (abfd, tcomm, (SEC_ALLOC
1824 | SEC_IS_COMMON
1825 | SEC_LINKER_CREATED
1826 | SEC_THREAD_LOCAL)))
1827 goto error_free_vers;
1828 }
1829 sec = tcomm;
1830 }
1831 else if (add_symbol_hook)
1832 {
1833 if (! (*add_symbol_hook) (abfd, info, isym, &name, &flags, &sec,
1834 &value))
1835 goto error_free_vers;
1836
1837 /* The hook function sets the name to NULL if this symbol
1838 should be skipped for some reason. */
1839 if (name == (const char *) NULL)
1840 continue;
1841 }
1842
1843 /* Sanity check that all possibilities were handled. */
1844 if (sec == (asection *) NULL)
1845 {
1846 bfd_set_error (bfd_error_bad_value);
1847 goto error_free_vers;
1848 }
1849
1850 if (bfd_is_und_section (sec)
1851 || bfd_is_com_section (sec))
1852 definition = FALSE;
1853 else
1854 definition = TRUE;
1855
1856 size_change_ok = FALSE;
1857 type_change_ok = get_elf_backend_data (abfd)->type_change_ok;
1858 old_alignment = 0;
1859 old_bfd = NULL;
1860
1861 if (info->hash->creator->flavour == bfd_target_elf_flavour)
1862 {
1863 Elf_Internal_Versym iver;
1864 unsigned int vernum = 0;
1865 bfd_boolean skip;
1866
1867 if (ever != NULL)
1868 {
1869 _bfd_elf_swap_versym_in (abfd, ever, &iver);
1870 vernum = iver.vs_vers & VERSYM_VERSION;
1871
1872 /* If this is a hidden symbol, or if it is not version
1873 1, we append the version name to the symbol name.
1874 However, we do not modify a non-hidden absolute
1875 symbol, because it might be the version symbol
1876 itself. FIXME: What if it isn't? */
1877 if ((iver.vs_vers & VERSYM_HIDDEN) != 0
1878 || (vernum > 1 && ! bfd_is_abs_section (sec)))
1879 {
1880 const char *verstr;
1881 size_t namelen, verlen, newlen;
1882 char *newname, *p;
1883
1884 if (isym->st_shndx != SHN_UNDEF)
1885 {
1886 if (vernum > elf_tdata (abfd)->dynverdef_hdr.sh_info)
1887 {
1888 (*_bfd_error_handler)
1889 (_("%s: %s: invalid version %u (max %d)"),
1890 bfd_archive_filename (abfd), name, vernum,
1891 elf_tdata (abfd)->dynverdef_hdr.sh_info);
1892 bfd_set_error (bfd_error_bad_value);
1893 goto error_free_vers;
1894 }
1895 else if (vernum > 1)
1896 verstr =
1897 elf_tdata (abfd)->verdef[vernum - 1].vd_nodename;
1898 else
1899 verstr = "";
1900 }
1901 else
1902 {
1903 /* We cannot simply test for the number of
1904 entries in the VERNEED section since the
1905 numbers for the needed versions do not start
1906 at 0. */
1907 Elf_Internal_Verneed *t;
1908
1909 verstr = NULL;
1910 for (t = elf_tdata (abfd)->verref;
1911 t != NULL;
1912 t = t->vn_nextref)
1913 {
1914 Elf_Internal_Vernaux *a;
1915
1916 for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr)
1917 {
1918 if (a->vna_other == vernum)
1919 {
1920 verstr = a->vna_nodename;
1921 break;
1922 }
1923 }
1924 if (a != NULL)
1925 break;
1926 }
1927 if (verstr == NULL)
1928 {
1929 (*_bfd_error_handler)
1930 (_("%s: %s: invalid needed version %d"),
1931 bfd_archive_filename (abfd), name, vernum);
1932 bfd_set_error (bfd_error_bad_value);
1933 goto error_free_vers;
1934 }
1935 }
1936
1937 namelen = strlen (name);
1938 verlen = strlen (verstr);
1939 newlen = namelen + verlen + 2;
1940 if ((iver.vs_vers & VERSYM_HIDDEN) == 0
1941 && isym->st_shndx != SHN_UNDEF)
1942 ++newlen;
1943
1944 newname = (char *) bfd_alloc (abfd, (bfd_size_type) newlen);
1945 if (newname == NULL)
1946 goto error_free_vers;
1947 memcpy (newname, name, namelen);
1948 p = newname + namelen;
1949 *p++ = ELF_VER_CHR;
1950 /* If this is a defined non-hidden version symbol,
1951 we add another @ to the name. This indicates the
1952 default version of the symbol. */
1953 if ((iver.vs_vers & VERSYM_HIDDEN) == 0
1954 && isym->st_shndx != SHN_UNDEF)
1955 *p++ = ELF_VER_CHR;
1956 memcpy (p, verstr, verlen + 1);
1957
1958 name = newname;
1959 }
1960 }
1961
1962 if (! elf_merge_symbol (abfd, info, name, isym, &sec, &value,
1963 sym_hash, &skip, &override,
1964 &type_change_ok, &size_change_ok,
1965 dt_needed))
1966 goto error_free_vers;
1967
1968 if (skip)
1969 continue;
1970
1971 if (override)
1972 definition = FALSE;
1973
1974 h = *sym_hash;
1975 while (h->root.type == bfd_link_hash_indirect
1976 || h->root.type == bfd_link_hash_warning)
1977 h = (struct elf_link_hash_entry *) h->root.u.i.link;
1978
1979 /* Remember the old alignment if this is a common symbol, so
1980 that we don't reduce the alignment later on. We can't
1981 check later, because _bfd_generic_link_add_one_symbol
1982 will set a default for the alignment which we want to
1983 override. We also remember the old bfd where the existing
1984 definition comes from. */
1985 switch (h->root.type)
1986 {
1987 default:
1988 break;
1989
1990 case bfd_link_hash_defined:
1991 case bfd_link_hash_defweak:
1992 old_bfd = h->root.u.def.section->owner;
1993 break;
1994
1995 case bfd_link_hash_common:
1996 old_bfd = h->root.u.c.p->section->owner;
1997 old_alignment = h->root.u.c.p->alignment_power;
1998 break;
1999 }
2000
2001 if (elf_tdata (abfd)->verdef != NULL
2002 && ! override
2003 && vernum > 1
2004 && definition)
2005 h->verinfo.verdef = &elf_tdata (abfd)->verdef[vernum - 1];
2006 }
2007
2008 if (! (_bfd_generic_link_add_one_symbol
2009 (info, abfd, name, flags, sec, value, (const char *) NULL,
2010 FALSE, collect, (struct bfd_link_hash_entry **) sym_hash)))
2011 goto error_free_vers;
2012
2013 h = *sym_hash;
2014 while (h->root.type == bfd_link_hash_indirect
2015 || h->root.type == bfd_link_hash_warning)
2016 h = (struct elf_link_hash_entry *) h->root.u.i.link;
2017 *sym_hash = h;
2018
2019 new_weakdef = FALSE;
2020 if (dynamic
2021 && definition
2022 && (flags & BSF_WEAK) != 0
2023 && ELF_ST_TYPE (isym->st_info) != STT_FUNC
2024 && info->hash->creator->flavour == bfd_target_elf_flavour
2025 && h->weakdef == NULL)
2026 {
2027 /* Keep a list of all weak defined non function symbols from
2028 a dynamic object, using the weakdef field. Later in this
2029 function we will set the weakdef field to the correct
2030 value. We only put non-function symbols from dynamic
2031 objects on this list, because that happens to be the only
2032 time we need to know the normal symbol corresponding to a
2033 weak symbol, and the information is time consuming to
2034 figure out. If the weakdef field is not already NULL,
2035 then this symbol was already defined by some previous
2036 dynamic object, and we will be using that previous
2037 definition anyhow. */
2038
2039 h->weakdef = weaks;
2040 weaks = h;
2041 new_weakdef = TRUE;
2042 }
2043
2044 /* Set the alignment of a common symbol. */
2045 if (isym->st_shndx == SHN_COMMON
2046 && h->root.type == bfd_link_hash_common)
2047 {
2048 unsigned int align;
2049
2050 align = bfd_log2 (isym->st_value);
2051 if (align > old_alignment
2052 /* Permit an alignment power of zero if an alignment of one
2053 is specified and no other alignments have been specified. */
2054 || (isym->st_value == 1 && old_alignment == 0))
2055 h->root.u.c.p->alignment_power = align;
2056 else
2057 h->root.u.c.p->alignment_power = old_alignment;
2058 }
2059
2060 if (info->hash->creator->flavour == bfd_target_elf_flavour)
2061 {
2062 int old_flags;
2063 bfd_boolean dynsym;
2064 int new_flag;
2065
2066 /* Check the alignment when a common symbol is involved. This
2067 can change when a common symbol is overriden by a normal
2068 definition or a common symbol is ignored due to the old
2069 normal definition. We need to make sure the maximum
2070 alignment is maintained. */
2071 if ((old_alignment || isym->st_shndx == SHN_COMMON)
2072 && h->root.type != bfd_link_hash_common)
2073 {
2074 unsigned int common_align;
2075 unsigned int normal_align;
2076 unsigned int symbol_align;
2077 bfd *normal_bfd;
2078 bfd *common_bfd;
2079
2080 symbol_align = ffs (h->root.u.def.value) - 1;
2081 if ((h->root.u.def.section->owner->flags & DYNAMIC) == 0)
2082 {
2083 normal_align = h->root.u.def.section->alignment_power;
2084 if (normal_align > symbol_align)
2085 normal_align = symbol_align;
2086 }
2087 else
2088 normal_align = symbol_align;
2089
2090 if (old_alignment)
2091 {
2092 common_align = old_alignment;
2093 common_bfd = old_bfd;
2094 normal_bfd = abfd;
2095 }
2096 else
2097 {
2098 common_align = bfd_log2 (isym->st_value);
2099 common_bfd = abfd;
2100 normal_bfd = old_bfd;
2101 }
2102
2103 if (normal_align < common_align)
2104 (*_bfd_error_handler)
2105 (_("Warning: alignment %u of symbol `%s' in %s is smaller than %u in %s"),
2106 1 << normal_align,
2107 name,
2108 bfd_archive_filename (normal_bfd),
2109 1 << common_align,
2110 bfd_archive_filename (common_bfd));
2111 }
2112
2113 /* Remember the symbol size and type. */
2114 if (isym->st_size != 0
2115 && (definition || h->size == 0))
2116 {
2117 if (h->size != 0 && h->size != isym->st_size && ! size_change_ok)
2118 (*_bfd_error_handler)
2119 (_("Warning: size of symbol `%s' changed from %lu in %s to %lu in %s"),
2120 name, (unsigned long) h->size,
2121 bfd_archive_filename (old_bfd),
2122 (unsigned long) isym->st_size,
2123 bfd_archive_filename (abfd));
2124
2125 h->size = isym->st_size;
2126 }
2127
2128 /* If this is a common symbol, then we always want H->SIZE
2129 to be the size of the common symbol. The code just above
2130 won't fix the size if a common symbol becomes larger. We
2131 don't warn about a size change here, because that is
2132 covered by --warn-common. */
2133 if (h->root.type == bfd_link_hash_common)
2134 h->size = h->root.u.c.size;
2135
2136 if (ELF_ST_TYPE (isym->st_info) != STT_NOTYPE
2137 && (definition || h->type == STT_NOTYPE))
2138 {
2139 if (h->type != STT_NOTYPE
2140 && h->type != ELF_ST_TYPE (isym->st_info)
2141 && ! type_change_ok)
2142 (*_bfd_error_handler)
2143 (_("Warning: type of symbol `%s' changed from %d to %d in %s"),
2144 name, h->type, ELF_ST_TYPE (isym->st_info),
2145 bfd_archive_filename (abfd));
2146
2147 h->type = ELF_ST_TYPE (isym->st_info);
2148 }
2149
2150 /* If st_other has a processor-specific meaning, specific
2151 code might be needed here. We never merge the visibility
2152 attribute with the one from a dynamic object. */
2153 if (isym->st_other != 0 && !dynamic)
2154 {
2155 unsigned char hvis, symvis, other, nvis;
2156
2157 /* Take the balance of OTHER from the definition. */
2158 other = (definition ? isym->st_other : h->other);
2159 other &= ~ ELF_ST_VISIBILITY (-1);
2160
2161 /* Combine visibilities, using the most constraining one. */
2162 hvis = ELF_ST_VISIBILITY (h->other);
2163 symvis = ELF_ST_VISIBILITY (isym->st_other);
2164 if (! hvis)
2165 nvis = symvis;
2166 else if (! symvis)
2167 nvis = hvis;
2168 else
2169 nvis = hvis < symvis ? hvis : symvis;
2170
2171 h->other = other | nvis;
2172 }
2173
2174 /* Set a flag in the hash table entry indicating the type of
2175 reference or definition we just found. Keep a count of
2176 the number of dynamic symbols we find. A dynamic symbol
2177 is one which is referenced or defined by both a regular
2178 object and a shared object. */
2179 old_flags = h->elf_link_hash_flags;
2180 dynsym = FALSE;
2181 if (! dynamic)
2182 {
2183 if (! definition)
2184 {
2185 new_flag = ELF_LINK_HASH_REF_REGULAR;
2186 if (bind != STB_WEAK)
2187 new_flag |= ELF_LINK_HASH_REF_REGULAR_NONWEAK;
2188 }
2189 else
2190 new_flag = ELF_LINK_HASH_DEF_REGULAR;
2191 if (info->shared
2192 || (old_flags & (ELF_LINK_HASH_DEF_DYNAMIC
2193 | ELF_LINK_HASH_REF_DYNAMIC)) != 0)
2194 dynsym = TRUE;
2195 }
2196 else
2197 {
2198 if (! definition)
2199 new_flag = ELF_LINK_HASH_REF_DYNAMIC;
2200 else
2201 new_flag = ELF_LINK_HASH_DEF_DYNAMIC;
2202 if ((old_flags & (ELF_LINK_HASH_DEF_REGULAR
2203 | ELF_LINK_HASH_REF_REGULAR)) != 0
2204 || (h->weakdef != NULL
2205 && ! new_weakdef
2206 && h->weakdef->dynindx != -1))
2207 dynsym = TRUE;
2208 }
2209
2210 h->elf_link_hash_flags |= new_flag;
2211
2212 /* Check to see if we need to add an indirect symbol for
2213 the default name. */
2214 if (definition || h->root.type == bfd_link_hash_common)
2215 if (! elf_add_default_symbol (abfd, info, h, name, isym,
2216 &sec, &value, &dynsym,
2217 override, dt_needed))
2218 goto error_free_vers;
2219
2220 if (definition && !dynamic)
2221 {
2222 char *p = strchr (name, ELF_VER_CHR);
2223 if (p != NULL && p[1] != ELF_VER_CHR)
2224 {
2225 /* Queue non-default versions so that .symver x, x@FOO
2226 aliases can be checked. */
2227 if (! nondeflt_vers)
2228 {
2229 amt = (isymend - isym + 1)
2230 * sizeof (struct elf_link_hash_entry *);
2231 nondeflt_vers = bfd_malloc (amt);
2232 }
2233 nondeflt_vers [nondeflt_vers_cnt++] = h;
2234 }
2235 }
2236
2237 if (dynsym && h->dynindx == -1)
2238 {
2239 if (! _bfd_elf_link_record_dynamic_symbol (info, h))
2240 goto error_free_vers;
2241 if (h->weakdef != NULL
2242 && ! new_weakdef
2243 && h->weakdef->dynindx == -1)
2244 {
2245 if (! _bfd_elf_link_record_dynamic_symbol (info, h->weakdef))
2246 goto error_free_vers;
2247 }
2248 }
2249 else if (dynsym && h->dynindx != -1)
2250 /* If the symbol already has a dynamic index, but
2251 visibility says it should not be visible, turn it into
2252 a local symbol. */
2253 switch (ELF_ST_VISIBILITY (h->other))
2254 {
2255 case STV_INTERNAL:
2256 case STV_HIDDEN:
2257 (*bed->elf_backend_hide_symbol) (info, h, TRUE);
2258 break;
2259 }
2260
2261 if (dt_needed && definition
2262 && (h->elf_link_hash_flags
2263 & ELF_LINK_HASH_REF_REGULAR) != 0)
2264 {
2265 bfd_size_type oldsize;
2266 bfd_size_type strindex;
2267
2268 if (! is_elf_hash_table (info))
2269 goto error_free_vers;
2270
2271 /* The symbol from a DT_NEEDED object is referenced from
2272 the regular object to create a dynamic executable. We
2273 have to make sure there is a DT_NEEDED entry for it. */
2274
2275 dt_needed = FALSE;
2276 oldsize = _bfd_elf_strtab_size (hash_table->dynstr);
2277 strindex = _bfd_elf_strtab_add (hash_table->dynstr,
2278 elf_dt_soname (abfd), FALSE);
2279 if (strindex == (bfd_size_type) -1)
2280 goto error_free_vers;
2281
2282 if (oldsize == _bfd_elf_strtab_size (hash_table->dynstr))
2283 {
2284 asection *sdyn;
2285 Elf_External_Dyn *dyncon, *dynconend;
2286
2287 sdyn = bfd_get_section_by_name (hash_table->dynobj,
2288 ".dynamic");
2289 BFD_ASSERT (sdyn != NULL);
2290
2291 dyncon = (Elf_External_Dyn *) sdyn->contents;
2292 dynconend = (Elf_External_Dyn *) (sdyn->contents +
2293 sdyn->_raw_size);
2294 for (; dyncon < dynconend; dyncon++)
2295 {
2296 Elf_Internal_Dyn dyn;
2297
2298 elf_swap_dyn_in (hash_table->dynobj,
2299 dyncon, &dyn);
2300 BFD_ASSERT (dyn.d_tag != DT_NEEDED ||
2301 dyn.d_un.d_val != strindex);
2302 }
2303 }
2304
2305 if (! elf_add_dynamic_entry (info, (bfd_vma) DT_NEEDED, strindex))
2306 goto error_free_vers;
2307 }
2308 }
2309 }
2310
2311 /* Now that all the symbols from this input file are created, handle
2312 .symver foo, foo@BAR such that any relocs against foo become foo@BAR. */
2313 if (nondeflt_vers != NULL)
2314 {
2315 bfd_size_type cnt, symidx;
2316
2317 for (cnt = 0; cnt < nondeflt_vers_cnt; ++cnt)
2318 {
2319 struct elf_link_hash_entry *h = nondeflt_vers[cnt], *hi;
2320 char *shortname, *p;
2321
2322 p = strchr (h->root.root.string, ELF_VER_CHR);
2323 if (p == NULL
2324 || (h->root.type != bfd_link_hash_defined
2325 && h->root.type != bfd_link_hash_defweak))
2326 continue;
2327
2328 amt = p - h->root.root.string;
2329 shortname = bfd_malloc (amt + 1);
2330 memcpy (shortname, h->root.root.string, amt);
2331 shortname[amt] = '\0';
2332
2333 hi = (struct elf_link_hash_entry *)
2334 bfd_link_hash_lookup (info->hash, shortname,
2335 FALSE, FALSE, FALSE);
2336 if (hi != NULL
2337 && hi->root.type == h->root.type
2338 && hi->root.u.def.value == h->root.u.def.value
2339 && hi->root.u.def.section == h->root.u.def.section)
2340 {
2341 (*bed->elf_backend_hide_symbol) (info, hi, TRUE);
2342 hi->root.type = bfd_link_hash_indirect;
2343 hi->root.u.i.link = (struct bfd_link_hash_entry *) h;
2344 (*bed->elf_backend_copy_indirect_symbol) (bed, h, hi);
2345 sym_hash = elf_sym_hashes (abfd);
2346 if (sym_hash)
2347 for (symidx = 0; symidx < extsymcount; ++symidx)
2348 if (sym_hash[symidx] == hi)
2349 {
2350 sym_hash[symidx] = h;
2351 break;
2352 }
2353 }
2354 free (shortname);
2355 }
2356 free (nondeflt_vers);
2357 nondeflt_vers = NULL;
2358 }
2359
2360 if (extversym != NULL)
2361 {
2362 free (extversym);
2363 extversym = NULL;
2364 }
2365
2366 if (isymbuf != NULL)
2367 free (isymbuf);
2368 isymbuf = NULL;
2369
2370 /* Now set the weakdefs field correctly for all the weak defined
2371 symbols we found. The only way to do this is to search all the
2372 symbols. Since we only need the information for non functions in
2373 dynamic objects, that's the only time we actually put anything on
2374 the list WEAKS. We need this information so that if a regular
2375 object refers to a symbol defined weakly in a dynamic object, the
2376 real symbol in the dynamic object is also put in the dynamic
2377 symbols; we also must arrange for both symbols to point to the
2378 same memory location. We could handle the general case of symbol
2379 aliasing, but a general symbol alias can only be generated in
2380 assembler code, handling it correctly would be very time
2381 consuming, and other ELF linkers don't handle general aliasing
2382 either. */
2383 while (weaks != NULL)
2384 {
2385 struct elf_link_hash_entry *hlook;
2386 asection *slook;
2387 bfd_vma vlook;
2388 struct elf_link_hash_entry **hpp;
2389 struct elf_link_hash_entry **hppend;
2390
2391 hlook = weaks;
2392 weaks = hlook->weakdef;
2393 hlook->weakdef = NULL;
2394
2395 BFD_ASSERT (hlook->root.type == bfd_link_hash_defined
2396 || hlook->root.type == bfd_link_hash_defweak
2397 || hlook->root.type == bfd_link_hash_common
2398 || hlook->root.type == bfd_link_hash_indirect);
2399 slook = hlook->root.u.def.section;
2400 vlook = hlook->root.u.def.value;
2401
2402 hpp = elf_sym_hashes (abfd);
2403 hppend = hpp + extsymcount;
2404 for (; hpp < hppend; hpp++)
2405 {
2406 struct elf_link_hash_entry *h;
2407
2408 h = *hpp;
2409 if (h != NULL && h != hlook
2410 && h->root.type == bfd_link_hash_defined
2411 && h->root.u.def.section == slook
2412 && h->root.u.def.value == vlook)
2413 {
2414 hlook->weakdef = h;
2415
2416 /* If the weak definition is in the list of dynamic
2417 symbols, make sure the real definition is put there
2418 as well. */
2419 if (hlook->dynindx != -1
2420 && h->dynindx == -1)
2421 {
2422 if (! _bfd_elf_link_record_dynamic_symbol (info, h))
2423 goto error_return;
2424 }
2425
2426 /* If the real definition is in the list of dynamic
2427 symbols, make sure the weak definition is put there
2428 as well. If we don't do this, then the dynamic
2429 loader might not merge the entries for the real
2430 definition and the weak definition. */
2431 if (h->dynindx != -1
2432 && hlook->dynindx == -1)
2433 {
2434 if (! _bfd_elf_link_record_dynamic_symbol (info, hlook))
2435 goto error_return;
2436 }
2437 break;
2438 }
2439 }
2440 }
2441
2442 /* If this object is the same format as the output object, and it is
2443 not a shared library, then let the backend look through the
2444 relocs.
2445
2446 This is required to build global offset table entries and to
2447 arrange for dynamic relocs. It is not required for the
2448 particular common case of linking non PIC code, even when linking
2449 against shared libraries, but unfortunately there is no way of
2450 knowing whether an object file has been compiled PIC or not.
2451 Looking through the relocs is not particularly time consuming.
2452 The problem is that we must either (1) keep the relocs in memory,
2453 which causes the linker to require additional runtime memory or
2454 (2) read the relocs twice from the input file, which wastes time.
2455 This would be a good case for using mmap.
2456
2457 I have no idea how to handle linking PIC code into a file of a
2458 different format. It probably can't be done. */
2459 check_relocs = get_elf_backend_data (abfd)->check_relocs;
2460 if (! dynamic
2461 && abfd->xvec == info->hash->creator
2462 && check_relocs != NULL)
2463 {
2464 asection *o;
2465
2466 for (o = abfd->sections; o != NULL; o = o->next)
2467 {
2468 Elf_Internal_Rela *internal_relocs;
2469 bfd_boolean ok;
2470
2471 if ((o->flags & SEC_RELOC) == 0
2472 || o->reloc_count == 0
2473 || ((info->strip == strip_all || info->strip == strip_debugger)
2474 && (o->flags & SEC_DEBUGGING) != 0)
2475 || bfd_is_abs_section (o->output_section))
2476 continue;
2477
2478 internal_relocs = (NAME(_bfd_elf,link_read_relocs)
2479 (abfd, o, (PTR) NULL,
2480 (Elf_Internal_Rela *) NULL,
2481 info->keep_memory));
2482 if (internal_relocs == NULL)
2483 goto error_return;
2484
2485 ok = (*check_relocs) (abfd, info, o, internal_relocs);
2486
2487 if (elf_section_data (o)->relocs != internal_relocs)
2488 free (internal_relocs);
2489
2490 if (! ok)
2491 goto error_return;
2492 }
2493 }
2494
2495 /* If this is a non-traditional link, try to optimize the handling
2496 of the .stab/.stabstr sections. */
2497 if (! dynamic
2498 && ! info->traditional_format
2499 && info->hash->creator->flavour == bfd_target_elf_flavour
2500 && is_elf_hash_table (info)
2501 && (info->strip != strip_all && info->strip != strip_debugger))
2502 {
2503 asection *stab, *stabstr;
2504
2505 stab = bfd_get_section_by_name (abfd, ".stab");
2506 if (stab != NULL
2507 && (stab->flags & SEC_MERGE) == 0
2508 && !bfd_is_abs_section (stab->output_section))
2509 {
2510 stabstr = bfd_get_section_by_name (abfd, ".stabstr");
2511
2512 if (stabstr != NULL)
2513 {
2514 struct bfd_elf_section_data *secdata;
2515
2516 secdata = elf_section_data (stab);
2517 if (! _bfd_link_section_stabs (abfd,
2518 & hash_table->stab_info,
2519 stab, stabstr,
2520 &secdata->sec_info))
2521 goto error_return;
2522 if (secdata->sec_info)
2523 stab->sec_info_type = ELF_INFO_TYPE_STABS;
2524 }
2525 }
2526 }
2527
2528 if (! info->relocateable && ! dynamic
2529 && is_elf_hash_table (info))
2530 {
2531 asection *s;
2532
2533 for (s = abfd->sections; s != NULL; s = s->next)
2534 if ((s->flags & SEC_MERGE) != 0
2535 && !bfd_is_abs_section (s->output_section))
2536 {
2537 struct bfd_elf_section_data *secdata;
2538
2539 secdata = elf_section_data (s);
2540 if (! _bfd_merge_section (abfd,
2541 & hash_table->merge_info,
2542 s, &secdata->sec_info))
2543 goto error_return;
2544 else if (secdata->sec_info)
2545 s->sec_info_type = ELF_INFO_TYPE_MERGE;
2546 }
2547 }
2548
2549 if (is_elf_hash_table (info))
2550 {
2551 /* Add this bfd to the loaded list. */
2552 struct elf_link_loaded_list *n;
2553
2554 n = ((struct elf_link_loaded_list *)
2555 bfd_alloc (abfd, sizeof (struct elf_link_loaded_list)));
2556 if (n == NULL)
2557 goto error_return;
2558 n->abfd = abfd;
2559 n->next = hash_table->loaded;
2560 hash_table->loaded = n;
2561 }
2562
2563 return TRUE;
2564
2565 error_free_vers:
2566 if (nondeflt_vers != NULL)
2567 free (nondeflt_vers);
2568 if (extversym != NULL)
2569 free (extversym);
2570 error_free_sym:
2571 if (isymbuf != NULL)
2572 free (isymbuf);
2573 error_return:
2574 return FALSE;
2575 }
2576
2577 /* Create some sections which will be filled in with dynamic linking
2578 information. ABFD is an input file which requires dynamic sections
2579 to be created. The dynamic sections take up virtual memory space
2580 when the final executable is run, so we need to create them before
2581 addresses are assigned to the output sections. We work out the
2582 actual contents and size of these sections later. */
2583
2584 bfd_boolean
elf_link_create_dynamic_sections(abfd,info)2585 elf_link_create_dynamic_sections (abfd, info)
2586 bfd *abfd;
2587 struct bfd_link_info *info;
2588 {
2589 flagword flags;
2590 register asection *s;
2591 struct elf_link_hash_entry *h;
2592 struct bfd_link_hash_entry *bh;
2593 struct elf_backend_data *bed;
2594
2595 if (! is_elf_hash_table (info))
2596 return FALSE;
2597
2598 if (elf_hash_table (info)->dynamic_sections_created)
2599 return TRUE;
2600
2601 /* Make sure that all dynamic sections use the same input BFD. */
2602 if (elf_hash_table (info)->dynobj == NULL)
2603 elf_hash_table (info)->dynobj = abfd;
2604 else
2605 abfd = elf_hash_table (info)->dynobj;
2606
2607 /* Note that we set the SEC_IN_MEMORY flag for all of these
2608 sections. */
2609 flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS
2610 | SEC_IN_MEMORY | SEC_LINKER_CREATED);
2611
2612 /* A dynamically linked executable has a .interp section, but a
2613 shared library does not. */
2614 if (! info->shared)
2615 {
2616 s = bfd_make_section (abfd, ".interp");
2617 if (s == NULL
2618 || ! bfd_set_section_flags (abfd, s, flags | SEC_READONLY))
2619 return FALSE;
2620 }
2621
2622 if (! info->traditional_format
2623 && info->hash->creator->flavour == bfd_target_elf_flavour)
2624 {
2625 s = bfd_make_section (abfd, ".eh_frame_hdr");
2626 if (s == NULL
2627 || ! bfd_set_section_flags (abfd, s, flags | SEC_READONLY)
2628 || ! bfd_set_section_alignment (abfd, s, 2))
2629 return FALSE;
2630 elf_hash_table (info)->eh_info.hdr_sec = s;
2631 }
2632
2633 /* Create sections to hold version informations. These are removed
2634 if they are not needed. */
2635 s = bfd_make_section (abfd, ".gnu.version_d");
2636 if (s == NULL
2637 || ! bfd_set_section_flags (abfd, s, flags | SEC_READONLY)
2638 || ! bfd_set_section_alignment (abfd, s, LOG_FILE_ALIGN))
2639 return FALSE;
2640
2641 s = bfd_make_section (abfd, ".gnu.version");
2642 if (s == NULL
2643 || ! bfd_set_section_flags (abfd, s, flags | SEC_READONLY)
2644 || ! bfd_set_section_alignment (abfd, s, 1))
2645 return FALSE;
2646
2647 s = bfd_make_section (abfd, ".gnu.version_r");
2648 if (s == NULL
2649 || ! bfd_set_section_flags (abfd, s, flags | SEC_READONLY)
2650 || ! bfd_set_section_alignment (abfd, s, LOG_FILE_ALIGN))
2651 return FALSE;
2652
2653 s = bfd_make_section (abfd, ".dynsym");
2654 if (s == NULL
2655 || ! bfd_set_section_flags (abfd, s, flags | SEC_READONLY)
2656 || ! bfd_set_section_alignment (abfd, s, LOG_FILE_ALIGN))
2657 return FALSE;
2658
2659 s = bfd_make_section (abfd, ".dynstr");
2660 if (s == NULL
2661 || ! bfd_set_section_flags (abfd, s, flags | SEC_READONLY))
2662 return FALSE;
2663
2664 /* Create a strtab to hold the dynamic symbol names. */
2665 if (elf_hash_table (info)->dynstr == NULL)
2666 {
2667 elf_hash_table (info)->dynstr = _bfd_elf_strtab_init ();
2668 if (elf_hash_table (info)->dynstr == NULL)
2669 return FALSE;
2670 }
2671
2672 s = bfd_make_section (abfd, ".dynamic");
2673 if (s == NULL
2674 || ! bfd_set_section_flags (abfd, s, flags)
2675 || ! bfd_set_section_alignment (abfd, s, LOG_FILE_ALIGN))
2676 return FALSE;
2677
2678 /* The special symbol _DYNAMIC is always set to the start of the
2679 .dynamic section. This call occurs before we have processed the
2680 symbols for any dynamic object, so we don't have to worry about
2681 overriding a dynamic definition. We could set _DYNAMIC in a
2682 linker script, but we only want to define it if we are, in fact,
2683 creating a .dynamic section. We don't want to define it if there
2684 is no .dynamic section, since on some ELF platforms the start up
2685 code examines it to decide how to initialize the process. */
2686 bh = NULL;
2687 if (! (_bfd_generic_link_add_one_symbol
2688 (info, abfd, "_DYNAMIC", BSF_GLOBAL, s, (bfd_vma) 0,
2689 (const char *) 0, FALSE, get_elf_backend_data (abfd)->collect, &bh)))
2690 return FALSE;
2691 h = (struct elf_link_hash_entry *) bh;
2692 h->elf_link_hash_flags |= ELF_LINK_HASH_DEF_REGULAR;
2693 h->type = STT_OBJECT;
2694
2695 if (info->shared
2696 && ! _bfd_elf_link_record_dynamic_symbol (info, h))
2697 return FALSE;
2698
2699 bed = get_elf_backend_data (abfd);
2700
2701 s = bfd_make_section (abfd, ".hash");
2702 if (s == NULL
2703 || ! bfd_set_section_flags (abfd, s, flags | SEC_READONLY)
2704 || ! bfd_set_section_alignment (abfd, s, LOG_FILE_ALIGN))
2705 return FALSE;
2706 elf_section_data (s)->this_hdr.sh_entsize = bed->s->sizeof_hash_entry;
2707
2708 /* Let the backend create the rest of the sections. This lets the
2709 backend set the right flags. The backend will normally create
2710 the .got and .plt sections. */
2711 if (! (*bed->elf_backend_create_dynamic_sections) (abfd, info))
2712 return FALSE;
2713
2714 elf_hash_table (info)->dynamic_sections_created = TRUE;
2715
2716 return TRUE;
2717 }
2718
2719 /* Add an entry to the .dynamic table. */
2720
2721 bfd_boolean
elf_add_dynamic_entry(info,tag,val)2722 elf_add_dynamic_entry (info, tag, val)
2723 struct bfd_link_info *info;
2724 bfd_vma tag;
2725 bfd_vma val;
2726 {
2727 Elf_Internal_Dyn dyn;
2728 bfd *dynobj;
2729 asection *s;
2730 bfd_size_type newsize;
2731 bfd_byte *newcontents;
2732
2733 if (! is_elf_hash_table (info))
2734 return FALSE;
2735
2736 dynobj = elf_hash_table (info)->dynobj;
2737
2738 s = bfd_get_section_by_name (dynobj, ".dynamic");
2739 BFD_ASSERT (s != NULL);
2740
2741 newsize = s->_raw_size + sizeof (Elf_External_Dyn);
2742 newcontents = (bfd_byte *) bfd_realloc (s->contents, newsize);
2743 if (newcontents == NULL)
2744 return FALSE;
2745
2746 dyn.d_tag = tag;
2747 dyn.d_un.d_val = val;
2748 elf_swap_dyn_out (dynobj, &dyn,
2749 (Elf_External_Dyn *) (newcontents + s->_raw_size));
2750
2751 s->_raw_size = newsize;
2752 s->contents = newcontents;
2753
2754 return TRUE;
2755 }
2756
2757 /* Read and swap the relocs from the section indicated by SHDR. This
2758 may be either a REL or a RELA section. The relocations are
2759 translated into RELA relocations and stored in INTERNAL_RELOCS,
2760 which should have already been allocated to contain enough space.
2761 The EXTERNAL_RELOCS are a buffer where the external form of the
2762 relocations should be stored.
2763
2764 Returns FALSE if something goes wrong. */
2765
2766 static bfd_boolean
elf_link_read_relocs_from_section(abfd,shdr,external_relocs,internal_relocs)2767 elf_link_read_relocs_from_section (abfd, shdr, external_relocs,
2768 internal_relocs)
2769 bfd *abfd;
2770 Elf_Internal_Shdr *shdr;
2771 PTR external_relocs;
2772 Elf_Internal_Rela *internal_relocs;
2773 {
2774 struct elf_backend_data *bed;
2775 void (*swap_in) PARAMS ((bfd *, const bfd_byte *, Elf_Internal_Rela *));
2776 const bfd_byte *erela;
2777 const bfd_byte *erelaend;
2778 Elf_Internal_Rela *irela;
2779
2780 /* If there aren't any relocations, that's OK. */
2781 if (!shdr)
2782 return TRUE;
2783
2784 /* Position ourselves at the start of the section. */
2785 if (bfd_seek (abfd, shdr->sh_offset, SEEK_SET) != 0)
2786 return FALSE;
2787
2788 /* Read the relocations. */
2789 if (bfd_bread (external_relocs, shdr->sh_size, abfd) != shdr->sh_size)
2790 return FALSE;
2791
2792 bed = get_elf_backend_data (abfd);
2793
2794 /* Convert the external relocations to the internal format. */
2795 if (shdr->sh_entsize == sizeof (Elf_External_Rel))
2796 swap_in = bed->s->swap_reloc_in;
2797 else if (shdr->sh_entsize == sizeof (Elf_External_Rela))
2798 swap_in = bed->s->swap_reloca_in;
2799 else
2800 {
2801 bfd_set_error (bfd_error_wrong_format);
2802 return FALSE;
2803 }
2804
2805 erela = external_relocs;
2806 erelaend = erela + NUM_SHDR_ENTRIES (shdr) * shdr->sh_entsize;
2807 irela = internal_relocs;
2808 while (erela < erelaend)
2809 {
2810 (*swap_in) (abfd, erela, irela);
2811 irela += bed->s->int_rels_per_ext_rel;
2812 erela += shdr->sh_entsize;
2813 }
2814
2815 return TRUE;
2816 }
2817
2818 /* Read and swap the relocs for a section O. They may have been
2819 cached. If the EXTERNAL_RELOCS and INTERNAL_RELOCS arguments are
2820 not NULL, they are used as buffers to read into. They are known to
2821 be large enough. If the INTERNAL_RELOCS relocs argument is NULL,
2822 the return value is allocated using either malloc or bfd_alloc,
2823 according to the KEEP_MEMORY argument. If O has two relocation
2824 sections (both REL and RELA relocations), then the REL_HDR
2825 relocations will appear first in INTERNAL_RELOCS, followed by the
2826 REL_HDR2 relocations. */
2827
2828 Elf_Internal_Rela *
2829 NAME(_bfd_elf,link_read_relocs) (abfd, o, external_relocs, internal_relocs,
2830 keep_memory)
2831 bfd *abfd;
2832 asection *o;
2833 PTR external_relocs;
2834 Elf_Internal_Rela *internal_relocs;
2835 bfd_boolean keep_memory;
2836 {
2837 Elf_Internal_Shdr *rel_hdr;
2838 PTR alloc1 = NULL;
2839 Elf_Internal_Rela *alloc2 = NULL;
2840 struct elf_backend_data *bed = get_elf_backend_data (abfd);
2841
2842 if (elf_section_data (o)->relocs != NULL)
2843 return elf_section_data (o)->relocs;
2844
2845 if (o->reloc_count == 0)
2846 return NULL;
2847
2848 rel_hdr = &elf_section_data (o)->rel_hdr;
2849
2850 if (internal_relocs == NULL)
2851 {
2852 bfd_size_type size;
2853
2854 size = o->reloc_count;
2855 size *= bed->s->int_rels_per_ext_rel * sizeof (Elf_Internal_Rela);
2856 if (keep_memory)
2857 internal_relocs = (Elf_Internal_Rela *) bfd_alloc (abfd, size);
2858 else
2859 internal_relocs = alloc2 = (Elf_Internal_Rela *) bfd_malloc (size);
2860 if (internal_relocs == NULL)
2861 goto error_return;
2862 }
2863
2864 if (external_relocs == NULL)
2865 {
2866 bfd_size_type size = rel_hdr->sh_size;
2867
2868 if (elf_section_data (o)->rel_hdr2)
2869 size += elf_section_data (o)->rel_hdr2->sh_size;
2870 alloc1 = (PTR) bfd_malloc (size);
2871 if (alloc1 == NULL)
2872 goto error_return;
2873 external_relocs = alloc1;
2874 }
2875
2876 if (!elf_link_read_relocs_from_section (abfd, rel_hdr,
2877 external_relocs,
2878 internal_relocs))
2879 goto error_return;
2880 if (!elf_link_read_relocs_from_section
2881 (abfd,
2882 elf_section_data (o)->rel_hdr2,
2883 ((bfd_byte *) external_relocs) + rel_hdr->sh_size,
2884 internal_relocs + (NUM_SHDR_ENTRIES (rel_hdr)
2885 * bed->s->int_rels_per_ext_rel)))
2886 goto error_return;
2887
2888 /* Cache the results for next time, if we can. */
2889 if (keep_memory)
2890 elf_section_data (o)->relocs = internal_relocs;
2891
2892 if (alloc1 != NULL)
2893 free (alloc1);
2894
2895 /* Don't free alloc2, since if it was allocated we are passing it
2896 back (under the name of internal_relocs). */
2897
2898 return internal_relocs;
2899
2900 error_return:
2901 if (alloc1 != NULL)
2902 free (alloc1);
2903 if (alloc2 != NULL)
2904 free (alloc2);
2905 return NULL;
2906 }
2907
2908 /* Record an assignment to a symbol made by a linker script. We need
2909 this in case some dynamic object refers to this symbol. */
2910
2911 bfd_boolean
2912 NAME(bfd_elf,record_link_assignment) (output_bfd, info, name, provide)
2913 bfd *output_bfd ATTRIBUTE_UNUSED;
2914 struct bfd_link_info *info;
2915 const char *name;
2916 bfd_boolean provide;
2917 {
2918 struct elf_link_hash_entry *h;
2919
2920 if (info->hash->creator->flavour != bfd_target_elf_flavour)
2921 return TRUE;
2922
2923 h = elf_link_hash_lookup (elf_hash_table (info), name, TRUE, TRUE, FALSE);
2924 if (h == NULL)
2925 return FALSE;
2926
2927 if (h->root.type == bfd_link_hash_new)
2928 h->elf_link_hash_flags &= ~ELF_LINK_NON_ELF;
2929
2930 /* If this symbol is being provided by the linker script, and it is
2931 currently defined by a dynamic object, but not by a regular
2932 object, then mark it as undefined so that the generic linker will
2933 force the correct value. */
2934 if (provide
2935 && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) != 0
2936 && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0)
2937 h->root.type = bfd_link_hash_undefined;
2938
2939 /* If this symbol is not being provided by the linker script, and it is
2940 currently defined by a dynamic object, but not by a regular object,
2941 then clear out any version information because the symbol will not be
2942 associated with the dynamic object any more. */
2943 if (!provide
2944 && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) != 0
2945 && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0)
2946 h->verinfo.verdef = NULL;
2947
2948 h->elf_link_hash_flags |= ELF_LINK_HASH_DEF_REGULAR;
2949
2950 if (((h->elf_link_hash_flags & (ELF_LINK_HASH_DEF_DYNAMIC
2951 | ELF_LINK_HASH_REF_DYNAMIC)) != 0
2952 || info->shared)
2953 && h->dynindx == -1)
2954 {
2955 if (! _bfd_elf_link_record_dynamic_symbol (info, h))
2956 return FALSE;
2957
2958 /* If this is a weak defined symbol, and we know a corresponding
2959 real symbol from the same dynamic object, make sure the real
2960 symbol is also made into a dynamic symbol. */
2961 if (h->weakdef != NULL
2962 && h->weakdef->dynindx == -1)
2963 {
2964 if (! _bfd_elf_link_record_dynamic_symbol (info, h->weakdef))
2965 return FALSE;
2966 }
2967 }
2968
2969 return TRUE;
2970 }
2971
2972 /* This structure is used to pass information to
2973 elf_link_assign_sym_version. */
2974
2975 struct elf_assign_sym_version_info
2976 {
2977 /* Output BFD. */
2978 bfd *output_bfd;
2979 /* General link information. */
2980 struct bfd_link_info *info;
2981 /* Version tree. */
2982 struct bfd_elf_version_tree *verdefs;
2983 /* Whether we had a failure. */
2984 bfd_boolean failed;
2985 };
2986
2987 /* This structure is used to pass information to
2988 elf_link_find_version_dependencies. */
2989
2990 struct elf_find_verdep_info
2991 {
2992 /* Output BFD. */
2993 bfd *output_bfd;
2994 /* General link information. */
2995 struct bfd_link_info *info;
2996 /* The number of dependencies. */
2997 unsigned int vers;
2998 /* Whether we had a failure. */
2999 bfd_boolean failed;
3000 };
3001
3002 /* Array used to determine the number of hash table buckets to use
3003 based on the number of symbols there are. If there are fewer than
3004 3 symbols we use 1 bucket, fewer than 17 symbols we use 3 buckets,
3005 fewer than 37 we use 17 buckets, and so forth. We never use more
3006 than 32771 buckets. */
3007
3008 static const size_t elf_buckets[] =
3009 {
3010 1, 3, 17, 37, 67, 97, 131, 197, 263, 521, 1031, 2053, 4099, 8209,
3011 16411, 32771, 0
3012 };
3013
3014 /* Compute bucket count for hashing table. We do not use a static set
3015 of possible tables sizes anymore. Instead we determine for all
3016 possible reasonable sizes of the table the outcome (i.e., the
3017 number of collisions etc) and choose the best solution. The
3018 weighting functions are not too simple to allow the table to grow
3019 without bounds. Instead one of the weighting factors is the size.
3020 Therefore the result is always a good payoff between few collisions
3021 (= short chain lengths) and table size. */
3022 static size_t
compute_bucket_count(info)3023 compute_bucket_count (info)
3024 struct bfd_link_info *info;
3025 {
3026 size_t dynsymcount = elf_hash_table (info)->dynsymcount;
3027 size_t best_size = 0;
3028 unsigned long int *hashcodes;
3029 unsigned long int *hashcodesp;
3030 unsigned long int i;
3031 bfd_size_type amt;
3032
3033 /* Compute the hash values for all exported symbols. At the same
3034 time store the values in an array so that we could use them for
3035 optimizations. */
3036 amt = dynsymcount;
3037 amt *= sizeof (unsigned long int);
3038 hashcodes = (unsigned long int *) bfd_malloc (amt);
3039 if (hashcodes == NULL)
3040 return 0;
3041 hashcodesp = hashcodes;
3042
3043 /* Put all hash values in HASHCODES. */
3044 elf_link_hash_traverse (elf_hash_table (info),
3045 elf_collect_hash_codes, &hashcodesp);
3046
3047 /* We have a problem here. The following code to optimize the table
3048 size requires an integer type with more the 32 bits. If
3049 BFD_HOST_U_64_BIT is set we know about such a type. */
3050 #ifdef BFD_HOST_U_64_BIT
3051 if (info->optimize)
3052 {
3053 unsigned long int nsyms = hashcodesp - hashcodes;
3054 size_t minsize;
3055 size_t maxsize;
3056 BFD_HOST_U_64_BIT best_chlen = ~((BFD_HOST_U_64_BIT) 0);
3057 unsigned long int *counts ;
3058
3059 /* Possible optimization parameters: if we have NSYMS symbols we say
3060 that the hashing table must at least have NSYMS/4 and at most
3061 2*NSYMS buckets. */
3062 minsize = nsyms / 4;
3063 if (minsize == 0)
3064 minsize = 1;
3065 best_size = maxsize = nsyms * 2;
3066
3067 /* Create array where we count the collisions in. We must use bfd_malloc
3068 since the size could be large. */
3069 amt = maxsize;
3070 amt *= sizeof (unsigned long int);
3071 counts = (unsigned long int *) bfd_malloc (amt);
3072 if (counts == NULL)
3073 {
3074 free (hashcodes);
3075 return 0;
3076 }
3077
3078 /* Compute the "optimal" size for the hash table. The criteria is a
3079 minimal chain length. The minor criteria is (of course) the size
3080 of the table. */
3081 for (i = minsize; i < maxsize; ++i)
3082 {
3083 /* Walk through the array of hashcodes and count the collisions. */
3084 BFD_HOST_U_64_BIT max;
3085 unsigned long int j;
3086 unsigned long int fact;
3087
3088 memset (counts, '\0', i * sizeof (unsigned long int));
3089
3090 /* Determine how often each hash bucket is used. */
3091 for (j = 0; j < nsyms; ++j)
3092 ++counts[hashcodes[j] % i];
3093
3094 /* For the weight function we need some information about the
3095 pagesize on the target. This is information need not be 100%
3096 accurate. Since this information is not available (so far) we
3097 define it here to a reasonable default value. If it is crucial
3098 to have a better value some day simply define this value. */
3099 # ifndef BFD_TARGET_PAGESIZE
3100 # define BFD_TARGET_PAGESIZE (4096)
3101 # endif
3102
3103 /* We in any case need 2 + NSYMS entries for the size values and
3104 the chains. */
3105 max = (2 + nsyms) * (ARCH_SIZE / 8);
3106
3107 # if 1
3108 /* Variant 1: optimize for short chains. We add the squares
3109 of all the chain lengths (which favous many small chain
3110 over a few long chains). */
3111 for (j = 0; j < i; ++j)
3112 max += counts[j] * counts[j];
3113
3114 /* This adds penalties for the overall size of the table. */
3115 fact = i / (BFD_TARGET_PAGESIZE / (ARCH_SIZE / 8)) + 1;
3116 max *= fact * fact;
3117 # else
3118 /* Variant 2: Optimize a lot more for small table. Here we
3119 also add squares of the size but we also add penalties for
3120 empty slots (the +1 term). */
3121 for (j = 0; j < i; ++j)
3122 max += (1 + counts[j]) * (1 + counts[j]);
3123
3124 /* The overall size of the table is considered, but not as
3125 strong as in variant 1, where it is squared. */
3126 fact = i / (BFD_TARGET_PAGESIZE / (ARCH_SIZE / 8)) + 1;
3127 max *= fact;
3128 # endif
3129
3130 /* Compare with current best results. */
3131 if (max < best_chlen)
3132 {
3133 best_chlen = max;
3134 best_size = i;
3135 }
3136 }
3137
3138 free (counts);
3139 }
3140 else
3141 #endif /* defined (BFD_HOST_U_64_BIT) */
3142 {
3143 /* This is the fallback solution if no 64bit type is available or if we
3144 are not supposed to spend much time on optimizations. We select the
3145 bucket count using a fixed set of numbers. */
3146 for (i = 0; elf_buckets[i] != 0; i++)
3147 {
3148 best_size = elf_buckets[i];
3149 if (dynsymcount < elf_buckets[i + 1])
3150 break;
3151 }
3152 }
3153
3154 /* Free the arrays we needed. */
3155 free (hashcodes);
3156
3157 return best_size;
3158 }
3159
3160 /* Set up the sizes and contents of the ELF dynamic sections. This is
3161 called by the ELF linker emulation before_allocation routine. We
3162 must set the sizes of the sections before the linker sets the
3163 addresses of the various sections. */
3164
3165 bfd_boolean
3166 NAME(bfd_elf,size_dynamic_sections) (output_bfd, soname, rpath,
3167 filter_shlib,
3168 auxiliary_filters, info, sinterpptr,
3169 verdefs)
3170 bfd *output_bfd;
3171 const char *soname;
3172 const char *rpath;
3173 const char *filter_shlib;
3174 const char * const *auxiliary_filters;
3175 struct bfd_link_info *info;
3176 asection **sinterpptr;
3177 struct bfd_elf_version_tree *verdefs;
3178 {
3179 bfd_size_type soname_indx;
3180 bfd *dynobj;
3181 struct elf_backend_data *bed;
3182 struct elf_assign_sym_version_info asvinfo;
3183
3184 *sinterpptr = NULL;
3185
3186 soname_indx = (bfd_size_type) -1;
3187
3188 if (info->hash->creator->flavour != bfd_target_elf_flavour)
3189 return TRUE;
3190
3191 if (! is_elf_hash_table (info))
3192 return TRUE;
3193
3194 /* Any syms created from now on start with -1 in
3195 got.refcount/offset and plt.refcount/offset. */
3196 elf_hash_table (info)->init_refcount = elf_hash_table (info)->init_offset;
3197
3198 /* The backend may have to create some sections regardless of whether
3199 we're dynamic or not. */
3200 bed = get_elf_backend_data (output_bfd);
3201 if (bed->elf_backend_always_size_sections
3202 && ! (*bed->elf_backend_always_size_sections) (output_bfd, info))
3203 return FALSE;
3204
3205 dynobj = elf_hash_table (info)->dynobj;
3206
3207 /* If there were no dynamic objects in the link, there is nothing to
3208 do here. */
3209 if (dynobj == NULL)
3210 return TRUE;
3211
3212 if (! _bfd_elf_maybe_strip_eh_frame_hdr (info))
3213 return FALSE;
3214
3215 if (elf_hash_table (info)->dynamic_sections_created)
3216 {
3217 struct elf_info_failed eif;
3218 struct elf_link_hash_entry *h;
3219 asection *dynstr;
3220 struct bfd_elf_version_tree *t;
3221 struct bfd_elf_version_expr *d;
3222 bfd_boolean all_defined;
3223
3224 *sinterpptr = bfd_get_section_by_name (dynobj, ".interp");
3225 BFD_ASSERT (*sinterpptr != NULL || info->shared);
3226
3227 if (soname != NULL)
3228 {
3229 soname_indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr,
3230 soname, TRUE);
3231 if (soname_indx == (bfd_size_type) -1
3232 || ! elf_add_dynamic_entry (info, (bfd_vma) DT_SONAME,
3233 soname_indx))
3234 return FALSE;
3235 }
3236
3237 if (info->symbolic)
3238 {
3239 if (! elf_add_dynamic_entry (info, (bfd_vma) DT_SYMBOLIC,
3240 (bfd_vma) 0))
3241 return FALSE;
3242 info->flags |= DF_SYMBOLIC;
3243 }
3244
3245 if (rpath != NULL)
3246 {
3247 bfd_size_type indx;
3248
3249 indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr, rpath,
3250 TRUE);
3251 if (info->new_dtags)
3252 _bfd_elf_strtab_addref (elf_hash_table (info)->dynstr, indx);
3253 if (indx == (bfd_size_type) -1
3254 || ! elf_add_dynamic_entry (info, (bfd_vma) DT_RPATH, indx)
3255 || (info->new_dtags
3256 && ! elf_add_dynamic_entry (info, (bfd_vma) DT_RUNPATH,
3257 indx)))
3258 return FALSE;
3259 }
3260
3261 if (filter_shlib != NULL)
3262 {
3263 bfd_size_type indx;
3264
3265 indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr,
3266 filter_shlib, TRUE);
3267 if (indx == (bfd_size_type) -1
3268 || ! elf_add_dynamic_entry (info, (bfd_vma) DT_FILTER, indx))
3269 return FALSE;
3270 }
3271
3272 if (auxiliary_filters != NULL)
3273 {
3274 const char * const *p;
3275
3276 for (p = auxiliary_filters; *p != NULL; p++)
3277 {
3278 bfd_size_type indx;
3279
3280 indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr,
3281 *p, TRUE);
3282 if (indx == (bfd_size_type) -1
3283 || ! elf_add_dynamic_entry (info, (bfd_vma) DT_AUXILIARY,
3284 indx))
3285 return FALSE;
3286 }
3287 }
3288
3289 eif.info = info;
3290 eif.verdefs = verdefs;
3291 eif.failed = FALSE;
3292
3293 /* If we are supposed to export all symbols into the dynamic symbol
3294 table (this is not the normal case), then do so. */
3295 if (info->export_dynamic)
3296 {
3297 elf_link_hash_traverse (elf_hash_table (info), elf_export_symbol,
3298 (PTR) &eif);
3299 if (eif.failed)
3300 return FALSE;
3301 }
3302
3303 /* Make all global versions with definiton. */
3304 for (t = verdefs; t != NULL; t = t->next)
3305 for (d = t->globals; d != NULL; d = d->next)
3306 if (!d->symver && strchr (d->pattern, '*') == NULL)
3307 {
3308 const char *verstr, *name;
3309 size_t namelen, verlen, newlen;
3310 char *newname, *p;
3311 struct elf_link_hash_entry *newh;
3312
3313 name = d->pattern;
3314 namelen = strlen (name);
3315 verstr = t->name;
3316 verlen = strlen (verstr);
3317 newlen = namelen + verlen + 3;
3318
3319 newname = (char *) bfd_malloc ((bfd_size_type) newlen);
3320 if (newname == NULL)
3321 return FALSE;
3322 memcpy (newname, name, namelen);
3323
3324 /* Check the hidden versioned definition. */
3325 p = newname + namelen;
3326 *p++ = ELF_VER_CHR;
3327 memcpy (p, verstr, verlen + 1);
3328 newh = elf_link_hash_lookup (elf_hash_table (info),
3329 newname, FALSE, FALSE,
3330 FALSE);
3331 if (newh == NULL
3332 || (newh->root.type != bfd_link_hash_defined
3333 && newh->root.type != bfd_link_hash_defweak))
3334 {
3335 /* Check the default versioned definition. */
3336 *p++ = ELF_VER_CHR;
3337 memcpy (p, verstr, verlen + 1);
3338 newh = elf_link_hash_lookup (elf_hash_table (info),
3339 newname, FALSE, FALSE,
3340 FALSE);
3341 }
3342 free (newname);
3343
3344 /* Mark this version if there is a definition and it is
3345 not defined in a shared object. */
3346 if (newh != NULL
3347 && ((newh->elf_link_hash_flags
3348 & ELF_LINK_HASH_DEF_DYNAMIC) == 0)
3349 && (newh->root.type == bfd_link_hash_defined
3350 || newh->root.type == bfd_link_hash_defweak))
3351 d->symver = 1;
3352 }
3353
3354 /* Attach all the symbols to their version information. */
3355 asvinfo.output_bfd = output_bfd;
3356 asvinfo.info = info;
3357 asvinfo.verdefs = verdefs;
3358 asvinfo.failed = FALSE;
3359
3360 elf_link_hash_traverse (elf_hash_table (info),
3361 elf_link_assign_sym_version,
3362 (PTR) &asvinfo);
3363 if (asvinfo.failed)
3364 return FALSE;
3365
3366 if (!info->allow_undefined_version)
3367 {
3368 /* Check if all global versions have a definiton. */
3369 all_defined = TRUE;
3370 for (t = verdefs; t != NULL; t = t->next)
3371 for (d = t->globals; d != NULL; d = d->next)
3372 if (!d->symver && !d->script
3373 && strchr (d->pattern, '*') == NULL)
3374 {
3375 (*_bfd_error_handler)
3376 (_("%s: undefined version: %s"),
3377 d->pattern, t->name);
3378 all_defined = FALSE;
3379 }
3380
3381 if (!all_defined)
3382 {
3383 bfd_set_error (bfd_error_bad_value);
3384 return FALSE;
3385 }
3386 }
3387
3388 /* Find all symbols which were defined in a dynamic object and make
3389 the backend pick a reasonable value for them. */
3390 elf_link_hash_traverse (elf_hash_table (info),
3391 elf_adjust_dynamic_symbol,
3392 (PTR) &eif);
3393 if (eif.failed)
3394 return FALSE;
3395
3396 /* Add some entries to the .dynamic section. We fill in some of the
3397 values later, in elf_bfd_final_link, but we must add the entries
3398 now so that we know the final size of the .dynamic section. */
3399
3400 /* If there are initialization and/or finalization functions to
3401 call then add the corresponding DT_INIT/DT_FINI entries. */
3402 h = (info->init_function
3403 ? elf_link_hash_lookup (elf_hash_table (info),
3404 info->init_function, FALSE,
3405 FALSE, FALSE)
3406 : NULL);
3407 if (h != NULL
3408 && (h->elf_link_hash_flags & (ELF_LINK_HASH_REF_REGULAR
3409 | ELF_LINK_HASH_DEF_REGULAR)) != 0)
3410 {
3411 if (! elf_add_dynamic_entry (info, (bfd_vma) DT_INIT, (bfd_vma) 0))
3412 return FALSE;
3413 }
3414 h = (info->fini_function
3415 ? elf_link_hash_lookup (elf_hash_table (info),
3416 info->fini_function, FALSE,
3417 FALSE, FALSE)
3418 : NULL);
3419 if (h != NULL
3420 && (h->elf_link_hash_flags & (ELF_LINK_HASH_REF_REGULAR
3421 | ELF_LINK_HASH_DEF_REGULAR)) != 0)
3422 {
3423 if (! elf_add_dynamic_entry (info, (bfd_vma) DT_FINI, (bfd_vma) 0))
3424 return FALSE;
3425 }
3426
3427 if (bfd_get_section_by_name (output_bfd, ".preinit_array") != NULL)
3428 {
3429 /* DT_PREINIT_ARRAY is not allowed in shared library. */
3430 if (info->shared)
3431 {
3432 bfd *sub;
3433 asection *o;
3434
3435 for (sub = info->input_bfds; sub != NULL;
3436 sub = sub->link_next)
3437 for (o = sub->sections; o != NULL; o = o->next)
3438 if (elf_section_data (o)->this_hdr.sh_type
3439 == SHT_PREINIT_ARRAY)
3440 {
3441 (*_bfd_error_handler)
3442 (_("%s: .preinit_array section is not allowed in DSO"),
3443 bfd_archive_filename (sub));
3444 break;
3445 }
3446
3447 bfd_set_error (bfd_error_nonrepresentable_section);
3448 return FALSE;
3449 }
3450
3451 if (!elf_add_dynamic_entry (info, (bfd_vma) DT_PREINIT_ARRAY,
3452 (bfd_vma) 0)
3453 || !elf_add_dynamic_entry (info, (bfd_vma) DT_PREINIT_ARRAYSZ,
3454 (bfd_vma) 0))
3455 return FALSE;
3456 }
3457 if (bfd_get_section_by_name (output_bfd, ".init_array") != NULL)
3458 {
3459 if (!elf_add_dynamic_entry (info, (bfd_vma) DT_INIT_ARRAY,
3460 (bfd_vma) 0)
3461 || !elf_add_dynamic_entry (info, (bfd_vma) DT_INIT_ARRAYSZ,
3462 (bfd_vma) 0))
3463 return FALSE;
3464 }
3465 if (bfd_get_section_by_name (output_bfd, ".fini_array") != NULL)
3466 {
3467 if (!elf_add_dynamic_entry (info, (bfd_vma) DT_FINI_ARRAY,
3468 (bfd_vma) 0)
3469 || !elf_add_dynamic_entry (info, (bfd_vma) DT_FINI_ARRAYSZ,
3470 (bfd_vma) 0))
3471 return FALSE;
3472 }
3473
3474 dynstr = bfd_get_section_by_name (dynobj, ".dynstr");
3475 /* If .dynstr is excluded from the link, we don't want any of
3476 these tags. Strictly, we should be checking each section
3477 individually; This quick check covers for the case where
3478 someone does a /DISCARD/ : { *(*) }. */
3479 if (dynstr != NULL && dynstr->output_section != bfd_abs_section_ptr)
3480 {
3481 bfd_size_type strsize;
3482
3483 strsize = _bfd_elf_strtab_size (elf_hash_table (info)->dynstr);
3484 if (! elf_add_dynamic_entry (info, (bfd_vma) DT_HASH, (bfd_vma) 0)
3485 || ! elf_add_dynamic_entry (info, (bfd_vma) DT_STRTAB, (bfd_vma) 0)
3486 || ! elf_add_dynamic_entry (info, (bfd_vma) DT_SYMTAB, (bfd_vma) 0)
3487 || ! elf_add_dynamic_entry (info, (bfd_vma) DT_STRSZ, strsize)
3488 || ! elf_add_dynamic_entry (info, (bfd_vma) DT_SYMENT,
3489 (bfd_vma) sizeof (Elf_External_Sym)))
3490 return FALSE;
3491 }
3492 }
3493
3494 /* The backend must work out the sizes of all the other dynamic
3495 sections. */
3496 if (bed->elf_backend_size_dynamic_sections
3497 && ! (*bed->elf_backend_size_dynamic_sections) (output_bfd, info))
3498 return FALSE;
3499
3500 if (elf_hash_table (info)->dynamic_sections_created)
3501 {
3502 bfd_size_type dynsymcount;
3503 asection *s;
3504 size_t bucketcount = 0;
3505 size_t hash_entry_size;
3506 unsigned int dtagcount;
3507
3508 /* Set up the version definition section. */
3509 s = bfd_get_section_by_name (dynobj, ".gnu.version_d");
3510 BFD_ASSERT (s != NULL);
3511
3512 /* We may have created additional version definitions if we are
3513 just linking a regular application. */
3514 verdefs = asvinfo.verdefs;
3515
3516 /* Skip anonymous version tag. */
3517 if (verdefs != NULL && verdefs->vernum == 0)
3518 verdefs = verdefs->next;
3519
3520 if (verdefs == NULL)
3521 _bfd_strip_section_from_output (info, s);
3522 else
3523 {
3524 unsigned int cdefs;
3525 bfd_size_type size;
3526 struct bfd_elf_version_tree *t;
3527 bfd_byte *p;
3528 Elf_Internal_Verdef def;
3529 Elf_Internal_Verdaux defaux;
3530
3531 cdefs = 0;
3532 size = 0;
3533
3534 /* Make space for the base version. */
3535 size += sizeof (Elf_External_Verdef);
3536 size += sizeof (Elf_External_Verdaux);
3537 ++cdefs;
3538
3539 for (t = verdefs; t != NULL; t = t->next)
3540 {
3541 struct bfd_elf_version_deps *n;
3542
3543 size += sizeof (Elf_External_Verdef);
3544 size += sizeof (Elf_External_Verdaux);
3545 ++cdefs;
3546
3547 for (n = t->deps; n != NULL; n = n->next)
3548 size += sizeof (Elf_External_Verdaux);
3549 }
3550
3551 s->_raw_size = size;
3552 s->contents = (bfd_byte *) bfd_alloc (output_bfd, s->_raw_size);
3553 if (s->contents == NULL && s->_raw_size != 0)
3554 return FALSE;
3555
3556 /* Fill in the version definition section. */
3557
3558 p = s->contents;
3559
3560 def.vd_version = VER_DEF_CURRENT;
3561 def.vd_flags = VER_FLG_BASE;
3562 def.vd_ndx = 1;
3563 def.vd_cnt = 1;
3564 def.vd_aux = sizeof (Elf_External_Verdef);
3565 def.vd_next = (sizeof (Elf_External_Verdef)
3566 + sizeof (Elf_External_Verdaux));
3567
3568 if (soname_indx != (bfd_size_type) -1)
3569 {
3570 _bfd_elf_strtab_addref (elf_hash_table (info)->dynstr,
3571 soname_indx);
3572 def.vd_hash = bfd_elf_hash (soname);
3573 defaux.vda_name = soname_indx;
3574 }
3575 else
3576 {
3577 const char *name;
3578 bfd_size_type indx;
3579
3580 name = basename (output_bfd->filename);
3581 def.vd_hash = bfd_elf_hash (name);
3582 indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr,
3583 name, FALSE);
3584 if (indx == (bfd_size_type) -1)
3585 return FALSE;
3586 defaux.vda_name = indx;
3587 }
3588 defaux.vda_next = 0;
3589
3590 _bfd_elf_swap_verdef_out (output_bfd, &def,
3591 (Elf_External_Verdef *) p);
3592 p += sizeof (Elf_External_Verdef);
3593 _bfd_elf_swap_verdaux_out (output_bfd, &defaux,
3594 (Elf_External_Verdaux *) p);
3595 p += sizeof (Elf_External_Verdaux);
3596
3597 for (t = verdefs; t != NULL; t = t->next)
3598 {
3599 unsigned int cdeps;
3600 struct bfd_elf_version_deps *n;
3601 struct elf_link_hash_entry *h;
3602 struct bfd_link_hash_entry *bh;
3603
3604 cdeps = 0;
3605 for (n = t->deps; n != NULL; n = n->next)
3606 ++cdeps;
3607
3608 /* Add a symbol representing this version. */
3609 bh = NULL;
3610 if (! (_bfd_generic_link_add_one_symbol
3611 (info, dynobj, t->name, BSF_GLOBAL, bfd_abs_section_ptr,
3612 (bfd_vma) 0, (const char *) NULL, FALSE,
3613 get_elf_backend_data (dynobj)->collect, &bh)))
3614 return FALSE;
3615 h = (struct elf_link_hash_entry *) bh;
3616 h->elf_link_hash_flags &= ~ ELF_LINK_NON_ELF;
3617 h->elf_link_hash_flags |= ELF_LINK_HASH_DEF_REGULAR;
3618 h->type = STT_OBJECT;
3619 h->verinfo.vertree = t;
3620
3621 if (! _bfd_elf_link_record_dynamic_symbol (info, h))
3622 return FALSE;
3623
3624 def.vd_version = VER_DEF_CURRENT;
3625 def.vd_flags = 0;
3626 if (t->globals == NULL && t->locals == NULL && ! t->used)
3627 def.vd_flags |= VER_FLG_WEAK;
3628 def.vd_ndx = t->vernum + 1;
3629 def.vd_cnt = cdeps + 1;
3630 def.vd_hash = bfd_elf_hash (t->name);
3631 def.vd_aux = sizeof (Elf_External_Verdef);
3632 if (t->next != NULL)
3633 def.vd_next = (sizeof (Elf_External_Verdef)
3634 + (cdeps + 1) * sizeof (Elf_External_Verdaux));
3635 else
3636 def.vd_next = 0;
3637
3638 _bfd_elf_swap_verdef_out (output_bfd, &def,
3639 (Elf_External_Verdef *) p);
3640 p += sizeof (Elf_External_Verdef);
3641
3642 defaux.vda_name = h->dynstr_index;
3643 _bfd_elf_strtab_addref (elf_hash_table (info)->dynstr,
3644 h->dynstr_index);
3645 if (t->deps == NULL)
3646 defaux.vda_next = 0;
3647 else
3648 defaux.vda_next = sizeof (Elf_External_Verdaux);
3649 t->name_indx = defaux.vda_name;
3650
3651 _bfd_elf_swap_verdaux_out (output_bfd, &defaux,
3652 (Elf_External_Verdaux *) p);
3653 p += sizeof (Elf_External_Verdaux);
3654
3655 for (n = t->deps; n != NULL; n = n->next)
3656 {
3657 if (n->version_needed == NULL)
3658 {
3659 /* This can happen if there was an error in the
3660 version script. */
3661 defaux.vda_name = 0;
3662 }
3663 else
3664 {
3665 defaux.vda_name = n->version_needed->name_indx;
3666 _bfd_elf_strtab_addref (elf_hash_table (info)->dynstr,
3667 defaux.vda_name);
3668 }
3669 if (n->next == NULL)
3670 defaux.vda_next = 0;
3671 else
3672 defaux.vda_next = sizeof (Elf_External_Verdaux);
3673
3674 _bfd_elf_swap_verdaux_out (output_bfd, &defaux,
3675 (Elf_External_Verdaux *) p);
3676 p += sizeof (Elf_External_Verdaux);
3677 }
3678 }
3679
3680 if (! elf_add_dynamic_entry (info, (bfd_vma) DT_VERDEF, (bfd_vma) 0)
3681 || ! elf_add_dynamic_entry (info, (bfd_vma) DT_VERDEFNUM,
3682 (bfd_vma) cdefs))
3683 return FALSE;
3684
3685 elf_tdata (output_bfd)->cverdefs = cdefs;
3686 }
3687
3688 if ((info->new_dtags && info->flags) || (info->flags & DF_STATIC_TLS))
3689 {
3690 if (! elf_add_dynamic_entry (info, (bfd_vma) DT_FLAGS, info->flags))
3691 return FALSE;
3692 }
3693
3694 if (info->flags_1)
3695 {
3696 if (! info->shared)
3697 info->flags_1 &= ~ (DF_1_INITFIRST
3698 | DF_1_NODELETE
3699 | DF_1_NOOPEN);
3700 if (! elf_add_dynamic_entry (info, (bfd_vma) DT_FLAGS_1,
3701 info->flags_1))
3702 return FALSE;
3703 }
3704
3705 /* Work out the size of the version reference section. */
3706
3707 s = bfd_get_section_by_name (dynobj, ".gnu.version_r");
3708 BFD_ASSERT (s != NULL);
3709 {
3710 struct elf_find_verdep_info sinfo;
3711
3712 sinfo.output_bfd = output_bfd;
3713 sinfo.info = info;
3714 sinfo.vers = elf_tdata (output_bfd)->cverdefs;
3715 if (sinfo.vers == 0)
3716 sinfo.vers = 1;
3717 sinfo.failed = FALSE;
3718
3719 elf_link_hash_traverse (elf_hash_table (info),
3720 elf_link_find_version_dependencies,
3721 (PTR) &sinfo);
3722
3723 if (elf_tdata (output_bfd)->verref == NULL)
3724 _bfd_strip_section_from_output (info, s);
3725 else
3726 {
3727 Elf_Internal_Verneed *t;
3728 unsigned int size;
3729 unsigned int crefs;
3730 bfd_byte *p;
3731
3732 /* Build the version definition section. */
3733 size = 0;
3734 crefs = 0;
3735 for (t = elf_tdata (output_bfd)->verref;
3736 t != NULL;
3737 t = t->vn_nextref)
3738 {
3739 Elf_Internal_Vernaux *a;
3740
3741 size += sizeof (Elf_External_Verneed);
3742 ++crefs;
3743 for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr)
3744 size += sizeof (Elf_External_Vernaux);
3745 }
3746
3747 s->_raw_size = size;
3748 s->contents = (bfd_byte *) bfd_alloc (output_bfd, s->_raw_size);
3749 if (s->contents == NULL)
3750 return FALSE;
3751
3752 p = s->contents;
3753 for (t = elf_tdata (output_bfd)->verref;
3754 t != NULL;
3755 t = t->vn_nextref)
3756 {
3757 unsigned int caux;
3758 Elf_Internal_Vernaux *a;
3759 bfd_size_type indx;
3760
3761 caux = 0;
3762 for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr)
3763 ++caux;
3764
3765 t->vn_version = VER_NEED_CURRENT;
3766 t->vn_cnt = caux;
3767 indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr,
3768 elf_dt_name (t->vn_bfd) != NULL
3769 ? elf_dt_name (t->vn_bfd)
3770 : basename (t->vn_bfd->filename),
3771 FALSE);
3772 if (indx == (bfd_size_type) -1)
3773 return FALSE;
3774 t->vn_file = indx;
3775 t->vn_aux = sizeof (Elf_External_Verneed);
3776 if (t->vn_nextref == NULL)
3777 t->vn_next = 0;
3778 else
3779 t->vn_next = (sizeof (Elf_External_Verneed)
3780 + caux * sizeof (Elf_External_Vernaux));
3781
3782 _bfd_elf_swap_verneed_out (output_bfd, t,
3783 (Elf_External_Verneed *) p);
3784 p += sizeof (Elf_External_Verneed);
3785
3786 for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr)
3787 {
3788 a->vna_hash = bfd_elf_hash (a->vna_nodename);
3789 indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr,
3790 a->vna_nodename, FALSE);
3791 if (indx == (bfd_size_type) -1)
3792 return FALSE;
3793 a->vna_name = indx;
3794 if (a->vna_nextptr == NULL)
3795 a->vna_next = 0;
3796 else
3797 a->vna_next = sizeof (Elf_External_Vernaux);
3798
3799 _bfd_elf_swap_vernaux_out (output_bfd, a,
3800 (Elf_External_Vernaux *) p);
3801 p += sizeof (Elf_External_Vernaux);
3802 }
3803 }
3804
3805 if (! elf_add_dynamic_entry (info, (bfd_vma) DT_VERNEED,
3806 (bfd_vma) 0)
3807 || ! elf_add_dynamic_entry (info, (bfd_vma) DT_VERNEEDNUM,
3808 (bfd_vma) crefs))
3809 return FALSE;
3810
3811 elf_tdata (output_bfd)->cverrefs = crefs;
3812 }
3813 }
3814
3815 /* Assign dynsym indicies. In a shared library we generate a
3816 section symbol for each output section, which come first.
3817 Next come all of the back-end allocated local dynamic syms,
3818 followed by the rest of the global symbols. */
3819
3820 dynsymcount = _bfd_elf_link_renumber_dynsyms (output_bfd, info);
3821
3822 /* Work out the size of the symbol version section. */
3823 s = bfd_get_section_by_name (dynobj, ".gnu.version");
3824 BFD_ASSERT (s != NULL);
3825 if (dynsymcount == 0
3826 || (verdefs == NULL && elf_tdata (output_bfd)->verref == NULL))
3827 {
3828 _bfd_strip_section_from_output (info, s);
3829 /* The DYNSYMCOUNT might have changed if we were going to
3830 output a dynamic symbol table entry for S. */
3831 dynsymcount = _bfd_elf_link_renumber_dynsyms (output_bfd, info);
3832 }
3833 else
3834 {
3835 s->_raw_size = dynsymcount * sizeof (Elf_External_Versym);
3836 s->contents = (bfd_byte *) bfd_zalloc (output_bfd, s->_raw_size);
3837 if (s->contents == NULL)
3838 return FALSE;
3839
3840 if (! elf_add_dynamic_entry (info, (bfd_vma) DT_VERSYM, (bfd_vma) 0))
3841 return FALSE;
3842 }
3843
3844 /* Set the size of the .dynsym and .hash sections. We counted
3845 the number of dynamic symbols in elf_link_add_object_symbols.
3846 We will build the contents of .dynsym and .hash when we build
3847 the final symbol table, because until then we do not know the
3848 correct value to give the symbols. We built the .dynstr
3849 section as we went along in elf_link_add_object_symbols. */
3850 s = bfd_get_section_by_name (dynobj, ".dynsym");
3851 BFD_ASSERT (s != NULL);
3852 s->_raw_size = dynsymcount * sizeof (Elf_External_Sym);
3853 s->contents = (bfd_byte *) bfd_alloc (output_bfd, s->_raw_size);
3854 if (s->contents == NULL && s->_raw_size != 0)
3855 return FALSE;
3856
3857 if (dynsymcount != 0)
3858 {
3859 Elf_Internal_Sym isym;
3860
3861 /* The first entry in .dynsym is a dummy symbol. */
3862 isym.st_value = 0;
3863 isym.st_size = 0;
3864 isym.st_name = 0;
3865 isym.st_info = 0;
3866 isym.st_other = 0;
3867 isym.st_shndx = 0;
3868 elf_swap_symbol_out (output_bfd, &isym, (PTR) s->contents, (PTR) 0);
3869 }
3870
3871 /* Compute the size of the hashing table. As a side effect this
3872 computes the hash values for all the names we export. */
3873 bucketcount = compute_bucket_count (info);
3874
3875 s = bfd_get_section_by_name (dynobj, ".hash");
3876 BFD_ASSERT (s != NULL);
3877 hash_entry_size = elf_section_data (s)->this_hdr.sh_entsize;
3878 s->_raw_size = ((2 + bucketcount + dynsymcount) * hash_entry_size);
3879 s->contents = (bfd_byte *) bfd_zalloc (output_bfd, s->_raw_size);
3880 if (s->contents == NULL)
3881 return FALSE;
3882
3883 bfd_put (8 * hash_entry_size, output_bfd, (bfd_vma) bucketcount,
3884 s->contents);
3885 bfd_put (8 * hash_entry_size, output_bfd, (bfd_vma) dynsymcount,
3886 s->contents + hash_entry_size);
3887
3888 elf_hash_table (info)->bucketcount = bucketcount;
3889
3890 s = bfd_get_section_by_name (dynobj, ".dynstr");
3891 BFD_ASSERT (s != NULL);
3892
3893 elf_finalize_dynstr (output_bfd, info);
3894
3895 s->_raw_size = _bfd_elf_strtab_size (elf_hash_table (info)->dynstr);
3896
3897 for (dtagcount = 0; dtagcount <= info->spare_dynamic_tags; ++dtagcount)
3898 if (! elf_add_dynamic_entry (info, (bfd_vma) DT_NULL, (bfd_vma) 0))
3899 return FALSE;
3900 }
3901
3902 return TRUE;
3903 }
3904
3905 /* This function is used to adjust offsets into .dynstr for
3906 dynamic symbols. This is called via elf_link_hash_traverse. */
3907
3908 static bfd_boolean elf_adjust_dynstr_offsets
3909 PARAMS ((struct elf_link_hash_entry *, PTR));
3910
3911 static bfd_boolean
elf_adjust_dynstr_offsets(h,data)3912 elf_adjust_dynstr_offsets (h, data)
3913 struct elf_link_hash_entry *h;
3914 PTR data;
3915 {
3916 struct elf_strtab_hash *dynstr = (struct elf_strtab_hash *) data;
3917
3918 if (h->root.type == bfd_link_hash_warning)
3919 h = (struct elf_link_hash_entry *) h->root.u.i.link;
3920
3921 if (h->dynindx != -1)
3922 h->dynstr_index = _bfd_elf_strtab_offset (dynstr, h->dynstr_index);
3923 return TRUE;
3924 }
3925
3926 /* Assign string offsets in .dynstr, update all structures referencing
3927 them. */
3928
3929 static bfd_boolean
elf_finalize_dynstr(output_bfd,info)3930 elf_finalize_dynstr (output_bfd, info)
3931 bfd *output_bfd;
3932 struct bfd_link_info *info;
3933 {
3934 struct elf_link_local_dynamic_entry *entry;
3935 struct elf_strtab_hash *dynstr = elf_hash_table (info)->dynstr;
3936 bfd *dynobj = elf_hash_table (info)->dynobj;
3937 asection *sdyn;
3938 bfd_size_type size;
3939 Elf_External_Dyn *dyncon, *dynconend;
3940
3941 _bfd_elf_strtab_finalize (dynstr);
3942 size = _bfd_elf_strtab_size (dynstr);
3943
3944 /* Update all .dynamic entries referencing .dynstr strings. */
3945 sdyn = bfd_get_section_by_name (dynobj, ".dynamic");
3946 BFD_ASSERT (sdyn != NULL);
3947
3948 dyncon = (Elf_External_Dyn *) sdyn->contents;
3949 dynconend = (Elf_External_Dyn *) (sdyn->contents +
3950 sdyn->_raw_size);
3951 for (; dyncon < dynconend; dyncon++)
3952 {
3953 Elf_Internal_Dyn dyn;
3954
3955 elf_swap_dyn_in (dynobj, dyncon, & dyn);
3956 switch (dyn.d_tag)
3957 {
3958 case DT_STRSZ:
3959 dyn.d_un.d_val = size;
3960 elf_swap_dyn_out (dynobj, & dyn, dyncon);
3961 break;
3962 case DT_NEEDED:
3963 case DT_SONAME:
3964 case DT_RPATH:
3965 case DT_RUNPATH:
3966 case DT_FILTER:
3967 case DT_AUXILIARY:
3968 dyn.d_un.d_val = _bfd_elf_strtab_offset (dynstr, dyn.d_un.d_val);
3969 elf_swap_dyn_out (dynobj, & dyn, dyncon);
3970 break;
3971 default:
3972 break;
3973 }
3974 }
3975
3976 /* Now update local dynamic symbols. */
3977 for (entry = elf_hash_table (info)->dynlocal; entry ; entry = entry->next)
3978 entry->isym.st_name = _bfd_elf_strtab_offset (dynstr,
3979 entry->isym.st_name);
3980
3981 /* And the rest of dynamic symbols. */
3982 elf_link_hash_traverse (elf_hash_table (info),
3983 elf_adjust_dynstr_offsets, dynstr);
3984
3985 /* Adjust version definitions. */
3986 if (elf_tdata (output_bfd)->cverdefs)
3987 {
3988 asection *s;
3989 bfd_byte *p;
3990 bfd_size_type i;
3991 Elf_Internal_Verdef def;
3992 Elf_Internal_Verdaux defaux;
3993
3994 s = bfd_get_section_by_name (dynobj, ".gnu.version_d");
3995 p = (bfd_byte *) s->contents;
3996 do
3997 {
3998 _bfd_elf_swap_verdef_in (output_bfd, (Elf_External_Verdef *) p,
3999 &def);
4000 p += sizeof (Elf_External_Verdef);
4001 for (i = 0; i < def.vd_cnt; ++i)
4002 {
4003 _bfd_elf_swap_verdaux_in (output_bfd,
4004 (Elf_External_Verdaux *) p, &defaux);
4005 defaux.vda_name = _bfd_elf_strtab_offset (dynstr,
4006 defaux.vda_name);
4007 _bfd_elf_swap_verdaux_out (output_bfd,
4008 &defaux, (Elf_External_Verdaux *) p);
4009 p += sizeof (Elf_External_Verdaux);
4010 }
4011 }
4012 while (def.vd_next);
4013 }
4014
4015 /* Adjust version references. */
4016 if (elf_tdata (output_bfd)->verref)
4017 {
4018 asection *s;
4019 bfd_byte *p;
4020 bfd_size_type i;
4021 Elf_Internal_Verneed need;
4022 Elf_Internal_Vernaux needaux;
4023
4024 s = bfd_get_section_by_name (dynobj, ".gnu.version_r");
4025 p = (bfd_byte *) s->contents;
4026 do
4027 {
4028 _bfd_elf_swap_verneed_in (output_bfd, (Elf_External_Verneed *) p,
4029 &need);
4030 need.vn_file = _bfd_elf_strtab_offset (dynstr, need.vn_file);
4031 _bfd_elf_swap_verneed_out (output_bfd, &need,
4032 (Elf_External_Verneed *) p);
4033 p += sizeof (Elf_External_Verneed);
4034 for (i = 0; i < need.vn_cnt; ++i)
4035 {
4036 _bfd_elf_swap_vernaux_in (output_bfd,
4037 (Elf_External_Vernaux *) p, &needaux);
4038 needaux.vna_name = _bfd_elf_strtab_offset (dynstr,
4039 needaux.vna_name);
4040 _bfd_elf_swap_vernaux_out (output_bfd,
4041 &needaux,
4042 (Elf_External_Vernaux *) p);
4043 p += sizeof (Elf_External_Vernaux);
4044 }
4045 }
4046 while (need.vn_next);
4047 }
4048
4049 return TRUE;
4050 }
4051
4052 /* Fix up the flags for a symbol. This handles various cases which
4053 can only be fixed after all the input files are seen. This is
4054 currently called by both adjust_dynamic_symbol and
4055 assign_sym_version, which is unnecessary but perhaps more robust in
4056 the face of future changes. */
4057
4058 static bfd_boolean
elf_fix_symbol_flags(h,eif)4059 elf_fix_symbol_flags (h, eif)
4060 struct elf_link_hash_entry *h;
4061 struct elf_info_failed *eif;
4062 {
4063 /* If this symbol was mentioned in a non-ELF file, try to set
4064 DEF_REGULAR and REF_REGULAR correctly. This is the only way to
4065 permit a non-ELF file to correctly refer to a symbol defined in
4066 an ELF dynamic object. */
4067 if ((h->elf_link_hash_flags & ELF_LINK_NON_ELF) != 0)
4068 {
4069 while (h->root.type == bfd_link_hash_indirect)
4070 h = (struct elf_link_hash_entry *) h->root.u.i.link;
4071
4072 if (h->root.type != bfd_link_hash_defined
4073 && h->root.type != bfd_link_hash_defweak)
4074 h->elf_link_hash_flags |= (ELF_LINK_HASH_REF_REGULAR
4075 | ELF_LINK_HASH_REF_REGULAR_NONWEAK);
4076 else
4077 {
4078 if (h->root.u.def.section->owner != NULL
4079 && (bfd_get_flavour (h->root.u.def.section->owner)
4080 == bfd_target_elf_flavour))
4081 h->elf_link_hash_flags |= (ELF_LINK_HASH_REF_REGULAR
4082 | ELF_LINK_HASH_REF_REGULAR_NONWEAK);
4083 else
4084 h->elf_link_hash_flags |= ELF_LINK_HASH_DEF_REGULAR;
4085 }
4086
4087 if (h->dynindx == -1
4088 && ((h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) != 0
4089 || (h->elf_link_hash_flags & ELF_LINK_HASH_REF_DYNAMIC) != 0))
4090 {
4091 if (! _bfd_elf_link_record_dynamic_symbol (eif->info, h))
4092 {
4093 eif->failed = TRUE;
4094 return FALSE;
4095 }
4096 }
4097 }
4098 else
4099 {
4100 /* Unfortunately, ELF_LINK_NON_ELF is only correct if the symbol
4101 was first seen in a non-ELF file. Fortunately, if the symbol
4102 was first seen in an ELF file, we're probably OK unless the
4103 symbol was defined in a non-ELF file. Catch that case here.
4104 FIXME: We're still in trouble if the symbol was first seen in
4105 a dynamic object, and then later in a non-ELF regular object. */
4106 if ((h->root.type == bfd_link_hash_defined
4107 || h->root.type == bfd_link_hash_defweak)
4108 && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0
4109 && (h->root.u.def.section->owner != NULL
4110 ? (bfd_get_flavour (h->root.u.def.section->owner)
4111 != bfd_target_elf_flavour)
4112 : (bfd_is_abs_section (h->root.u.def.section)
4113 && (h->elf_link_hash_flags
4114 & ELF_LINK_HASH_DEF_DYNAMIC) == 0)))
4115 h->elf_link_hash_flags |= ELF_LINK_HASH_DEF_REGULAR;
4116 }
4117
4118 /* If this is a final link, and the symbol was defined as a common
4119 symbol in a regular object file, and there was no definition in
4120 any dynamic object, then the linker will have allocated space for
4121 the symbol in a common section but the ELF_LINK_HASH_DEF_REGULAR
4122 flag will not have been set. */
4123 if (h->root.type == bfd_link_hash_defined
4124 && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0
4125 && (h->elf_link_hash_flags & ELF_LINK_HASH_REF_REGULAR) != 0
4126 && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) == 0
4127 && (h->root.u.def.section->owner->flags & DYNAMIC) == 0)
4128 h->elf_link_hash_flags |= ELF_LINK_HASH_DEF_REGULAR;
4129
4130 /* If -Bsymbolic was used (which means to bind references to global
4131 symbols to the definition within the shared object), and this
4132 symbol was defined in a regular object, then it actually doesn't
4133 need a PLT entry, and we can accomplish that by forcing it local.
4134 Likewise, if the symbol has hidden or internal visibility.
4135 FIXME: It might be that we also do not need a PLT for other
4136 non-hidden visibilities, but we would have to tell that to the
4137 backend specifically; we can't just clear PLT-related data here. */
4138 if ((h->elf_link_hash_flags & ELF_LINK_HASH_NEEDS_PLT) != 0
4139 && eif->info->shared
4140 && is_elf_hash_table (eif->info)
4141 && (eif->info->symbolic
4142 || ELF_ST_VISIBILITY (h->other) == STV_INTERNAL
4143 || ELF_ST_VISIBILITY (h->other) == STV_HIDDEN)
4144 && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) != 0)
4145 {
4146 struct elf_backend_data *bed;
4147 bfd_boolean force_local;
4148
4149 bed = get_elf_backend_data (elf_hash_table (eif->info)->dynobj);
4150
4151 force_local = (ELF_ST_VISIBILITY (h->other) == STV_INTERNAL
4152 || ELF_ST_VISIBILITY (h->other) == STV_HIDDEN);
4153 (*bed->elf_backend_hide_symbol) (eif->info, h, force_local);
4154 }
4155
4156 /* If this is a weak defined symbol in a dynamic object, and we know
4157 the real definition in the dynamic object, copy interesting flags
4158 over to the real definition. */
4159 if (h->weakdef != NULL)
4160 {
4161 struct elf_link_hash_entry *weakdef;
4162
4163 weakdef = h->weakdef;
4164 if (h->root.type == bfd_link_hash_indirect)
4165 h = (struct elf_link_hash_entry *) h->root.u.i.link;
4166
4167 BFD_ASSERT (h->root.type == bfd_link_hash_defined
4168 || h->root.type == bfd_link_hash_defweak);
4169 BFD_ASSERT (weakdef->root.type == bfd_link_hash_defined
4170 || weakdef->root.type == bfd_link_hash_defweak);
4171 BFD_ASSERT (weakdef->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC);
4172
4173 /* If the real definition is defined by a regular object file,
4174 don't do anything special. See the longer description in
4175 elf_adjust_dynamic_symbol, below. */
4176 if ((weakdef->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) != 0)
4177 h->weakdef = NULL;
4178 else
4179 {
4180 struct elf_backend_data *bed;
4181
4182 bed = get_elf_backend_data (elf_hash_table (eif->info)->dynobj);
4183 (*bed->elf_backend_copy_indirect_symbol) (bed, weakdef, h);
4184 }
4185 }
4186
4187 return TRUE;
4188 }
4189
4190 /* Make the backend pick a good value for a dynamic symbol. This is
4191 called via elf_link_hash_traverse, and also calls itself
4192 recursively. */
4193
4194 static bfd_boolean
elf_adjust_dynamic_symbol(h,data)4195 elf_adjust_dynamic_symbol (h, data)
4196 struct elf_link_hash_entry *h;
4197 PTR data;
4198 {
4199 struct elf_info_failed *eif = (struct elf_info_failed *) data;
4200 bfd *dynobj;
4201 struct elf_backend_data *bed;
4202
4203 if (! is_elf_hash_table (eif->info))
4204 return FALSE;
4205
4206 if (h->root.type == bfd_link_hash_warning)
4207 {
4208 h->plt = elf_hash_table (eif->info)->init_offset;
4209 h->got = elf_hash_table (eif->info)->init_offset;
4210
4211 /* When warning symbols are created, they **replace** the "real"
4212 entry in the hash table, thus we never get to see the real
4213 symbol in a hash traversal. So look at it now. */
4214 h = (struct elf_link_hash_entry *) h->root.u.i.link;
4215 }
4216
4217 /* Ignore indirect symbols. These are added by the versioning code. */
4218 if (h->root.type == bfd_link_hash_indirect)
4219 return TRUE;
4220
4221 /* Fix the symbol flags. */
4222 if (! elf_fix_symbol_flags (h, eif))
4223 return FALSE;
4224
4225 /* If this symbol does not require a PLT entry, and it is not
4226 defined by a dynamic object, or is not referenced by a regular
4227 object, ignore it. We do have to handle a weak defined symbol,
4228 even if no regular object refers to it, if we decided to add it
4229 to the dynamic symbol table. FIXME: Do we normally need to worry
4230 about symbols which are defined by one dynamic object and
4231 referenced by another one? */
4232 if ((h->elf_link_hash_flags & ELF_LINK_HASH_NEEDS_PLT) == 0
4233 && ((h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) != 0
4234 || (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) == 0
4235 || ((h->elf_link_hash_flags & ELF_LINK_HASH_REF_REGULAR) == 0
4236 && (h->weakdef == NULL || h->weakdef->dynindx == -1))))
4237 {
4238 h->plt = elf_hash_table (eif->info)->init_offset;
4239 return TRUE;
4240 }
4241
4242 /* If we've already adjusted this symbol, don't do it again. This
4243 can happen via a recursive call. */
4244 if ((h->elf_link_hash_flags & ELF_LINK_HASH_DYNAMIC_ADJUSTED) != 0)
4245 return TRUE;
4246
4247 /* Don't look at this symbol again. Note that we must set this
4248 after checking the above conditions, because we may look at a
4249 symbol once, decide not to do anything, and then get called
4250 recursively later after REF_REGULAR is set below. */
4251 h->elf_link_hash_flags |= ELF_LINK_HASH_DYNAMIC_ADJUSTED;
4252
4253 /* If this is a weak definition, and we know a real definition, and
4254 the real symbol is not itself defined by a regular object file,
4255 then get a good value for the real definition. We handle the
4256 real symbol first, for the convenience of the backend routine.
4257
4258 Note that there is a confusing case here. If the real definition
4259 is defined by a regular object file, we don't get the real symbol
4260 from the dynamic object, but we do get the weak symbol. If the
4261 processor backend uses a COPY reloc, then if some routine in the
4262 dynamic object changes the real symbol, we will not see that
4263 change in the corresponding weak symbol. This is the way other
4264 ELF linkers work as well, and seems to be a result of the shared
4265 library model.
4266
4267 I will clarify this issue. Most SVR4 shared libraries define the
4268 variable _timezone and define timezone as a weak synonym. The
4269 tzset call changes _timezone. If you write
4270 extern int timezone;
4271 int _timezone = 5;
4272 int main () { tzset (); printf ("%d %d\n", timezone, _timezone); }
4273 you might expect that, since timezone is a synonym for _timezone,
4274 the same number will print both times. However, if the processor
4275 backend uses a COPY reloc, then actually timezone will be copied
4276 into your process image, and, since you define _timezone
4277 yourself, _timezone will not. Thus timezone and _timezone will
4278 wind up at different memory locations. The tzset call will set
4279 _timezone, leaving timezone unchanged. */
4280
4281 if (h->weakdef != NULL)
4282 {
4283 /* If we get to this point, we know there is an implicit
4284 reference by a regular object file via the weak symbol H.
4285 FIXME: Is this really true? What if the traversal finds
4286 H->WEAKDEF before it finds H? */
4287 h->weakdef->elf_link_hash_flags |= ELF_LINK_HASH_REF_REGULAR;
4288
4289 if (! elf_adjust_dynamic_symbol (h->weakdef, (PTR) eif))
4290 return FALSE;
4291 }
4292
4293 /* If a symbol has no type and no size and does not require a PLT
4294 entry, then we are probably about to do the wrong thing here: we
4295 are probably going to create a COPY reloc for an empty object.
4296 This case can arise when a shared object is built with assembly
4297 code, and the assembly code fails to set the symbol type. */
4298 if (h->size == 0
4299 && h->type == STT_NOTYPE
4300 && (h->elf_link_hash_flags & ELF_LINK_HASH_NEEDS_PLT) == 0)
4301 (*_bfd_error_handler)
4302 (_("warning: type and size of dynamic symbol `%s' are not defined"),
4303 h->root.root.string);
4304
4305 dynobj = elf_hash_table (eif->info)->dynobj;
4306 bed = get_elf_backend_data (dynobj);
4307 if (! (*bed->elf_backend_adjust_dynamic_symbol) (eif->info, h))
4308 {
4309 eif->failed = TRUE;
4310 return FALSE;
4311 }
4312
4313 return TRUE;
4314 }
4315
4316 /* This routine is used to export all defined symbols into the dynamic
4317 symbol table. It is called via elf_link_hash_traverse. */
4318
4319 static bfd_boolean
elf_export_symbol(h,data)4320 elf_export_symbol (h, data)
4321 struct elf_link_hash_entry *h;
4322 PTR data;
4323 {
4324 struct elf_info_failed *eif = (struct elf_info_failed *) data;
4325
4326 /* Ignore indirect symbols. These are added by the versioning code. */
4327 if (h->root.type == bfd_link_hash_indirect)
4328 return TRUE;
4329
4330 if (h->root.type == bfd_link_hash_warning)
4331 h = (struct elf_link_hash_entry *) h->root.u.i.link;
4332
4333 if (h->dynindx == -1
4334 && (h->elf_link_hash_flags
4335 & (ELF_LINK_HASH_DEF_REGULAR | ELF_LINK_HASH_REF_REGULAR)) != 0)
4336 {
4337 struct bfd_elf_version_tree *t;
4338 struct bfd_elf_version_expr *d;
4339
4340 for (t = eif->verdefs; t != NULL; t = t->next)
4341 {
4342 if (t->globals != NULL)
4343 {
4344 for (d = t->globals; d != NULL; d = d->next)
4345 {
4346 if ((*d->match) (d, h->root.root.string))
4347 goto doit;
4348 }
4349 }
4350
4351 if (t->locals != NULL)
4352 {
4353 for (d = t->locals ; d != NULL; d = d->next)
4354 {
4355 if ((*d->match) (d, h->root.root.string))
4356 return TRUE;
4357 }
4358 }
4359 }
4360
4361 if (!eif->verdefs)
4362 {
4363 doit:
4364 if (! _bfd_elf_link_record_dynamic_symbol (eif->info, h))
4365 {
4366 eif->failed = TRUE;
4367 return FALSE;
4368 }
4369 }
4370 }
4371
4372 return TRUE;
4373 }
4374
4375 /* Look through the symbols which are defined in other shared
4376 libraries and referenced here. Update the list of version
4377 dependencies. This will be put into the .gnu.version_r section.
4378 This function is called via elf_link_hash_traverse. */
4379
4380 static bfd_boolean
elf_link_find_version_dependencies(h,data)4381 elf_link_find_version_dependencies (h, data)
4382 struct elf_link_hash_entry *h;
4383 PTR data;
4384 {
4385 struct elf_find_verdep_info *rinfo = (struct elf_find_verdep_info *) data;
4386 Elf_Internal_Verneed *t;
4387 Elf_Internal_Vernaux *a;
4388 bfd_size_type amt;
4389
4390 if (h->root.type == bfd_link_hash_warning)
4391 h = (struct elf_link_hash_entry *) h->root.u.i.link;
4392
4393 /* We only care about symbols defined in shared objects with version
4394 information. */
4395 if ((h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) == 0
4396 || (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) != 0
4397 || h->dynindx == -1
4398 || h->verinfo.verdef == NULL)
4399 return TRUE;
4400
4401 /* See if we already know about this version. */
4402 for (t = elf_tdata (rinfo->output_bfd)->verref; t != NULL; t = t->vn_nextref)
4403 {
4404 if (t->vn_bfd != h->verinfo.verdef->vd_bfd)
4405 continue;
4406
4407 for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr)
4408 if (a->vna_nodename == h->verinfo.verdef->vd_nodename)
4409 return TRUE;
4410
4411 break;
4412 }
4413
4414 /* This is a new version. Add it to tree we are building. */
4415
4416 if (t == NULL)
4417 {
4418 amt = sizeof *t;
4419 t = (Elf_Internal_Verneed *) bfd_zalloc (rinfo->output_bfd, amt);
4420 if (t == NULL)
4421 {
4422 rinfo->failed = TRUE;
4423 return FALSE;
4424 }
4425
4426 t->vn_bfd = h->verinfo.verdef->vd_bfd;
4427 t->vn_nextref = elf_tdata (rinfo->output_bfd)->verref;
4428 elf_tdata (rinfo->output_bfd)->verref = t;
4429 }
4430
4431 amt = sizeof *a;
4432 a = (Elf_Internal_Vernaux *) bfd_zalloc (rinfo->output_bfd, amt);
4433
4434 /* Note that we are copying a string pointer here, and testing it
4435 above. If bfd_elf_string_from_elf_section is ever changed to
4436 discard the string data when low in memory, this will have to be
4437 fixed. */
4438 a->vna_nodename = h->verinfo.verdef->vd_nodename;
4439
4440 a->vna_flags = h->verinfo.verdef->vd_flags;
4441 a->vna_nextptr = t->vn_auxptr;
4442
4443 h->verinfo.verdef->vd_exp_refno = rinfo->vers;
4444 ++rinfo->vers;
4445
4446 a->vna_other = h->verinfo.verdef->vd_exp_refno + 1;
4447
4448 t->vn_auxptr = a;
4449
4450 return TRUE;
4451 }
4452
4453 /* Figure out appropriate versions for all the symbols. We may not
4454 have the version number script until we have read all of the input
4455 files, so until that point we don't know which symbols should be
4456 local. This function is called via elf_link_hash_traverse. */
4457
4458 static bfd_boolean
elf_link_assign_sym_version(h,data)4459 elf_link_assign_sym_version (h, data)
4460 struct elf_link_hash_entry *h;
4461 PTR data;
4462 {
4463 struct elf_assign_sym_version_info *sinfo;
4464 struct bfd_link_info *info;
4465 struct elf_backend_data *bed;
4466 struct elf_info_failed eif;
4467 char *p;
4468 bfd_size_type amt;
4469
4470 sinfo = (struct elf_assign_sym_version_info *) data;
4471 info = sinfo->info;
4472
4473 if (h->root.type == bfd_link_hash_warning)
4474 h = (struct elf_link_hash_entry *) h->root.u.i.link;
4475
4476 /* Fix the symbol flags. */
4477 eif.failed = FALSE;
4478 eif.info = info;
4479 if (! elf_fix_symbol_flags (h, &eif))
4480 {
4481 if (eif.failed)
4482 sinfo->failed = TRUE;
4483 return FALSE;
4484 }
4485
4486 /* We only need version numbers for symbols defined in regular
4487 objects. */
4488 if ((h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0)
4489 return TRUE;
4490
4491 bed = get_elf_backend_data (sinfo->output_bfd);
4492 p = strchr (h->root.root.string, ELF_VER_CHR);
4493 if (p != NULL && h->verinfo.vertree == NULL)
4494 {
4495 struct bfd_elf_version_tree *t;
4496 bfd_boolean hidden;
4497
4498 hidden = TRUE;
4499
4500 /* There are two consecutive ELF_VER_CHR characters if this is
4501 not a hidden symbol. */
4502 ++p;
4503 if (*p == ELF_VER_CHR)
4504 {
4505 hidden = FALSE;
4506 ++p;
4507 }
4508
4509 /* If there is no version string, we can just return out. */
4510 if (*p == '\0')
4511 {
4512 if (hidden)
4513 h->elf_link_hash_flags |= ELF_LINK_HIDDEN;
4514 return TRUE;
4515 }
4516
4517 /* Look for the version. If we find it, it is no longer weak. */
4518 for (t = sinfo->verdefs; t != NULL; t = t->next)
4519 {
4520 if (strcmp (t->name, p) == 0)
4521 {
4522 size_t len;
4523 char *alc;
4524 struct bfd_elf_version_expr *d;
4525
4526 len = p - h->root.root.string;
4527 alc = bfd_malloc ((bfd_size_type) len);
4528 if (alc == NULL)
4529 return FALSE;
4530 memcpy (alc, h->root.root.string, len - 1);
4531 alc[len - 1] = '\0';
4532 if (alc[len - 2] == ELF_VER_CHR)
4533 alc[len - 2] = '\0';
4534
4535 h->verinfo.vertree = t;
4536 t->used = TRUE;
4537 d = NULL;
4538
4539 if (t->globals != NULL)
4540 {
4541 for (d = t->globals; d != NULL; d = d->next)
4542 if ((*d->match) (d, alc))
4543 break;
4544 }
4545
4546 /* See if there is anything to force this symbol to
4547 local scope. */
4548 if (d == NULL && t->locals != NULL)
4549 {
4550 for (d = t->locals; d != NULL; d = d->next)
4551 {
4552 if ((*d->match) (d, alc))
4553 {
4554 if (h->dynindx != -1
4555 && info->shared
4556 && ! info->export_dynamic)
4557 {
4558 (*bed->elf_backend_hide_symbol) (info, h, TRUE);
4559 }
4560
4561 break;
4562 }
4563 }
4564 }
4565
4566 free (alc);
4567 break;
4568 }
4569 }
4570
4571 /* If we are building an application, we need to create a
4572 version node for this version. */
4573 if (t == NULL && ! info->shared)
4574 {
4575 struct bfd_elf_version_tree **pp;
4576 int version_index;
4577
4578 /* If we aren't going to export this symbol, we don't need
4579 to worry about it. */
4580 if (h->dynindx == -1)
4581 return TRUE;
4582
4583 amt = sizeof *t;
4584 t = ((struct bfd_elf_version_tree *)
4585 bfd_alloc (sinfo->output_bfd, amt));
4586 if (t == NULL)
4587 {
4588 sinfo->failed = TRUE;
4589 return FALSE;
4590 }
4591
4592 t->next = NULL;
4593 t->name = p;
4594 t->globals = NULL;
4595 t->locals = NULL;
4596 t->deps = NULL;
4597 t->name_indx = (unsigned int) -1;
4598 t->used = TRUE;
4599
4600 version_index = 1;
4601 /* Don't count anonymous version tag. */
4602 if (sinfo->verdefs != NULL && sinfo->verdefs->vernum == 0)
4603 version_index = 0;
4604 for (pp = &sinfo->verdefs; *pp != NULL; pp = &(*pp)->next)
4605 ++version_index;
4606 t->vernum = version_index;
4607
4608 *pp = t;
4609
4610 h->verinfo.vertree = t;
4611 }
4612 else if (t == NULL)
4613 {
4614 /* We could not find the version for a symbol when
4615 generating a shared archive. Return an error. */
4616 (*_bfd_error_handler)
4617 (_("%s: undefined versioned symbol name %s"),
4618 bfd_get_filename (sinfo->output_bfd), h->root.root.string);
4619 bfd_set_error (bfd_error_bad_value);
4620 sinfo->failed = TRUE;
4621 return FALSE;
4622 }
4623
4624 if (hidden)
4625 h->elf_link_hash_flags |= ELF_LINK_HIDDEN;
4626 }
4627
4628 /* If we don't have a version for this symbol, see if we can find
4629 something. */
4630 if (h->verinfo.vertree == NULL && sinfo->verdefs != NULL)
4631 {
4632 struct bfd_elf_version_tree *t;
4633 struct bfd_elf_version_tree *local_ver;
4634 struct bfd_elf_version_expr *d;
4635
4636 /* See if can find what version this symbol is in. If the
4637 symbol is supposed to be local, then don't actually register
4638 it. */
4639 local_ver = NULL;
4640 for (t = sinfo->verdefs; t != NULL; t = t->next)
4641 {
4642 if (t->globals != NULL)
4643 {
4644 bfd_boolean matched;
4645
4646 matched = FALSE;
4647 for (d = t->globals; d != NULL; d = d->next)
4648 {
4649 if ((*d->match) (d, h->root.root.string))
4650 {
4651 if (d->symver)
4652 matched = TRUE;
4653 else
4654 {
4655 /* There is a version without definition. Make
4656 the symbol the default definition for this
4657 version. */
4658 h->verinfo.vertree = t;
4659 local_ver = NULL;
4660 d->script = 1;
4661 break;
4662 }
4663 }
4664 }
4665
4666 if (d != NULL)
4667 break;
4668 else if (matched)
4669 /* There is no undefined version for this symbol. Hide the
4670 default one. */
4671 (*bed->elf_backend_hide_symbol) (info, h, TRUE);
4672 }
4673
4674 if (t->locals != NULL)
4675 {
4676 for (d = t->locals; d != NULL; d = d->next)
4677 {
4678 /* If the match is "*", keep looking for a more
4679 explicit, perhaps even global, match. */
4680 if (d->pattern[0] == '*' && d->pattern[1] == '\0')
4681 local_ver = t;
4682 else if ((*d->match) (d, h->root.root.string))
4683 {
4684 local_ver = t;
4685 break;
4686 }
4687 }
4688
4689 if (d != NULL)
4690 break;
4691 }
4692 }
4693
4694 if (local_ver != NULL)
4695 {
4696 h->verinfo.vertree = local_ver;
4697 if (h->dynindx != -1
4698 && info->shared
4699 && ! info->export_dynamic)
4700 {
4701 (*bed->elf_backend_hide_symbol) (info, h, TRUE);
4702 }
4703 }
4704 }
4705
4706 return TRUE;
4707 }
4708
4709 /* Final phase of ELF linker. */
4710
4711 /* A structure we use to avoid passing large numbers of arguments. */
4712
4713 struct elf_final_link_info
4714 {
4715 /* General link information. */
4716 struct bfd_link_info *info;
4717 /* Output BFD. */
4718 bfd *output_bfd;
4719 /* Symbol string table. */
4720 struct bfd_strtab_hash *symstrtab;
4721 /* .dynsym section. */
4722 asection *dynsym_sec;
4723 /* .hash section. */
4724 asection *hash_sec;
4725 /* symbol version section (.gnu.version). */
4726 asection *symver_sec;
4727 /* first SHF_TLS section (if any). */
4728 asection *first_tls_sec;
4729 /* Buffer large enough to hold contents of any section. */
4730 bfd_byte *contents;
4731 /* Buffer large enough to hold external relocs of any section. */
4732 PTR external_relocs;
4733 /* Buffer large enough to hold internal relocs of any section. */
4734 Elf_Internal_Rela *internal_relocs;
4735 /* Buffer large enough to hold external local symbols of any input
4736 BFD. */
4737 Elf_External_Sym *external_syms;
4738 /* And a buffer for symbol section indices. */
4739 Elf_External_Sym_Shndx *locsym_shndx;
4740 /* Buffer large enough to hold internal local symbols of any input
4741 BFD. */
4742 Elf_Internal_Sym *internal_syms;
4743 /* Array large enough to hold a symbol index for each local symbol
4744 of any input BFD. */
4745 long *indices;
4746 /* Array large enough to hold a section pointer for each local
4747 symbol of any input BFD. */
4748 asection **sections;
4749 /* Buffer to hold swapped out symbols. */
4750 Elf_External_Sym *symbuf;
4751 /* And one for symbol section indices. */
4752 Elf_External_Sym_Shndx *symshndxbuf;
4753 /* Number of swapped out symbols in buffer. */
4754 size_t symbuf_count;
4755 /* Number of symbols which fit in symbuf. */
4756 size_t symbuf_size;
4757 /* And same for symshndxbuf. */
4758 size_t shndxbuf_size;
4759 };
4760
4761 static bfd_boolean elf_link_output_sym
4762 PARAMS ((struct elf_final_link_info *, const char *,
4763 Elf_Internal_Sym *, asection *));
4764 static bfd_boolean elf_link_flush_output_syms
4765 PARAMS ((struct elf_final_link_info *));
4766 static bfd_boolean elf_link_output_extsym
4767 PARAMS ((struct elf_link_hash_entry *, PTR));
4768 static bfd_boolean elf_link_sec_merge_syms
4769 PARAMS ((struct elf_link_hash_entry *, PTR));
4770 static bfd_boolean elf_link_check_versioned_symbol
4771 PARAMS ((struct bfd_link_info *, struct elf_link_hash_entry *));
4772 static bfd_boolean elf_link_input_bfd
4773 PARAMS ((struct elf_final_link_info *, bfd *));
4774 static bfd_boolean elf_reloc_link_order
4775 PARAMS ((bfd *, struct bfd_link_info *, asection *,
4776 struct bfd_link_order *));
4777
4778 /* This struct is used to pass information to elf_link_output_extsym. */
4779
4780 struct elf_outext_info
4781 {
4782 bfd_boolean failed;
4783 bfd_boolean localsyms;
4784 struct elf_final_link_info *finfo;
4785 };
4786
4787 /* Compute the size of, and allocate space for, REL_HDR which is the
4788 section header for a section containing relocations for O. */
4789
4790 static bfd_boolean
elf_link_size_reloc_section(abfd,rel_hdr,o)4791 elf_link_size_reloc_section (abfd, rel_hdr, o)
4792 bfd *abfd;
4793 Elf_Internal_Shdr *rel_hdr;
4794 asection *o;
4795 {
4796 bfd_size_type reloc_count;
4797 bfd_size_type num_rel_hashes;
4798
4799 /* Figure out how many relocations there will be. */
4800 if (rel_hdr == &elf_section_data (o)->rel_hdr)
4801 reloc_count = elf_section_data (o)->rel_count;
4802 else
4803 reloc_count = elf_section_data (o)->rel_count2;
4804
4805 num_rel_hashes = o->reloc_count;
4806 if (num_rel_hashes < reloc_count)
4807 num_rel_hashes = reloc_count;
4808
4809 /* That allows us to calculate the size of the section. */
4810 rel_hdr->sh_size = rel_hdr->sh_entsize * reloc_count;
4811
4812 /* The contents field must last into write_object_contents, so we
4813 allocate it with bfd_alloc rather than malloc. Also since we
4814 cannot be sure that the contents will actually be filled in,
4815 we zero the allocated space. */
4816 rel_hdr->contents = (PTR) bfd_zalloc (abfd, rel_hdr->sh_size);
4817 if (rel_hdr->contents == NULL && rel_hdr->sh_size != 0)
4818 return FALSE;
4819
4820 /* We only allocate one set of hash entries, so we only do it the
4821 first time we are called. */
4822 if (elf_section_data (o)->rel_hashes == NULL
4823 && num_rel_hashes)
4824 {
4825 struct elf_link_hash_entry **p;
4826
4827 p = ((struct elf_link_hash_entry **)
4828 bfd_zmalloc (num_rel_hashes
4829 * sizeof (struct elf_link_hash_entry *)));
4830 if (p == NULL)
4831 return FALSE;
4832
4833 elf_section_data (o)->rel_hashes = p;
4834 }
4835
4836 return TRUE;
4837 }
4838
4839 /* When performing a relocateable link, the input relocations are
4840 preserved. But, if they reference global symbols, the indices
4841 referenced must be updated. Update all the relocations in
4842 REL_HDR (there are COUNT of them), using the data in REL_HASH. */
4843
4844 static void
elf_link_adjust_relocs(abfd,rel_hdr,count,rel_hash)4845 elf_link_adjust_relocs (abfd, rel_hdr, count, rel_hash)
4846 bfd *abfd;
4847 Elf_Internal_Shdr *rel_hdr;
4848 unsigned int count;
4849 struct elf_link_hash_entry **rel_hash;
4850 {
4851 unsigned int i;
4852 struct elf_backend_data *bed = get_elf_backend_data (abfd);
4853 bfd_byte *erela;
4854 void (*swap_in) PARAMS ((bfd *, const bfd_byte *, Elf_Internal_Rela *));
4855 void (*swap_out) PARAMS ((bfd *, const Elf_Internal_Rela *, bfd_byte *));
4856
4857 if (rel_hdr->sh_entsize == sizeof (Elf_External_Rel))
4858 {
4859 swap_in = bed->s->swap_reloc_in;
4860 swap_out = bed->s->swap_reloc_out;
4861 }
4862 else if (rel_hdr->sh_entsize == sizeof (Elf_External_Rela))
4863 {
4864 swap_in = bed->s->swap_reloca_in;
4865 swap_out = bed->s->swap_reloca_out;
4866 }
4867 else
4868 abort ();
4869
4870 if (bed->s->int_rels_per_ext_rel > MAX_INT_RELS_PER_EXT_REL)
4871 abort ();
4872
4873 erela = rel_hdr->contents;
4874 for (i = 0; i < count; i++, rel_hash++, erela += rel_hdr->sh_entsize)
4875 {
4876 Elf_Internal_Rela irela[MAX_INT_RELS_PER_EXT_REL];
4877 unsigned int j;
4878
4879 if (*rel_hash == NULL)
4880 continue;
4881
4882 BFD_ASSERT ((*rel_hash)->indx >= 0);
4883
4884 (*swap_in) (abfd, erela, irela);
4885 for (j = 0; j < bed->s->int_rels_per_ext_rel; j++)
4886 irela[j].r_info = ELF_R_INFO ((*rel_hash)->indx,
4887 ELF_R_TYPE (irela[j].r_info));
4888 (*swap_out) (abfd, irela, erela);
4889 }
4890 }
4891
4892 struct elf_link_sort_rela
4893 {
4894 bfd_vma offset;
4895 enum elf_reloc_type_class type;
4896 /* We use this as an array of size int_rels_per_ext_rel. */
4897 Elf_Internal_Rela rela[1];
4898 };
4899
4900 static int
elf_link_sort_cmp1(A,B)4901 elf_link_sort_cmp1 (A, B)
4902 const PTR A;
4903 const PTR B;
4904 {
4905 struct elf_link_sort_rela *a = (struct elf_link_sort_rela *) A;
4906 struct elf_link_sort_rela *b = (struct elf_link_sort_rela *) B;
4907 int relativea, relativeb;
4908
4909 relativea = a->type == reloc_class_relative;
4910 relativeb = b->type == reloc_class_relative;
4911
4912 if (relativea < relativeb)
4913 return 1;
4914 if (relativea > relativeb)
4915 return -1;
4916 if (ELF_R_SYM (a->rela->r_info) < ELF_R_SYM (b->rela->r_info))
4917 return -1;
4918 if (ELF_R_SYM (a->rela->r_info) > ELF_R_SYM (b->rela->r_info))
4919 return 1;
4920 if (a->rela->r_offset < b->rela->r_offset)
4921 return -1;
4922 if (a->rela->r_offset > b->rela->r_offset)
4923 return 1;
4924 return 0;
4925 }
4926
4927 static int
elf_link_sort_cmp2(A,B)4928 elf_link_sort_cmp2 (A, B)
4929 const PTR A;
4930 const PTR B;
4931 {
4932 struct elf_link_sort_rela *a = (struct elf_link_sort_rela *) A;
4933 struct elf_link_sort_rela *b = (struct elf_link_sort_rela *) B;
4934 int copya, copyb;
4935
4936 if (a->offset < b->offset)
4937 return -1;
4938 if (a->offset > b->offset)
4939 return 1;
4940 copya = (a->type == reloc_class_copy) * 2 + (a->type == reloc_class_plt);
4941 copyb = (b->type == reloc_class_copy) * 2 + (b->type == reloc_class_plt);
4942 if (copya < copyb)
4943 return -1;
4944 if (copya > copyb)
4945 return 1;
4946 if (a->rela->r_offset < b->rela->r_offset)
4947 return -1;
4948 if (a->rela->r_offset > b->rela->r_offset)
4949 return 1;
4950 return 0;
4951 }
4952
4953 static size_t
elf_link_sort_relocs(abfd,info,psec)4954 elf_link_sort_relocs (abfd, info, psec)
4955 bfd *abfd;
4956 struct bfd_link_info *info;
4957 asection **psec;
4958 {
4959 bfd *dynobj = elf_hash_table (info)->dynobj;
4960 asection *reldyn, *o;
4961 bfd_size_type count, size;
4962 size_t i, ret, sort_elt, ext_size;
4963 bfd_byte *sort, *s_non_relative, *p;
4964 struct elf_link_sort_rela *sq;
4965 struct elf_backend_data *bed = get_elf_backend_data (abfd);
4966 int i2e = bed->s->int_rels_per_ext_rel;
4967 void (*swap_in) PARAMS ((bfd *, const bfd_byte *, Elf_Internal_Rela *));
4968 void (*swap_out) PARAMS ((bfd *, const Elf_Internal_Rela *, bfd_byte *));
4969
4970 reldyn = bfd_get_section_by_name (abfd, ".rela.dyn");
4971 if (reldyn == NULL || reldyn->_raw_size == 0)
4972 {
4973 reldyn = bfd_get_section_by_name (abfd, ".rel.dyn");
4974 if (reldyn == NULL || reldyn->_raw_size == 0)
4975 return 0;
4976 ext_size = sizeof (Elf_External_Rel);
4977 swap_in = bed->s->swap_reloc_in;
4978 swap_out = bed->s->swap_reloc_out;
4979 }
4980 else
4981 {
4982 ext_size = sizeof (Elf_External_Rela);
4983 swap_in = bed->s->swap_reloca_in;
4984 swap_out = bed->s->swap_reloca_out;
4985 }
4986 count = reldyn->_raw_size / ext_size;
4987
4988 size = 0;
4989 for (o = dynobj->sections; o != NULL; o = o->next)
4990 if ((o->flags & (SEC_HAS_CONTENTS|SEC_LINKER_CREATED))
4991 == (SEC_HAS_CONTENTS|SEC_LINKER_CREATED)
4992 && o->output_section == reldyn)
4993 size += o->_raw_size;
4994
4995 if (size != reldyn->_raw_size)
4996 return 0;
4997
4998 sort_elt = (sizeof (struct elf_link_sort_rela)
4999 + (i2e - 1) * sizeof (Elf_Internal_Rela));
5000 sort = bfd_zmalloc (sort_elt * count);
5001 if (sort == NULL)
5002 {
5003 (*info->callbacks->warning)
5004 (info, _("Not enough memory to sort relocations"), 0, abfd, 0,
5005 (bfd_vma) 0);
5006 return 0;
5007 }
5008
5009 for (o = dynobj->sections; o != NULL; o = o->next)
5010 if ((o->flags & (SEC_HAS_CONTENTS|SEC_LINKER_CREATED))
5011 == (SEC_HAS_CONTENTS|SEC_LINKER_CREATED)
5012 && o->output_section == reldyn)
5013 {
5014 bfd_byte *erel, *erelend;
5015
5016 erel = o->contents;
5017 erelend = o->contents + o->_raw_size;
5018 p = sort + o->output_offset / ext_size * sort_elt;
5019 while (erel < erelend)
5020 {
5021 struct elf_link_sort_rela *s = (struct elf_link_sort_rela *) p;
5022 (*swap_in) (abfd, erel, s->rela);
5023 s->type = (*bed->elf_backend_reloc_type_class) (s->rela);
5024 p += sort_elt;
5025 erel += ext_size;
5026 }
5027 }
5028
5029 qsort (sort, (size_t) count, sort_elt, elf_link_sort_cmp1);
5030
5031 for (i = 0, p = sort; i < count; i++, p += sort_elt)
5032 {
5033 struct elf_link_sort_rela *s = (struct elf_link_sort_rela *) p;
5034 if (s->type != reloc_class_relative)
5035 break;
5036 }
5037 ret = i;
5038 s_non_relative = p;
5039
5040 sq = (struct elf_link_sort_rela *) s_non_relative;
5041 for (; i < count; i++, p += sort_elt)
5042 {
5043 struct elf_link_sort_rela *sp = (struct elf_link_sort_rela *) p;
5044 if (ELF_R_SYM (sp->rela->r_info) != ELF_R_SYM (sq->rela->r_info))
5045 sq = sp;
5046 sp->offset = sq->rela->r_offset;
5047 }
5048
5049 qsort (s_non_relative, (size_t) count - ret, sort_elt, elf_link_sort_cmp2);
5050
5051 for (o = dynobj->sections; o != NULL; o = o->next)
5052 if ((o->flags & (SEC_HAS_CONTENTS|SEC_LINKER_CREATED))
5053 == (SEC_HAS_CONTENTS|SEC_LINKER_CREATED)
5054 && o->output_section == reldyn)
5055 {
5056 bfd_byte *erel, *erelend;
5057
5058 erel = o->contents;
5059 erelend = o->contents + o->_raw_size;
5060 p = sort + o->output_offset / ext_size * sort_elt;
5061 while (erel < erelend)
5062 {
5063 struct elf_link_sort_rela *s = (struct elf_link_sort_rela *) p;
5064 (*swap_out) (abfd, s->rela, erel);
5065 p += sort_elt;
5066 erel += ext_size;
5067 }
5068 }
5069
5070 free (sort);
5071 *psec = reldyn;
5072 return ret;
5073 }
5074
5075 /* Do the final step of an ELF link. */
5076
5077 bfd_boolean
elf_bfd_final_link(abfd,info)5078 elf_bfd_final_link (abfd, info)
5079 bfd *abfd;
5080 struct bfd_link_info *info;
5081 {
5082 bfd_boolean dynamic;
5083 bfd_boolean emit_relocs;
5084 bfd *dynobj;
5085 struct elf_final_link_info finfo;
5086 register asection *o;
5087 register struct bfd_link_order *p;
5088 register bfd *sub;
5089 bfd_size_type max_contents_size;
5090 bfd_size_type max_external_reloc_size;
5091 bfd_size_type max_internal_reloc_count;
5092 bfd_size_type max_sym_count;
5093 bfd_size_type max_sym_shndx_count;
5094 file_ptr off;
5095 Elf_Internal_Sym elfsym;
5096 unsigned int i;
5097 Elf_Internal_Shdr *symtab_hdr;
5098 Elf_Internal_Shdr *symtab_shndx_hdr;
5099 Elf_Internal_Shdr *symstrtab_hdr;
5100 struct elf_backend_data *bed = get_elf_backend_data (abfd);
5101 struct elf_outext_info eoinfo;
5102 bfd_boolean merged;
5103 size_t relativecount = 0;
5104 asection *reldyn = 0;
5105 bfd_size_type amt;
5106
5107 if (! is_elf_hash_table (info))
5108 return FALSE;
5109
5110 if (info->shared)
5111 abfd->flags |= DYNAMIC;
5112
5113 dynamic = elf_hash_table (info)->dynamic_sections_created;
5114 dynobj = elf_hash_table (info)->dynobj;
5115
5116 emit_relocs = (info->relocateable
5117 || info->emitrelocations
5118 || bed->elf_backend_emit_relocs);
5119
5120 finfo.info = info;
5121 finfo.output_bfd = abfd;
5122 finfo.symstrtab = elf_stringtab_init ();
5123 if (finfo.symstrtab == NULL)
5124 return FALSE;
5125
5126 if (! dynamic)
5127 {
5128 finfo.dynsym_sec = NULL;
5129 finfo.hash_sec = NULL;
5130 finfo.symver_sec = NULL;
5131 }
5132 else
5133 {
5134 finfo.dynsym_sec = bfd_get_section_by_name (dynobj, ".dynsym");
5135 finfo.hash_sec = bfd_get_section_by_name (dynobj, ".hash");
5136 BFD_ASSERT (finfo.dynsym_sec != NULL && finfo.hash_sec != NULL);
5137 finfo.symver_sec = bfd_get_section_by_name (dynobj, ".gnu.version");
5138 /* Note that it is OK if symver_sec is NULL. */
5139 }
5140
5141 finfo.contents = NULL;
5142 finfo.external_relocs = NULL;
5143 finfo.internal_relocs = NULL;
5144 finfo.external_syms = NULL;
5145 finfo.locsym_shndx = NULL;
5146 finfo.internal_syms = NULL;
5147 finfo.indices = NULL;
5148 finfo.sections = NULL;
5149 finfo.symbuf = NULL;
5150 finfo.symshndxbuf = NULL;
5151 finfo.symbuf_count = 0;
5152 finfo.shndxbuf_size = 0;
5153 finfo.first_tls_sec = NULL;
5154 for (o = abfd->sections; o != (asection *) NULL; o = o->next)
5155 if ((o->flags & SEC_THREAD_LOCAL) != 0
5156 && (o->flags & SEC_LOAD) != 0)
5157 {
5158 finfo.first_tls_sec = o;
5159 break;
5160 }
5161
5162 /* Count up the number of relocations we will output for each output
5163 section, so that we know the sizes of the reloc sections. We
5164 also figure out some maximum sizes. */
5165 max_contents_size = 0;
5166 max_external_reloc_size = 0;
5167 max_internal_reloc_count = 0;
5168 max_sym_count = 0;
5169 max_sym_shndx_count = 0;
5170 merged = FALSE;
5171 for (o = abfd->sections; o != (asection *) NULL; o = o->next)
5172 {
5173 struct bfd_elf_section_data *esdo = elf_section_data (o);
5174 o->reloc_count = 0;
5175
5176 for (p = o->link_order_head; p != NULL; p = p->next)
5177 {
5178 unsigned int reloc_count = 0;
5179 struct bfd_elf_section_data *esdi = NULL;
5180 unsigned int *rel_count1;
5181
5182 if (p->type == bfd_section_reloc_link_order
5183 || p->type == bfd_symbol_reloc_link_order)
5184 reloc_count = 1;
5185 else if (p->type == bfd_indirect_link_order)
5186 {
5187 asection *sec;
5188
5189 sec = p->u.indirect.section;
5190 esdi = elf_section_data (sec);
5191
5192 /* Mark all sections which are to be included in the
5193 link. This will normally be every section. We need
5194 to do this so that we can identify any sections which
5195 the linker has decided to not include. */
5196 sec->linker_mark = TRUE;
5197
5198 if (sec->flags & SEC_MERGE)
5199 merged = TRUE;
5200
5201 if (info->relocateable || info->emitrelocations)
5202 reloc_count = sec->reloc_count;
5203 else if (bed->elf_backend_count_relocs)
5204 {
5205 Elf_Internal_Rela * relocs;
5206
5207 relocs = (NAME(_bfd_elf,link_read_relocs)
5208 (abfd, sec, (PTR) NULL,
5209 (Elf_Internal_Rela *) NULL, info->keep_memory));
5210
5211 reloc_count = (*bed->elf_backend_count_relocs) (sec, relocs);
5212
5213 if (elf_section_data (o)->relocs != relocs)
5214 free (relocs);
5215 }
5216
5217 if (sec->_raw_size > max_contents_size)
5218 max_contents_size = sec->_raw_size;
5219 if (sec->_cooked_size > max_contents_size)
5220 max_contents_size = sec->_cooked_size;
5221
5222 /* We are interested in just local symbols, not all
5223 symbols. */
5224 if (bfd_get_flavour (sec->owner) == bfd_target_elf_flavour
5225 && (sec->owner->flags & DYNAMIC) == 0)
5226 {
5227 size_t sym_count;
5228
5229 if (elf_bad_symtab (sec->owner))
5230 sym_count = (elf_tdata (sec->owner)->symtab_hdr.sh_size
5231 / sizeof (Elf_External_Sym));
5232 else
5233 sym_count = elf_tdata (sec->owner)->symtab_hdr.sh_info;
5234
5235 if (sym_count > max_sym_count)
5236 max_sym_count = sym_count;
5237
5238 if (sym_count > max_sym_shndx_count
5239 && elf_symtab_shndx (sec->owner) != 0)
5240 max_sym_shndx_count = sym_count;
5241
5242 if ((sec->flags & SEC_RELOC) != 0)
5243 {
5244 size_t ext_size;
5245
5246 ext_size = elf_section_data (sec)->rel_hdr.sh_size;
5247 if (ext_size > max_external_reloc_size)
5248 max_external_reloc_size = ext_size;
5249 if (sec->reloc_count > max_internal_reloc_count)
5250 max_internal_reloc_count = sec->reloc_count;
5251 }
5252 }
5253 }
5254
5255 if (reloc_count == 0)
5256 continue;
5257
5258 o->reloc_count += reloc_count;
5259
5260 /* MIPS may have a mix of REL and RELA relocs on sections.
5261 To support this curious ABI we keep reloc counts in
5262 elf_section_data too. We must be careful to add the
5263 relocations from the input section to the right output
5264 count. FIXME: Get rid of one count. We have
5265 o->reloc_count == esdo->rel_count + esdo->rel_count2. */
5266 rel_count1 = &esdo->rel_count;
5267 if (esdi != NULL)
5268 {
5269 bfd_boolean same_size;
5270 bfd_size_type entsize1;
5271
5272 entsize1 = esdi->rel_hdr.sh_entsize;
5273 BFD_ASSERT (entsize1 == sizeof (Elf_External_Rel)
5274 || entsize1 == sizeof (Elf_External_Rela));
5275 same_size = (!o->use_rela_p
5276 == (entsize1 == sizeof (Elf_External_Rel)));
5277
5278 if (!same_size)
5279 rel_count1 = &esdo->rel_count2;
5280
5281 if (esdi->rel_hdr2 != NULL)
5282 {
5283 bfd_size_type entsize2 = esdi->rel_hdr2->sh_entsize;
5284 unsigned int alt_count;
5285 unsigned int *rel_count2;
5286
5287 BFD_ASSERT (entsize2 != entsize1
5288 && (entsize2 == sizeof (Elf_External_Rel)
5289 || entsize2 == sizeof (Elf_External_Rela)));
5290
5291 rel_count2 = &esdo->rel_count2;
5292 if (!same_size)
5293 rel_count2 = &esdo->rel_count;
5294
5295 /* The following is probably too simplistic if the
5296 backend counts output relocs unusually. */
5297 BFD_ASSERT (bed->elf_backend_count_relocs == NULL);
5298 alt_count = NUM_SHDR_ENTRIES (esdi->rel_hdr2);
5299 *rel_count2 += alt_count;
5300 reloc_count -= alt_count;
5301 }
5302 }
5303 *rel_count1 += reloc_count;
5304 }
5305
5306 if (o->reloc_count > 0)
5307 o->flags |= SEC_RELOC;
5308 else
5309 {
5310 /* Explicitly clear the SEC_RELOC flag. The linker tends to
5311 set it (this is probably a bug) and if it is set
5312 assign_section_numbers will create a reloc section. */
5313 o->flags &=~ SEC_RELOC;
5314 }
5315
5316 /* If the SEC_ALLOC flag is not set, force the section VMA to
5317 zero. This is done in elf_fake_sections as well, but forcing
5318 the VMA to 0 here will ensure that relocs against these
5319 sections are handled correctly. */
5320 if ((o->flags & SEC_ALLOC) == 0
5321 && ! o->user_set_vma)
5322 o->vma = 0;
5323 }
5324
5325 if (! info->relocateable && merged)
5326 elf_link_hash_traverse (elf_hash_table (info),
5327 elf_link_sec_merge_syms, (PTR) abfd);
5328
5329 /* Figure out the file positions for everything but the symbol table
5330 and the relocs. We set symcount to force assign_section_numbers
5331 to create a symbol table. */
5332 bfd_get_symcount (abfd) = info->strip == strip_all ? 0 : 1;
5333 BFD_ASSERT (! abfd->output_has_begun);
5334 if (! _bfd_elf_compute_section_file_positions (abfd, info))
5335 goto error_return;
5336
5337 /* That created the reloc sections. Set their sizes, and assign
5338 them file positions, and allocate some buffers. */
5339 for (o = abfd->sections; o != NULL; o = o->next)
5340 {
5341 if ((o->flags & SEC_RELOC) != 0)
5342 {
5343 if (!elf_link_size_reloc_section (abfd,
5344 &elf_section_data (o)->rel_hdr,
5345 o))
5346 goto error_return;
5347
5348 if (elf_section_data (o)->rel_hdr2
5349 && !elf_link_size_reloc_section (abfd,
5350 elf_section_data (o)->rel_hdr2,
5351 o))
5352 goto error_return;
5353 }
5354
5355 /* Now, reset REL_COUNT and REL_COUNT2 so that we can use them
5356 to count upwards while actually outputting the relocations. */
5357 elf_section_data (o)->rel_count = 0;
5358 elf_section_data (o)->rel_count2 = 0;
5359 }
5360
5361 _bfd_elf_assign_file_positions_for_relocs (abfd);
5362
5363 /* We have now assigned file positions for all the sections except
5364 .symtab and .strtab. We start the .symtab section at the current
5365 file position, and write directly to it. We build the .strtab
5366 section in memory. */
5367 bfd_get_symcount (abfd) = 0;
5368 symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
5369 /* sh_name is set in prep_headers. */
5370 symtab_hdr->sh_type = SHT_SYMTAB;
5371 /* sh_flags, sh_addr and sh_size all start off zero. */
5372 symtab_hdr->sh_entsize = sizeof (Elf_External_Sym);
5373 /* sh_link is set in assign_section_numbers. */
5374 /* sh_info is set below. */
5375 /* sh_offset is set just below. */
5376 symtab_hdr->sh_addralign = bed->s->file_align;
5377
5378 off = elf_tdata (abfd)->next_file_pos;
5379 off = _bfd_elf_assign_file_position_for_section (symtab_hdr, off, TRUE);
5380
5381 /* Note that at this point elf_tdata (abfd)->next_file_pos is
5382 incorrect. We do not yet know the size of the .symtab section.
5383 We correct next_file_pos below, after we do know the size. */
5384
5385 /* Allocate a buffer to hold swapped out symbols. This is to avoid
5386 continuously seeking to the right position in the file. */
5387 if (! info->keep_memory || max_sym_count < 20)
5388 finfo.symbuf_size = 20;
5389 else
5390 finfo.symbuf_size = max_sym_count;
5391 amt = finfo.symbuf_size;
5392 amt *= sizeof (Elf_External_Sym);
5393 finfo.symbuf = (Elf_External_Sym *) bfd_malloc (amt);
5394 if (finfo.symbuf == NULL)
5395 goto error_return;
5396 if (elf_numsections (abfd) > SHN_LORESERVE)
5397 {
5398 /* Wild guess at number of output symbols. realloc'd as needed. */
5399 amt = 2 * max_sym_count + elf_numsections (abfd) + 1000;
5400 finfo.shndxbuf_size = amt;
5401 amt *= sizeof (Elf_External_Sym_Shndx);
5402 finfo.symshndxbuf = (Elf_External_Sym_Shndx *) bfd_zmalloc (amt);
5403 if (finfo.symshndxbuf == NULL)
5404 goto error_return;
5405 }
5406
5407 /* Start writing out the symbol table. The first symbol is always a
5408 dummy symbol. */
5409 if (info->strip != strip_all
5410 || emit_relocs)
5411 {
5412 elfsym.st_value = 0;
5413 elfsym.st_size = 0;
5414 elfsym.st_info = 0;
5415 elfsym.st_other = 0;
5416 elfsym.st_shndx = SHN_UNDEF;
5417 if (! elf_link_output_sym (&finfo, (const char *) NULL,
5418 &elfsym, bfd_und_section_ptr))
5419 goto error_return;
5420 }
5421
5422 #if 0
5423 /* Some standard ELF linkers do this, but we don't because it causes
5424 bootstrap comparison failures. */
5425 /* Output a file symbol for the output file as the second symbol.
5426 We output this even if we are discarding local symbols, although
5427 I'm not sure if this is correct. */
5428 elfsym.st_value = 0;
5429 elfsym.st_size = 0;
5430 elfsym.st_info = ELF_ST_INFO (STB_LOCAL, STT_FILE);
5431 elfsym.st_other = 0;
5432 elfsym.st_shndx = SHN_ABS;
5433 if (! elf_link_output_sym (&finfo, bfd_get_filename (abfd),
5434 &elfsym, bfd_abs_section_ptr))
5435 goto error_return;
5436 #endif
5437
5438 /* Output a symbol for each section. We output these even if we are
5439 discarding local symbols, since they are used for relocs. These
5440 symbols have no names. We store the index of each one in the
5441 index field of the section, so that we can find it again when
5442 outputting relocs. */
5443 if (info->strip != strip_all
5444 || emit_relocs)
5445 {
5446 elfsym.st_size = 0;
5447 elfsym.st_info = ELF_ST_INFO (STB_LOCAL, STT_SECTION);
5448 elfsym.st_other = 0;
5449 for (i = 1; i < elf_numsections (abfd); i++)
5450 {
5451 o = section_from_elf_index (abfd, i);
5452 if (o != NULL)
5453 o->target_index = bfd_get_symcount (abfd);
5454 elfsym.st_shndx = i;
5455 if (info->relocateable || o == NULL)
5456 elfsym.st_value = 0;
5457 else
5458 elfsym.st_value = o->vma;
5459 if (! elf_link_output_sym (&finfo, (const char *) NULL,
5460 &elfsym, o))
5461 goto error_return;
5462 if (i == SHN_LORESERVE - 1)
5463 i += SHN_HIRESERVE + 1 - SHN_LORESERVE;
5464 }
5465 }
5466
5467 /* Allocate some memory to hold information read in from the input
5468 files. */
5469 if (max_contents_size != 0)
5470 {
5471 finfo.contents = (bfd_byte *) bfd_malloc (max_contents_size);
5472 if (finfo.contents == NULL)
5473 goto error_return;
5474 }
5475
5476 if (max_external_reloc_size != 0)
5477 {
5478 finfo.external_relocs = (PTR) bfd_malloc (max_external_reloc_size);
5479 if (finfo.external_relocs == NULL)
5480 goto error_return;
5481 }
5482
5483 if (max_internal_reloc_count != 0)
5484 {
5485 amt = max_internal_reloc_count * bed->s->int_rels_per_ext_rel;
5486 amt *= sizeof (Elf_Internal_Rela);
5487 finfo.internal_relocs = (Elf_Internal_Rela *) bfd_malloc (amt);
5488 if (finfo.internal_relocs == NULL)
5489 goto error_return;
5490 }
5491
5492 if (max_sym_count != 0)
5493 {
5494 amt = max_sym_count * sizeof (Elf_External_Sym);
5495 finfo.external_syms = (Elf_External_Sym *) bfd_malloc (amt);
5496 if (finfo.external_syms == NULL)
5497 goto error_return;
5498
5499 amt = max_sym_count * sizeof (Elf_Internal_Sym);
5500 finfo.internal_syms = (Elf_Internal_Sym *) bfd_malloc (amt);
5501 if (finfo.internal_syms == NULL)
5502 goto error_return;
5503
5504 amt = max_sym_count * sizeof (long);
5505 finfo.indices = (long *) bfd_malloc (amt);
5506 if (finfo.indices == NULL)
5507 goto error_return;
5508
5509 amt = max_sym_count * sizeof (asection *);
5510 finfo.sections = (asection **) bfd_malloc (amt);
5511 if (finfo.sections == NULL)
5512 goto error_return;
5513 }
5514
5515 if (max_sym_shndx_count != 0)
5516 {
5517 amt = max_sym_shndx_count * sizeof (Elf_External_Sym_Shndx);
5518 finfo.locsym_shndx = (Elf_External_Sym_Shndx *) bfd_malloc (amt);
5519 if (finfo.locsym_shndx == NULL)
5520 goto error_return;
5521 }
5522
5523 if (finfo.first_tls_sec)
5524 {
5525 unsigned int align = 0;
5526 bfd_vma base = finfo.first_tls_sec->vma, end = 0;
5527 asection *sec;
5528
5529 for (sec = finfo.first_tls_sec;
5530 sec && (sec->flags & SEC_THREAD_LOCAL);
5531 sec = sec->next)
5532 {
5533 bfd_vma size = sec->_raw_size;
5534
5535 if (bfd_get_section_alignment (abfd, sec) > align)
5536 align = bfd_get_section_alignment (abfd, sec);
5537 if (sec->_raw_size == 0 && (sec->flags & SEC_HAS_CONTENTS) == 0)
5538 {
5539 struct bfd_link_order *o;
5540
5541 size = 0;
5542 for (o = sec->link_order_head; o != NULL; o = o->next)
5543 if (size < o->offset + o->size)
5544 size = o->offset + o->size;
5545 }
5546 end = sec->vma + size;
5547 }
5548 elf_hash_table (info)->tls_segment
5549 = bfd_zalloc (abfd, sizeof (struct elf_link_tls_segment));
5550 if (elf_hash_table (info)->tls_segment == NULL)
5551 goto error_return;
5552 elf_hash_table (info)->tls_segment->start = base;
5553 elf_hash_table (info)->tls_segment->size = end - base;
5554 elf_hash_table (info)->tls_segment->align = align;
5555 }
5556
5557 /* Since ELF permits relocations to be against local symbols, we
5558 must have the local symbols available when we do the relocations.
5559 Since we would rather only read the local symbols once, and we
5560 would rather not keep them in memory, we handle all the
5561 relocations for a single input file at the same time.
5562
5563 Unfortunately, there is no way to know the total number of local
5564 symbols until we have seen all of them, and the local symbol
5565 indices precede the global symbol indices. This means that when
5566 we are generating relocateable output, and we see a reloc against
5567 a global symbol, we can not know the symbol index until we have
5568 finished examining all the local symbols to see which ones we are
5569 going to output. To deal with this, we keep the relocations in
5570 memory, and don't output them until the end of the link. This is
5571 an unfortunate waste of memory, but I don't see a good way around
5572 it. Fortunately, it only happens when performing a relocateable
5573 link, which is not the common case. FIXME: If keep_memory is set
5574 we could write the relocs out and then read them again; I don't
5575 know how bad the memory loss will be. */
5576
5577 for (sub = info->input_bfds; sub != NULL; sub = sub->link_next)
5578 sub->output_has_begun = FALSE;
5579 for (o = abfd->sections; o != NULL; o = o->next)
5580 {
5581 for (p = o->link_order_head; p != NULL; p = p->next)
5582 {
5583 if (p->type == bfd_indirect_link_order
5584 && (bfd_get_flavour ((sub = p->u.indirect.section->owner))
5585 == bfd_target_elf_flavour)
5586 && elf_elfheader (sub)->e_ident[EI_CLASS] == bed->s->elfclass)
5587 {
5588 if (! sub->output_has_begun)
5589 {
5590 if (! elf_link_input_bfd (&finfo, sub))
5591 goto error_return;
5592 sub->output_has_begun = TRUE;
5593 }
5594 }
5595 else if (p->type == bfd_section_reloc_link_order
5596 || p->type == bfd_symbol_reloc_link_order)
5597 {
5598 if (! elf_reloc_link_order (abfd, info, o, p))
5599 goto error_return;
5600 }
5601 else
5602 {
5603 if (! _bfd_default_link_order (abfd, info, o, p))
5604 goto error_return;
5605 }
5606 }
5607 }
5608
5609 /* Output any global symbols that got converted to local in a
5610 version script or due to symbol visibility. We do this in a
5611 separate step since ELF requires all local symbols to appear
5612 prior to any global symbols. FIXME: We should only do this if
5613 some global symbols were, in fact, converted to become local.
5614 FIXME: Will this work correctly with the Irix 5 linker? */
5615 eoinfo.failed = FALSE;
5616 eoinfo.finfo = &finfo;
5617 eoinfo.localsyms = TRUE;
5618 elf_link_hash_traverse (elf_hash_table (info), elf_link_output_extsym,
5619 (PTR) &eoinfo);
5620 if (eoinfo.failed)
5621 return FALSE;
5622
5623 /* That wrote out all the local symbols. Finish up the symbol table
5624 with the global symbols. Even if we want to strip everything we
5625 can, we still need to deal with those global symbols that got
5626 converted to local in a version script. */
5627
5628 /* The sh_info field records the index of the first non local symbol. */
5629 symtab_hdr->sh_info = bfd_get_symcount (abfd);
5630
5631 if (dynamic
5632 && finfo.dynsym_sec->output_section != bfd_abs_section_ptr)
5633 {
5634 Elf_Internal_Sym sym;
5635 Elf_External_Sym *dynsym =
5636 (Elf_External_Sym *) finfo.dynsym_sec->contents;
5637 long last_local = 0;
5638
5639 /* Write out the section symbols for the output sections. */
5640 if (info->shared)
5641 {
5642 asection *s;
5643
5644 sym.st_size = 0;
5645 sym.st_name = 0;
5646 sym.st_info = ELF_ST_INFO (STB_LOCAL, STT_SECTION);
5647 sym.st_other = 0;
5648
5649 for (s = abfd->sections; s != NULL; s = s->next)
5650 {
5651 int indx;
5652 Elf_External_Sym *dest;
5653
5654 indx = elf_section_data (s)->this_idx;
5655 BFD_ASSERT (indx > 0);
5656 sym.st_shndx = indx;
5657 sym.st_value = s->vma;
5658 dest = dynsym + elf_section_data (s)->dynindx;
5659 elf_swap_symbol_out (abfd, &sym, (PTR) dest, (PTR) 0);
5660 }
5661
5662 last_local = bfd_count_sections (abfd);
5663 }
5664
5665 /* Write out the local dynsyms. */
5666 if (elf_hash_table (info)->dynlocal)
5667 {
5668 struct elf_link_local_dynamic_entry *e;
5669 for (e = elf_hash_table (info)->dynlocal; e ; e = e->next)
5670 {
5671 asection *s;
5672 Elf_External_Sym *dest;
5673
5674 sym.st_size = e->isym.st_size;
5675 sym.st_other = e->isym.st_other;
5676
5677 /* Copy the internal symbol as is.
5678 Note that we saved a word of storage and overwrote
5679 the original st_name with the dynstr_index. */
5680 sym = e->isym;
5681
5682 if (e->isym.st_shndx != SHN_UNDEF
5683 && (e->isym.st_shndx < SHN_LORESERVE
5684 || e->isym.st_shndx > SHN_HIRESERVE))
5685 {
5686 s = bfd_section_from_elf_index (e->input_bfd,
5687 e->isym.st_shndx);
5688
5689 sym.st_shndx =
5690 elf_section_data (s->output_section)->this_idx;
5691 sym.st_value = (s->output_section->vma
5692 + s->output_offset
5693 + e->isym.st_value);
5694 }
5695
5696 if (last_local < e->dynindx)
5697 last_local = e->dynindx;
5698
5699 dest = dynsym + e->dynindx;
5700 elf_swap_symbol_out (abfd, &sym, (PTR) dest, (PTR) 0);
5701 }
5702 }
5703
5704 elf_section_data (finfo.dynsym_sec->output_section)->this_hdr.sh_info =
5705 last_local + 1;
5706 }
5707
5708 /* We get the global symbols from the hash table. */
5709 eoinfo.failed = FALSE;
5710 eoinfo.localsyms = FALSE;
5711 eoinfo.finfo = &finfo;
5712 elf_link_hash_traverse (elf_hash_table (info), elf_link_output_extsym,
5713 (PTR) &eoinfo);
5714 if (eoinfo.failed)
5715 return FALSE;
5716
5717 /* If backend needs to output some symbols not present in the hash
5718 table, do it now. */
5719 if (bed->elf_backend_output_arch_syms)
5720 {
5721 typedef bfd_boolean (*out_sym_func)
5722 PARAMS ((PTR, const char *, Elf_Internal_Sym *, asection *));
5723
5724 if (! ((*bed->elf_backend_output_arch_syms)
5725 (abfd, info, (PTR) &finfo, (out_sym_func) elf_link_output_sym)))
5726 return FALSE;
5727 }
5728
5729 /* Flush all symbols to the file. */
5730 if (! elf_link_flush_output_syms (&finfo))
5731 return FALSE;
5732
5733 /* Now we know the size of the symtab section. */
5734 off += symtab_hdr->sh_size;
5735
5736 symtab_shndx_hdr = &elf_tdata (abfd)->symtab_shndx_hdr;
5737 if (symtab_shndx_hdr->sh_name != 0)
5738 {
5739 symtab_shndx_hdr->sh_type = SHT_SYMTAB_SHNDX;
5740 symtab_shndx_hdr->sh_entsize = sizeof (Elf_External_Sym_Shndx);
5741 symtab_shndx_hdr->sh_addralign = sizeof (Elf_External_Sym_Shndx);
5742 amt = bfd_get_symcount (abfd) * sizeof (Elf_External_Sym_Shndx);
5743 symtab_shndx_hdr->sh_size = amt;
5744
5745 off = _bfd_elf_assign_file_position_for_section (symtab_shndx_hdr,
5746 off, TRUE);
5747
5748 if (bfd_seek (abfd, symtab_shndx_hdr->sh_offset, SEEK_SET) != 0
5749 || (bfd_bwrite ((PTR) finfo.symshndxbuf, amt, abfd) != amt))
5750 return FALSE;
5751 }
5752
5753
5754 /* Finish up and write out the symbol string table (.strtab)
5755 section. */
5756 symstrtab_hdr = &elf_tdata (abfd)->strtab_hdr;
5757 /* sh_name was set in prep_headers. */
5758 symstrtab_hdr->sh_type = SHT_STRTAB;
5759 symstrtab_hdr->sh_flags = 0;
5760 symstrtab_hdr->sh_addr = 0;
5761 symstrtab_hdr->sh_size = _bfd_stringtab_size (finfo.symstrtab);
5762 symstrtab_hdr->sh_entsize = 0;
5763 symstrtab_hdr->sh_link = 0;
5764 symstrtab_hdr->sh_info = 0;
5765 /* sh_offset is set just below. */
5766 symstrtab_hdr->sh_addralign = 1;
5767
5768 off = _bfd_elf_assign_file_position_for_section (symstrtab_hdr, off, TRUE);
5769 elf_tdata (abfd)->next_file_pos = off;
5770
5771 if (bfd_get_symcount (abfd) > 0)
5772 {
5773 if (bfd_seek (abfd, symstrtab_hdr->sh_offset, SEEK_SET) != 0
5774 || ! _bfd_stringtab_emit (abfd, finfo.symstrtab))
5775 return FALSE;
5776 }
5777
5778 /* Adjust the relocs to have the correct symbol indices. */
5779 for (o = abfd->sections; o != NULL; o = o->next)
5780 {
5781 if ((o->flags & SEC_RELOC) == 0)
5782 continue;
5783
5784 elf_link_adjust_relocs (abfd, &elf_section_data (o)->rel_hdr,
5785 elf_section_data (o)->rel_count,
5786 elf_section_data (o)->rel_hashes);
5787 if (elf_section_data (o)->rel_hdr2 != NULL)
5788 elf_link_adjust_relocs (abfd, elf_section_data (o)->rel_hdr2,
5789 elf_section_data (o)->rel_count2,
5790 (elf_section_data (o)->rel_hashes
5791 + elf_section_data (o)->rel_count));
5792
5793 /* Set the reloc_count field to 0 to prevent write_relocs from
5794 trying to swap the relocs out itself. */
5795 o->reloc_count = 0;
5796 }
5797
5798 if (dynamic && info->combreloc && dynobj != NULL)
5799 relativecount = elf_link_sort_relocs (abfd, info, &reldyn);
5800
5801 /* If we are linking against a dynamic object, or generating a
5802 shared library, finish up the dynamic linking information. */
5803 if (dynamic)
5804 {
5805 Elf_External_Dyn *dyncon, *dynconend;
5806
5807 /* Fix up .dynamic entries. */
5808 o = bfd_get_section_by_name (dynobj, ".dynamic");
5809 BFD_ASSERT (o != NULL);
5810
5811 dyncon = (Elf_External_Dyn *) o->contents;
5812 dynconend = (Elf_External_Dyn *) (o->contents + o->_raw_size);
5813 for (; dyncon < dynconend; dyncon++)
5814 {
5815 Elf_Internal_Dyn dyn;
5816 const char *name;
5817 unsigned int type;
5818
5819 elf_swap_dyn_in (dynobj, dyncon, &dyn);
5820
5821 switch (dyn.d_tag)
5822 {
5823 default:
5824 break;
5825 case DT_NULL:
5826 if (relativecount > 0 && dyncon + 1 < dynconend)
5827 {
5828 switch (elf_section_data (reldyn)->this_hdr.sh_type)
5829 {
5830 case SHT_REL: dyn.d_tag = DT_RELCOUNT; break;
5831 case SHT_RELA: dyn.d_tag = DT_RELACOUNT; break;
5832 default: break;
5833 }
5834 if (dyn.d_tag != DT_NULL)
5835 {
5836 dyn.d_un.d_val = relativecount;
5837 elf_swap_dyn_out (dynobj, &dyn, dyncon);
5838 relativecount = 0;
5839 }
5840 }
5841 break;
5842 case DT_INIT:
5843 name = info->init_function;
5844 goto get_sym;
5845 case DT_FINI:
5846 name = info->fini_function;
5847 get_sym:
5848 {
5849 struct elf_link_hash_entry *h;
5850
5851 h = elf_link_hash_lookup (elf_hash_table (info), name,
5852 FALSE, FALSE, TRUE);
5853 if (h != NULL
5854 && (h->root.type == bfd_link_hash_defined
5855 || h->root.type == bfd_link_hash_defweak))
5856 {
5857 dyn.d_un.d_val = h->root.u.def.value;
5858 o = h->root.u.def.section;
5859 if (o->output_section != NULL)
5860 dyn.d_un.d_val += (o->output_section->vma
5861 + o->output_offset);
5862 else
5863 {
5864 /* The symbol is imported from another shared
5865 library and does not apply to this one. */
5866 dyn.d_un.d_val = 0;
5867 }
5868
5869 elf_swap_dyn_out (dynobj, &dyn, dyncon);
5870 }
5871 }
5872 break;
5873
5874 case DT_PREINIT_ARRAYSZ:
5875 name = ".preinit_array";
5876 goto get_size;
5877 case DT_INIT_ARRAYSZ:
5878 name = ".init_array";
5879 goto get_size;
5880 case DT_FINI_ARRAYSZ:
5881 name = ".fini_array";
5882 get_size:
5883 o = bfd_get_section_by_name (abfd, name);
5884 if (o == NULL)
5885 {
5886 (*_bfd_error_handler)
5887 (_("%s: could not find output section %s"),
5888 bfd_get_filename (abfd), name);
5889 goto error_return;
5890 }
5891 if (o->_raw_size == 0)
5892 (*_bfd_error_handler)
5893 (_("warning: %s section has zero size"), name);
5894 dyn.d_un.d_val = o->_raw_size;
5895 elf_swap_dyn_out (dynobj, &dyn, dyncon);
5896 break;
5897
5898 case DT_PREINIT_ARRAY:
5899 name = ".preinit_array";
5900 goto get_vma;
5901 case DT_INIT_ARRAY:
5902 name = ".init_array";
5903 goto get_vma;
5904 case DT_FINI_ARRAY:
5905 name = ".fini_array";
5906 goto get_vma;
5907
5908 case DT_HASH:
5909 name = ".hash";
5910 goto get_vma;
5911 case DT_STRTAB:
5912 name = ".dynstr";
5913 goto get_vma;
5914 case DT_SYMTAB:
5915 name = ".dynsym";
5916 goto get_vma;
5917 case DT_VERDEF:
5918 name = ".gnu.version_d";
5919 goto get_vma;
5920 case DT_VERNEED:
5921 name = ".gnu.version_r";
5922 goto get_vma;
5923 case DT_VERSYM:
5924 name = ".gnu.version";
5925 get_vma:
5926 o = bfd_get_section_by_name (abfd, name);
5927 if (o == NULL)
5928 {
5929 (*_bfd_error_handler)
5930 (_("%s: could not find output section %s"),
5931 bfd_get_filename (abfd), name);
5932 goto error_return;
5933 }
5934 dyn.d_un.d_ptr = o->vma;
5935 elf_swap_dyn_out (dynobj, &dyn, dyncon);
5936 break;
5937
5938 case DT_REL:
5939 case DT_RELA:
5940 case DT_RELSZ:
5941 case DT_RELASZ:
5942 if (dyn.d_tag == DT_REL || dyn.d_tag == DT_RELSZ)
5943 type = SHT_REL;
5944 else
5945 type = SHT_RELA;
5946 dyn.d_un.d_val = 0;
5947 for (i = 1; i < elf_numsections (abfd); i++)
5948 {
5949 Elf_Internal_Shdr *hdr;
5950
5951 hdr = elf_elfsections (abfd)[i];
5952 if (hdr->sh_type == type
5953 && (hdr->sh_flags & SHF_ALLOC) != 0)
5954 {
5955 if (dyn.d_tag == DT_RELSZ || dyn.d_tag == DT_RELASZ)
5956 dyn.d_un.d_val += hdr->sh_size;
5957 else
5958 {
5959 if (dyn.d_un.d_val == 0
5960 || hdr->sh_addr < dyn.d_un.d_val)
5961 dyn.d_un.d_val = hdr->sh_addr;
5962 }
5963 }
5964 }
5965 elf_swap_dyn_out (dynobj, &dyn, dyncon);
5966 break;
5967 }
5968 }
5969 }
5970
5971 /* If we have created any dynamic sections, then output them. */
5972 if (dynobj != NULL)
5973 {
5974 if (! (*bed->elf_backend_finish_dynamic_sections) (abfd, info))
5975 goto error_return;
5976
5977 for (o = dynobj->sections; o != NULL; o = o->next)
5978 {
5979 if ((o->flags & SEC_HAS_CONTENTS) == 0
5980 || o->_raw_size == 0
5981 || o->output_section == bfd_abs_section_ptr)
5982 continue;
5983 if ((o->flags & SEC_LINKER_CREATED) == 0)
5984 {
5985 /* At this point, we are only interested in sections
5986 created by elf_link_create_dynamic_sections. */
5987 continue;
5988 }
5989 if ((elf_section_data (o->output_section)->this_hdr.sh_type
5990 != SHT_STRTAB)
5991 || strcmp (bfd_get_section_name (abfd, o), ".dynstr") != 0)
5992 {
5993 if (! bfd_set_section_contents (abfd, o->output_section,
5994 o->contents,
5995 (file_ptr) o->output_offset,
5996 o->_raw_size))
5997 goto error_return;
5998 }
5999 else
6000 {
6001 /* The contents of the .dynstr section are actually in a
6002 stringtab. */
6003 off = elf_section_data (o->output_section)->this_hdr.sh_offset;
6004 if (bfd_seek (abfd, off, SEEK_SET) != 0
6005 || ! _bfd_elf_strtab_emit (abfd,
6006 elf_hash_table (info)->dynstr))
6007 goto error_return;
6008 }
6009 }
6010 }
6011
6012 if (info->relocateable)
6013 {
6014 bfd_boolean failed = FALSE;
6015
6016 bfd_map_over_sections (abfd, bfd_elf_set_group_contents, &failed);
6017 if (failed)
6018 goto error_return;
6019 }
6020
6021 /* If we have optimized stabs strings, output them. */
6022 if (elf_hash_table (info)->stab_info != NULL)
6023 {
6024 if (! _bfd_write_stab_strings (abfd, &elf_hash_table (info)->stab_info))
6025 goto error_return;
6026 }
6027
6028 if (info->eh_frame_hdr)
6029 {
6030 if (! _bfd_elf_write_section_eh_frame_hdr (abfd, info))
6031 goto error_return;
6032 }
6033
6034 if (finfo.symstrtab != NULL)
6035 _bfd_stringtab_free (finfo.symstrtab);
6036 if (finfo.contents != NULL)
6037 free (finfo.contents);
6038 if (finfo.external_relocs != NULL)
6039 free (finfo.external_relocs);
6040 if (finfo.internal_relocs != NULL)
6041 free (finfo.internal_relocs);
6042 if (finfo.external_syms != NULL)
6043 free (finfo.external_syms);
6044 if (finfo.locsym_shndx != NULL)
6045 free (finfo.locsym_shndx);
6046 if (finfo.internal_syms != NULL)
6047 free (finfo.internal_syms);
6048 if (finfo.indices != NULL)
6049 free (finfo.indices);
6050 if (finfo.sections != NULL)
6051 free (finfo.sections);
6052 if (finfo.symbuf != NULL)
6053 free (finfo.symbuf);
6054 if (finfo.symshndxbuf != NULL)
6055 free (finfo.symshndxbuf);
6056 for (o = abfd->sections; o != NULL; o = o->next)
6057 {
6058 if ((o->flags & SEC_RELOC) != 0
6059 && elf_section_data (o)->rel_hashes != NULL)
6060 free (elf_section_data (o)->rel_hashes);
6061 }
6062
6063 elf_tdata (abfd)->linker = TRUE;
6064
6065 return TRUE;
6066
6067 error_return:
6068 if (finfo.symstrtab != NULL)
6069 _bfd_stringtab_free (finfo.symstrtab);
6070 if (finfo.contents != NULL)
6071 free (finfo.contents);
6072 if (finfo.external_relocs != NULL)
6073 free (finfo.external_relocs);
6074 if (finfo.internal_relocs != NULL)
6075 free (finfo.internal_relocs);
6076 if (finfo.external_syms != NULL)
6077 free (finfo.external_syms);
6078 if (finfo.locsym_shndx != NULL)
6079 free (finfo.locsym_shndx);
6080 if (finfo.internal_syms != NULL)
6081 free (finfo.internal_syms);
6082 if (finfo.indices != NULL)
6083 free (finfo.indices);
6084 if (finfo.sections != NULL)
6085 free (finfo.sections);
6086 if (finfo.symbuf != NULL)
6087 free (finfo.symbuf);
6088 if (finfo.symshndxbuf != NULL)
6089 free (finfo.symshndxbuf);
6090 for (o = abfd->sections; o != NULL; o = o->next)
6091 {
6092 if ((o->flags & SEC_RELOC) != 0
6093 && elf_section_data (o)->rel_hashes != NULL)
6094 free (elf_section_data (o)->rel_hashes);
6095 }
6096
6097 return FALSE;
6098 }
6099
6100 /* Add a symbol to the output symbol table. */
6101
6102 static bfd_boolean
elf_link_output_sym(finfo,name,elfsym,input_sec)6103 elf_link_output_sym (finfo, name, elfsym, input_sec)
6104 struct elf_final_link_info *finfo;
6105 const char *name;
6106 Elf_Internal_Sym *elfsym;
6107 asection *input_sec;
6108 {
6109 Elf_External_Sym *dest;
6110 Elf_External_Sym_Shndx *destshndx;
6111 bfd_boolean (*output_symbol_hook)
6112 PARAMS ((bfd *, struct bfd_link_info *info, const char *,
6113 Elf_Internal_Sym *, asection *));
6114
6115 output_symbol_hook = get_elf_backend_data (finfo->output_bfd)->
6116 elf_backend_link_output_symbol_hook;
6117 if (output_symbol_hook != NULL)
6118 {
6119 if (! ((*output_symbol_hook)
6120 (finfo->output_bfd, finfo->info, name, elfsym, input_sec)))
6121 return FALSE;
6122 }
6123
6124 if (name == (const char *) NULL || *name == '\0')
6125 elfsym->st_name = 0;
6126 else if (input_sec->flags & SEC_EXCLUDE)
6127 elfsym->st_name = 0;
6128 else
6129 {
6130 elfsym->st_name = (unsigned long) _bfd_stringtab_add (finfo->symstrtab,
6131 name, TRUE, FALSE);
6132 if (elfsym->st_name == (unsigned long) -1)
6133 return FALSE;
6134 }
6135
6136 if (finfo->symbuf_count >= finfo->symbuf_size)
6137 {
6138 if (! elf_link_flush_output_syms (finfo))
6139 return FALSE;
6140 }
6141
6142 dest = finfo->symbuf + finfo->symbuf_count;
6143 destshndx = finfo->symshndxbuf;
6144 if (destshndx != NULL)
6145 {
6146 if (bfd_get_symcount (finfo->output_bfd) >= finfo->shndxbuf_size)
6147 {
6148 bfd_size_type amt;
6149
6150 amt = finfo->shndxbuf_size * sizeof (Elf_External_Sym_Shndx);
6151 finfo->symshndxbuf = destshndx = bfd_realloc (destshndx, amt * 2);
6152 if (destshndx == NULL)
6153 return FALSE;
6154 memset ((char *) destshndx + amt, 0, amt);
6155 finfo->shndxbuf_size *= 2;
6156 }
6157 destshndx += bfd_get_symcount (finfo->output_bfd);
6158 }
6159
6160 elf_swap_symbol_out (finfo->output_bfd, elfsym, (PTR) dest, (PTR) destshndx);
6161 finfo->symbuf_count += 1;
6162 bfd_get_symcount (finfo->output_bfd) += 1;
6163
6164 return TRUE;
6165 }
6166
6167 /* Flush the output symbols to the file. */
6168
6169 static bfd_boolean
elf_link_flush_output_syms(finfo)6170 elf_link_flush_output_syms (finfo)
6171 struct elf_final_link_info *finfo;
6172 {
6173 if (finfo->symbuf_count > 0)
6174 {
6175 Elf_Internal_Shdr *hdr;
6176 file_ptr pos;
6177 bfd_size_type amt;
6178
6179 hdr = &elf_tdata (finfo->output_bfd)->symtab_hdr;
6180 pos = hdr->sh_offset + hdr->sh_size;
6181 amt = finfo->symbuf_count * sizeof (Elf_External_Sym);
6182 if (bfd_seek (finfo->output_bfd, pos, SEEK_SET) != 0
6183 || bfd_bwrite ((PTR) finfo->symbuf, amt, finfo->output_bfd) != amt)
6184 return FALSE;
6185
6186 hdr->sh_size += amt;
6187 finfo->symbuf_count = 0;
6188 }
6189
6190 return TRUE;
6191 }
6192
6193 /* Adjust all external symbols pointing into SEC_MERGE sections
6194 to reflect the object merging within the sections. */
6195
6196 static bfd_boolean
elf_link_sec_merge_syms(h,data)6197 elf_link_sec_merge_syms (h, data)
6198 struct elf_link_hash_entry *h;
6199 PTR data;
6200 {
6201 asection *sec;
6202
6203 if (h->root.type == bfd_link_hash_warning)
6204 h = (struct elf_link_hash_entry *) h->root.u.i.link;
6205
6206 if ((h->root.type == bfd_link_hash_defined
6207 || h->root.type == bfd_link_hash_defweak)
6208 && ((sec = h->root.u.def.section)->flags & SEC_MERGE)
6209 && sec->sec_info_type == ELF_INFO_TYPE_MERGE)
6210 {
6211 bfd *output_bfd = (bfd *) data;
6212
6213 h->root.u.def.value =
6214 _bfd_merged_section_offset (output_bfd,
6215 &h->root.u.def.section,
6216 elf_section_data (sec)->sec_info,
6217 h->root.u.def.value, (bfd_vma) 0);
6218 }
6219
6220 return TRUE;
6221 }
6222
6223 /* For DSOs loaded in via a DT_NEEDED entry, emulate ld.so in
6224 allowing an unsatisfied unversioned symbol in the DSO to match a
6225 versioned symbol that would normally require an explicit version.
6226 We also handle the case that a DSO references a hidden symbol
6227 which may be satisfied by a versioned symbol in another DSO. */
6228
6229 static bfd_boolean
elf_link_check_versioned_symbol(info,h)6230 elf_link_check_versioned_symbol (info, h)
6231 struct bfd_link_info *info;
6232 struct elf_link_hash_entry *h;
6233 {
6234 bfd *abfd;
6235 struct elf_link_loaded_list *loaded;
6236
6237 if (info->hash->creator->flavour != bfd_target_elf_flavour)
6238 return FALSE;
6239
6240 switch (h->root.type)
6241 {
6242 default:
6243 abfd = NULL;
6244 break;
6245
6246 case bfd_link_hash_undefined:
6247 case bfd_link_hash_undefweak:
6248 abfd = h->root.u.undef.abfd;
6249 if ((abfd->flags & DYNAMIC) == 0 || elf_dt_soname (abfd) == NULL)
6250 return FALSE;
6251 break;
6252
6253 case bfd_link_hash_defined:
6254 case bfd_link_hash_defweak:
6255 abfd = h->root.u.def.section->owner;
6256 break;
6257
6258 case bfd_link_hash_common:
6259 abfd = h->root.u.c.p->section->owner;
6260 break;
6261 }
6262 BFD_ASSERT (abfd != NULL);
6263
6264 for (loaded = elf_hash_table (info)->loaded;
6265 loaded != NULL;
6266 loaded = loaded->next)
6267 {
6268 bfd *input;
6269 Elf_Internal_Shdr *hdr;
6270 bfd_size_type symcount;
6271 bfd_size_type extsymcount;
6272 bfd_size_type extsymoff;
6273 Elf_Internal_Shdr *versymhdr;
6274 Elf_Internal_Sym *isym;
6275 Elf_Internal_Sym *isymend;
6276 Elf_Internal_Sym *isymbuf;
6277 Elf_External_Versym *ever;
6278 Elf_External_Versym *extversym;
6279
6280 input = loaded->abfd;
6281
6282 /* We check each DSO for a possible hidden versioned definition. */
6283 if (input == abfd
6284 || (input->flags & DYNAMIC) == 0
6285 || elf_dynversym (input) == 0)
6286 continue;
6287
6288 hdr = &elf_tdata (input)->dynsymtab_hdr;
6289
6290 symcount = hdr->sh_size / sizeof (Elf_External_Sym);
6291 if (elf_bad_symtab (input))
6292 {
6293 extsymcount = symcount;
6294 extsymoff = 0;
6295 }
6296 else
6297 {
6298 extsymcount = symcount - hdr->sh_info;
6299 extsymoff = hdr->sh_info;
6300 }
6301
6302 if (extsymcount == 0)
6303 continue;
6304
6305 isymbuf = bfd_elf_get_elf_syms (input, hdr, extsymcount, extsymoff,
6306 NULL, NULL, NULL);
6307 if (isymbuf == NULL)
6308 return FALSE;
6309
6310 /* Read in any version definitions. */
6311 versymhdr = &elf_tdata (input)->dynversym_hdr;
6312 extversym = (Elf_External_Versym *) bfd_malloc (versymhdr->sh_size);
6313 if (extversym == NULL)
6314 goto error_ret;
6315
6316 if (bfd_seek (input, versymhdr->sh_offset, SEEK_SET) != 0
6317 || (bfd_bread ((PTR) extversym, versymhdr->sh_size, input)
6318 != versymhdr->sh_size))
6319 {
6320 free (extversym);
6321 error_ret:
6322 free (isymbuf);
6323 return FALSE;
6324 }
6325
6326 ever = extversym + extsymoff;
6327 isymend = isymbuf + extsymcount;
6328 for (isym = isymbuf; isym < isymend; isym++, ever++)
6329 {
6330 const char *name;
6331 Elf_Internal_Versym iver;
6332
6333 if (ELF_ST_BIND (isym->st_info) == STB_LOCAL
6334 || isym->st_shndx == SHN_UNDEF)
6335 continue;
6336
6337 name = bfd_elf_string_from_elf_section (input,
6338 hdr->sh_link,
6339 isym->st_name);
6340 if (strcmp (name, h->root.root.string) != 0)
6341 continue;
6342
6343 _bfd_elf_swap_versym_in (input, ever, &iver);
6344
6345 if ((iver.vs_vers & VERSYM_HIDDEN) == 0)
6346 {
6347 /* If we have a non-hidden versioned sym, then it should
6348 have provided a definition for the undefined sym. */
6349 abort ();
6350 }
6351
6352 if ((iver.vs_vers & VERSYM_VERSION) == 2)
6353 {
6354 /* This is the oldest (default) sym. We can use it. */
6355 free (extversym);
6356 free (isymbuf);
6357 return TRUE;
6358 }
6359 }
6360
6361 free (extversym);
6362 free (isymbuf);
6363 }
6364
6365 return FALSE;
6366 }
6367
6368 /* Add an external symbol to the symbol table. This is called from
6369 the hash table traversal routine. When generating a shared object,
6370 we go through the symbol table twice. The first time we output
6371 anything that might have been forced to local scope in a version
6372 script. The second time we output the symbols that are still
6373 global symbols. */
6374
6375 static bfd_boolean
elf_link_output_extsym(h,data)6376 elf_link_output_extsym (h, data)
6377 struct elf_link_hash_entry *h;
6378 PTR data;
6379 {
6380 struct elf_outext_info *eoinfo = (struct elf_outext_info *) data;
6381 struct elf_final_link_info *finfo = eoinfo->finfo;
6382 bfd_boolean strip;
6383 Elf_Internal_Sym sym;
6384 asection *input_sec;
6385
6386 if (h->root.type == bfd_link_hash_warning)
6387 {
6388 h = (struct elf_link_hash_entry *) h->root.u.i.link;
6389 if (h->root.type == bfd_link_hash_new)
6390 return TRUE;
6391 }
6392
6393 /* Decide whether to output this symbol in this pass. */
6394 if (eoinfo->localsyms)
6395 {
6396 if ((h->elf_link_hash_flags & ELF_LINK_FORCED_LOCAL) == 0)
6397 return TRUE;
6398 }
6399 else
6400 {
6401 if ((h->elf_link_hash_flags & ELF_LINK_FORCED_LOCAL) != 0)
6402 return TRUE;
6403 }
6404
6405 /* If we are not creating a shared library, and this symbol is
6406 referenced by a shared library but is not defined anywhere, then
6407 warn that it is undefined. If we do not do this, the runtime
6408 linker will complain that the symbol is undefined when the
6409 program is run. We don't have to worry about symbols that are
6410 referenced by regular files, because we will already have issued
6411 warnings for them. */
6412 if (! finfo->info->relocateable
6413 && (! finfo->info->shared || ! finfo->info->allow_shlib_undefined)
6414 && h->root.type == bfd_link_hash_undefined
6415 && (h->elf_link_hash_flags & ELF_LINK_HASH_REF_DYNAMIC) != 0
6416 && (h->elf_link_hash_flags & ELF_LINK_HASH_REF_REGULAR) == 0
6417 && ! elf_link_check_versioned_symbol (finfo->info, h))
6418 {
6419 if (! ((*finfo->info->callbacks->undefined_symbol)
6420 (finfo->info, h->root.root.string, h->root.u.undef.abfd,
6421 (asection *) NULL, (bfd_vma) 0, TRUE)))
6422 {
6423 eoinfo->failed = TRUE;
6424 return FALSE;
6425 }
6426 }
6427
6428 /* We should also warn if a forced local symbol is referenced from
6429 shared libraries. */
6430 if (! finfo->info->relocateable
6431 && (! finfo->info->shared || ! finfo->info->allow_shlib_undefined)
6432 && (h->elf_link_hash_flags
6433 & (ELF_LINK_FORCED_LOCAL | ELF_LINK_HASH_REF_DYNAMIC
6434 | ELF_LINK_DYNAMIC_DEF | ELF_LINK_DYNAMIC_WEAK))
6435 == (ELF_LINK_FORCED_LOCAL | ELF_LINK_HASH_REF_DYNAMIC)
6436 && ! elf_link_check_versioned_symbol (finfo->info, h))
6437 {
6438 (*_bfd_error_handler)
6439 (_("%s: %s symbol `%s' in %s is referenced by DSO"),
6440 bfd_get_filename (finfo->output_bfd),
6441 ELF_ST_VISIBILITY (h->other) == STV_INTERNAL
6442 ? "internal"
6443 : ELF_ST_VISIBILITY (h->other) == STV_HIDDEN
6444 ? "hidden" : "local",
6445 h->root.root.string,
6446 bfd_archive_filename (h->root.u.def.section->owner));
6447 eoinfo->failed = TRUE;
6448 return FALSE;
6449 }
6450
6451 /* We don't want to output symbols that have never been mentioned by
6452 a regular file, or that we have been told to strip. However, if
6453 h->indx is set to -2, the symbol is used by a reloc and we must
6454 output it. */
6455 if (h->indx == -2)
6456 strip = FALSE;
6457 else if (((h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) != 0
6458 || (h->elf_link_hash_flags & ELF_LINK_HASH_REF_DYNAMIC) != 0)
6459 && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0
6460 && (h->elf_link_hash_flags & ELF_LINK_HASH_REF_REGULAR) == 0)
6461 strip = TRUE;
6462 else if (finfo->info->strip == strip_all)
6463 strip = TRUE;
6464 else if (finfo->info->strip == strip_some
6465 && bfd_hash_lookup (finfo->info->keep_hash,
6466 h->root.root.string, FALSE, FALSE) == NULL)
6467 strip = TRUE;
6468 else if (finfo->info->strip_discarded
6469 && (h->root.type == bfd_link_hash_defined
6470 || h->root.type == bfd_link_hash_defweak)
6471 && elf_discarded_section (h->root.u.def.section))
6472 strip = TRUE;
6473 else
6474 strip = FALSE;
6475
6476 /* If we're stripping it, and it's not a dynamic symbol, there's
6477 nothing else to do unless it is a forced local symbol. */
6478 if (strip
6479 && h->dynindx == -1
6480 && (h->elf_link_hash_flags & ELF_LINK_FORCED_LOCAL) == 0)
6481 return TRUE;
6482
6483 sym.st_value = 0;
6484 sym.st_size = h->size;
6485 sym.st_other = h->other;
6486 if ((h->elf_link_hash_flags & ELF_LINK_FORCED_LOCAL) != 0)
6487 sym.st_info = ELF_ST_INFO (STB_LOCAL, h->type);
6488 else if (h->root.type == bfd_link_hash_undefweak
6489 || h->root.type == bfd_link_hash_defweak)
6490 sym.st_info = ELF_ST_INFO (STB_WEAK, h->type);
6491 else
6492 sym.st_info = ELF_ST_INFO (STB_GLOBAL, h->type);
6493
6494 switch (h->root.type)
6495 {
6496 default:
6497 case bfd_link_hash_new:
6498 case bfd_link_hash_warning:
6499 abort ();
6500 return FALSE;
6501
6502 case bfd_link_hash_undefined:
6503 case bfd_link_hash_undefweak:
6504 input_sec = bfd_und_section_ptr;
6505 sym.st_shndx = SHN_UNDEF;
6506 break;
6507
6508 case bfd_link_hash_defined:
6509 case bfd_link_hash_defweak:
6510 {
6511 input_sec = h->root.u.def.section;
6512 if (input_sec->output_section != NULL)
6513 {
6514 sym.st_shndx =
6515 _bfd_elf_section_from_bfd_section (finfo->output_bfd,
6516 input_sec->output_section);
6517 if (sym.st_shndx == SHN_BAD)
6518 {
6519 (*_bfd_error_handler)
6520 (_("%s: could not find output section %s for input section %s"),
6521 bfd_get_filename (finfo->output_bfd),
6522 input_sec->output_section->name,
6523 input_sec->name);
6524 eoinfo->failed = TRUE;
6525 return FALSE;
6526 }
6527
6528 /* ELF symbols in relocateable files are section relative,
6529 but in nonrelocateable files they are virtual
6530 addresses. */
6531 sym.st_value = h->root.u.def.value + input_sec->output_offset;
6532 if (! finfo->info->relocateable)
6533 {
6534 sym.st_value += input_sec->output_section->vma;
6535 if (h->type == STT_TLS)
6536 {
6537 /* STT_TLS symbols are relative to PT_TLS segment
6538 base. */
6539 BFD_ASSERT (finfo->first_tls_sec != NULL);
6540 sym.st_value -= finfo->first_tls_sec->vma;
6541 }
6542 }
6543 }
6544 else
6545 {
6546 BFD_ASSERT (input_sec->owner == NULL
6547 || (input_sec->owner->flags & DYNAMIC) != 0);
6548 sym.st_shndx = SHN_UNDEF;
6549 input_sec = bfd_und_section_ptr;
6550 }
6551 }
6552 break;
6553
6554 case bfd_link_hash_common:
6555 input_sec = h->root.u.c.p->section;
6556 sym.st_shndx = SHN_COMMON;
6557 sym.st_value = 1 << h->root.u.c.p->alignment_power;
6558 break;
6559
6560 case bfd_link_hash_indirect:
6561 /* These symbols are created by symbol versioning. They point
6562 to the decorated version of the name. For example, if the
6563 symbol foo@@GNU_1.2 is the default, which should be used when
6564 foo is used with no version, then we add an indirect symbol
6565 foo which points to foo@@GNU_1.2. We ignore these symbols,
6566 since the indirected symbol is already in the hash table. */
6567 return TRUE;
6568 }
6569
6570 /* Give the processor backend a chance to tweak the symbol value,
6571 and also to finish up anything that needs to be done for this
6572 symbol. FIXME: Not calling elf_backend_finish_dynamic_symbol for
6573 forced local syms when non-shared is due to a historical quirk. */
6574 if ((h->dynindx != -1
6575 || (h->elf_link_hash_flags & ELF_LINK_FORCED_LOCAL) != 0)
6576 && (finfo->info->shared
6577 || (h->elf_link_hash_flags & ELF_LINK_FORCED_LOCAL) == 0)
6578 && elf_hash_table (finfo->info)->dynamic_sections_created)
6579 {
6580 struct elf_backend_data *bed;
6581
6582 bed = get_elf_backend_data (finfo->output_bfd);
6583 if (! ((*bed->elf_backend_finish_dynamic_symbol)
6584 (finfo->output_bfd, finfo->info, h, &sym)))
6585 {
6586 eoinfo->failed = TRUE;
6587 return FALSE;
6588 }
6589 }
6590
6591 /* If we are marking the symbol as undefined, and there are no
6592 non-weak references to this symbol from a regular object, then
6593 mark the symbol as weak undefined; if there are non-weak
6594 references, mark the symbol as strong. We can't do this earlier,
6595 because it might not be marked as undefined until the
6596 finish_dynamic_symbol routine gets through with it. */
6597 if (sym.st_shndx == SHN_UNDEF
6598 && (h->elf_link_hash_flags & ELF_LINK_HASH_REF_REGULAR) != 0
6599 && (ELF_ST_BIND (sym.st_info) == STB_GLOBAL
6600 || ELF_ST_BIND (sym.st_info) == STB_WEAK))
6601 {
6602 int bindtype;
6603
6604 if ((h->elf_link_hash_flags & ELF_LINK_HASH_REF_REGULAR_NONWEAK) != 0)
6605 bindtype = STB_GLOBAL;
6606 else
6607 bindtype = STB_WEAK;
6608 sym.st_info = ELF_ST_INFO (bindtype, ELF_ST_TYPE (sym.st_info));
6609 }
6610
6611 /* If a non-weak symbol with non-default visibility is not defined
6612 locally, it is a fatal error. */
6613 if (! finfo->info->relocateable
6614 && ELF_ST_VISIBILITY (sym.st_other)
6615 && ELF_ST_BIND (sym.st_info) != STB_WEAK
6616 && h->root.type == bfd_link_hash_undefined
6617 && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0)
6618 {
6619 (*_bfd_error_handler)
6620 (_("%s: %s symbol `%s' isn't defined"),
6621 bfd_get_filename (finfo->output_bfd),
6622 ELF_ST_VISIBILITY (sym.st_other) == STV_PROTECTED
6623 ? "protected"
6624 : ELF_ST_VISIBILITY (sym.st_other) == STV_INTERNAL
6625 ? "internal" : "hidden",
6626 h->root.root.string);
6627 eoinfo->failed = TRUE;
6628 return FALSE;
6629 }
6630
6631 /* If this symbol should be put in the .dynsym section, then put it
6632 there now. We already know the symbol index. We also fill in
6633 the entry in the .hash section. */
6634 if (h->dynindx != -1
6635 && elf_hash_table (finfo->info)->dynamic_sections_created)
6636 {
6637 size_t bucketcount;
6638 size_t bucket;
6639 size_t hash_entry_size;
6640 bfd_byte *bucketpos;
6641 bfd_vma chain;
6642 Elf_External_Sym *esym;
6643
6644 sym.st_name = h->dynstr_index;
6645 esym = (Elf_External_Sym *) finfo->dynsym_sec->contents + h->dynindx;
6646 elf_swap_symbol_out (finfo->output_bfd, &sym, (PTR) esym, (PTR) 0);
6647
6648 bucketcount = elf_hash_table (finfo->info)->bucketcount;
6649 bucket = h->elf_hash_value % bucketcount;
6650 hash_entry_size
6651 = elf_section_data (finfo->hash_sec)->this_hdr.sh_entsize;
6652 bucketpos = ((bfd_byte *) finfo->hash_sec->contents
6653 + (bucket + 2) * hash_entry_size);
6654 chain = bfd_get (8 * hash_entry_size, finfo->output_bfd, bucketpos);
6655 bfd_put (8 * hash_entry_size, finfo->output_bfd, (bfd_vma) h->dynindx,
6656 bucketpos);
6657 bfd_put (8 * hash_entry_size, finfo->output_bfd, chain,
6658 ((bfd_byte *) finfo->hash_sec->contents
6659 + (bucketcount + 2 + h->dynindx) * hash_entry_size));
6660
6661 if (finfo->symver_sec != NULL && finfo->symver_sec->contents != NULL)
6662 {
6663 Elf_Internal_Versym iversym;
6664 Elf_External_Versym *eversym;
6665
6666 if ((h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0)
6667 {
6668 if (h->verinfo.verdef == NULL)
6669 iversym.vs_vers = 0;
6670 else
6671 iversym.vs_vers = h->verinfo.verdef->vd_exp_refno + 1;
6672 }
6673 else
6674 {
6675 if (h->verinfo.vertree == NULL)
6676 iversym.vs_vers = 1;
6677 else
6678 iversym.vs_vers = h->verinfo.vertree->vernum + 1;
6679 }
6680
6681 if ((h->elf_link_hash_flags & ELF_LINK_HIDDEN) != 0)
6682 iversym.vs_vers |= VERSYM_HIDDEN;
6683
6684 eversym = (Elf_External_Versym *) finfo->symver_sec->contents;
6685 eversym += h->dynindx;
6686 _bfd_elf_swap_versym_out (finfo->output_bfd, &iversym, eversym);
6687 }
6688 }
6689
6690 /* If we're stripping it, then it was just a dynamic symbol, and
6691 there's nothing else to do. */
6692 if (strip || (input_sec->flags & SEC_EXCLUDE) != 0)
6693 return TRUE;
6694
6695 h->indx = bfd_get_symcount (finfo->output_bfd);
6696
6697 if (! elf_link_output_sym (finfo, h->root.root.string, &sym, input_sec))
6698 {
6699 eoinfo->failed = TRUE;
6700 return FALSE;
6701 }
6702
6703 return TRUE;
6704 }
6705
6706 /* Copy the relocations indicated by the INTERNAL_RELOCS (which
6707 originated from the section given by INPUT_REL_HDR) to the
6708 OUTPUT_BFD. */
6709
6710 static bfd_boolean
elf_link_output_relocs(output_bfd,input_section,input_rel_hdr,internal_relocs)6711 elf_link_output_relocs (output_bfd, input_section, input_rel_hdr,
6712 internal_relocs)
6713 bfd *output_bfd;
6714 asection *input_section;
6715 Elf_Internal_Shdr *input_rel_hdr;
6716 Elf_Internal_Rela *internal_relocs;
6717 {
6718 Elf_Internal_Rela *irela;
6719 Elf_Internal_Rela *irelaend;
6720 bfd_byte *erel;
6721 Elf_Internal_Shdr *output_rel_hdr;
6722 asection *output_section;
6723 unsigned int *rel_countp = NULL;
6724 struct elf_backend_data *bed;
6725 void (*swap_out) PARAMS ((bfd *, const Elf_Internal_Rela *, bfd_byte *));
6726
6727 output_section = input_section->output_section;
6728 output_rel_hdr = NULL;
6729
6730 if (elf_section_data (output_section)->rel_hdr.sh_entsize
6731 == input_rel_hdr->sh_entsize)
6732 {
6733 output_rel_hdr = &elf_section_data (output_section)->rel_hdr;
6734 rel_countp = &elf_section_data (output_section)->rel_count;
6735 }
6736 else if (elf_section_data (output_section)->rel_hdr2
6737 && (elf_section_data (output_section)->rel_hdr2->sh_entsize
6738 == input_rel_hdr->sh_entsize))
6739 {
6740 output_rel_hdr = elf_section_data (output_section)->rel_hdr2;
6741 rel_countp = &elf_section_data (output_section)->rel_count2;
6742 }
6743 else
6744 {
6745 (*_bfd_error_handler)
6746 (_("%s: relocation size mismatch in %s section %s"),
6747 bfd_get_filename (output_bfd),
6748 bfd_archive_filename (input_section->owner),
6749 input_section->name);
6750 bfd_set_error (bfd_error_wrong_object_format);
6751 return FALSE;
6752 }
6753
6754 bed = get_elf_backend_data (output_bfd);
6755 if (input_rel_hdr->sh_entsize == sizeof (Elf_External_Rel))
6756 swap_out = bed->s->swap_reloc_out;
6757 else if (input_rel_hdr->sh_entsize == sizeof (Elf_External_Rela))
6758 swap_out = bed->s->swap_reloca_out;
6759 else
6760 abort ();
6761
6762 erel = output_rel_hdr->contents;
6763 erel += *rel_countp * input_rel_hdr->sh_entsize;
6764 irela = internal_relocs;
6765 irelaend = irela + (NUM_SHDR_ENTRIES (input_rel_hdr)
6766 * bed->s->int_rels_per_ext_rel);
6767 while (irela < irelaend)
6768 {
6769 (*swap_out) (output_bfd, irela, erel);
6770 irela += bed->s->int_rels_per_ext_rel;
6771 erel += input_rel_hdr->sh_entsize;
6772 }
6773
6774 /* Bump the counter, so that we know where to add the next set of
6775 relocations. */
6776 *rel_countp += NUM_SHDR_ENTRIES (input_rel_hdr);
6777
6778 return TRUE;
6779 }
6780
6781 /* Link an input file into the linker output file. This function
6782 handles all the sections and relocations of the input file at once.
6783 This is so that we only have to read the local symbols once, and
6784 don't have to keep them in memory. */
6785
6786 static bfd_boolean
elf_link_input_bfd(finfo,input_bfd)6787 elf_link_input_bfd (finfo, input_bfd)
6788 struct elf_final_link_info *finfo;
6789 bfd *input_bfd;
6790 {
6791 bfd_boolean (*relocate_section)
6792 PARAMS ((bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *,
6793 Elf_Internal_Rela *, Elf_Internal_Sym *, asection **));
6794 bfd *output_bfd;
6795 Elf_Internal_Shdr *symtab_hdr;
6796 size_t locsymcount;
6797 size_t extsymoff;
6798 Elf_Internal_Sym *isymbuf;
6799 Elf_Internal_Sym *isym;
6800 Elf_Internal_Sym *isymend;
6801 long *pindex;
6802 asection **ppsection;
6803 asection *o;
6804 struct elf_backend_data *bed;
6805 bfd_boolean emit_relocs;
6806 struct elf_link_hash_entry **sym_hashes;
6807
6808 output_bfd = finfo->output_bfd;
6809 bed = get_elf_backend_data (output_bfd);
6810 relocate_section = bed->elf_backend_relocate_section;
6811
6812 /* If this is a dynamic object, we don't want to do anything here:
6813 we don't want the local symbols, and we don't want the section
6814 contents. */
6815 if ((input_bfd->flags & DYNAMIC) != 0)
6816 return TRUE;
6817
6818 emit_relocs = (finfo->info->relocateable
6819 || finfo->info->emitrelocations
6820 || bed->elf_backend_emit_relocs);
6821
6822 symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
6823 if (elf_bad_symtab (input_bfd))
6824 {
6825 locsymcount = symtab_hdr->sh_size / sizeof (Elf_External_Sym);
6826 extsymoff = 0;
6827 }
6828 else
6829 {
6830 locsymcount = symtab_hdr->sh_info;
6831 extsymoff = symtab_hdr->sh_info;
6832 }
6833
6834 /* Read the local symbols. */
6835 isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents;
6836 if (isymbuf == NULL && locsymcount != 0)
6837 {
6838 isymbuf = bfd_elf_get_elf_syms (input_bfd, symtab_hdr, locsymcount, 0,
6839 finfo->internal_syms,
6840 finfo->external_syms,
6841 finfo->locsym_shndx);
6842 if (isymbuf == NULL)
6843 return FALSE;
6844 }
6845
6846 /* Find local symbol sections and adjust values of symbols in
6847 SEC_MERGE sections. Write out those local symbols we know are
6848 going into the output file. */
6849 isymend = isymbuf + locsymcount;
6850 for (isym = isymbuf, pindex = finfo->indices, ppsection = finfo->sections;
6851 isym < isymend;
6852 isym++, pindex++, ppsection++)
6853 {
6854 asection *isec;
6855 const char *name;
6856 Elf_Internal_Sym osym;
6857
6858 *pindex = -1;
6859
6860 if (elf_bad_symtab (input_bfd))
6861 {
6862 if (ELF_ST_BIND (isym->st_info) != STB_LOCAL)
6863 {
6864 *ppsection = NULL;
6865 continue;
6866 }
6867 }
6868
6869 if (isym->st_shndx == SHN_UNDEF)
6870 isec = bfd_und_section_ptr;
6871 else if (isym->st_shndx < SHN_LORESERVE
6872 || isym->st_shndx > SHN_HIRESERVE)
6873 {
6874 isec = section_from_elf_index (input_bfd, isym->st_shndx);
6875 if (isec
6876 && isec->sec_info_type == ELF_INFO_TYPE_MERGE
6877 && ELF_ST_TYPE (isym->st_info) != STT_SECTION)
6878 isym->st_value =
6879 _bfd_merged_section_offset (output_bfd, &isec,
6880 elf_section_data (isec)->sec_info,
6881 isym->st_value, (bfd_vma) 0);
6882 }
6883 else if (isym->st_shndx == SHN_ABS)
6884 isec = bfd_abs_section_ptr;
6885 else if (isym->st_shndx == SHN_COMMON)
6886 isec = bfd_com_section_ptr;
6887 else
6888 {
6889 /* Who knows? */
6890 isec = NULL;
6891 }
6892
6893 *ppsection = isec;
6894
6895 /* Don't output the first, undefined, symbol. */
6896 if (ppsection == finfo->sections)
6897 continue;
6898
6899 if (ELF_ST_TYPE (isym->st_info) == STT_SECTION)
6900 {
6901 /* We never output section symbols. Instead, we use the
6902 section symbol of the corresponding section in the output
6903 file. */
6904 continue;
6905 }
6906
6907 /* If we are stripping all symbols, we don't want to output this
6908 one. */
6909 if (finfo->info->strip == strip_all)
6910 continue;
6911
6912 /* If we are discarding all local symbols, we don't want to
6913 output this one. If we are generating a relocateable output
6914 file, then some of the local symbols may be required by
6915 relocs; we output them below as we discover that they are
6916 needed. */
6917 if (finfo->info->discard == discard_all)
6918 continue;
6919
6920 /* If this symbol is defined in a section which we are
6921 discarding, we don't need to keep it, but note that
6922 linker_mark is only reliable for sections that have contents.
6923 For the benefit of the MIPS ELF linker, we check SEC_EXCLUDE
6924 as well as linker_mark. */
6925 if ((isym->st_shndx < SHN_LORESERVE || isym->st_shndx > SHN_HIRESERVE)
6926 && isec != NULL
6927 && ((! isec->linker_mark && (isec->flags & SEC_HAS_CONTENTS) != 0)
6928 || (! finfo->info->relocateable
6929 && (isec->flags & SEC_EXCLUDE) != 0)))
6930 continue;
6931
6932 /* Get the name of the symbol. */
6933 name = bfd_elf_string_from_elf_section (input_bfd, symtab_hdr->sh_link,
6934 isym->st_name);
6935 if (name == NULL)
6936 return FALSE;
6937
6938 /* See if we are discarding symbols with this name. */
6939 if ((finfo->info->strip == strip_some
6940 && (bfd_hash_lookup (finfo->info->keep_hash, name, FALSE, FALSE)
6941 == NULL))
6942 || (((finfo->info->discard == discard_sec_merge
6943 && (isec->flags & SEC_MERGE) && ! finfo->info->relocateable)
6944 || finfo->info->discard == discard_l)
6945 && bfd_is_local_label_name (input_bfd, name)))
6946 continue;
6947
6948 /* If we get here, we are going to output this symbol. */
6949
6950 osym = *isym;
6951
6952 /* Adjust the section index for the output file. */
6953 osym.st_shndx = _bfd_elf_section_from_bfd_section (output_bfd,
6954 isec->output_section);
6955 if (osym.st_shndx == SHN_BAD)
6956 return FALSE;
6957
6958 *pindex = bfd_get_symcount (output_bfd);
6959
6960 /* ELF symbols in relocateable files are section relative, but
6961 in executable files they are virtual addresses. Note that
6962 this code assumes that all ELF sections have an associated
6963 BFD section with a reasonable value for output_offset; below
6964 we assume that they also have a reasonable value for
6965 output_section. Any special sections must be set up to meet
6966 these requirements. */
6967 osym.st_value += isec->output_offset;
6968 if (! finfo->info->relocateable)
6969 {
6970 osym.st_value += isec->output_section->vma;
6971 if (ELF_ST_TYPE (osym.st_info) == STT_TLS)
6972 {
6973 /* STT_TLS symbols are relative to PT_TLS segment base. */
6974 BFD_ASSERT (finfo->first_tls_sec != NULL);
6975 osym.st_value -= finfo->first_tls_sec->vma;
6976 }
6977 }
6978
6979 if (! elf_link_output_sym (finfo, name, &osym, isec))
6980 return FALSE;
6981 }
6982
6983 /* Relocate the contents of each section. */
6984 sym_hashes = elf_sym_hashes (input_bfd);
6985 for (o = input_bfd->sections; o != NULL; o = o->next)
6986 {
6987 bfd_byte *contents;
6988
6989 if (! o->linker_mark)
6990 {
6991 /* This section was omitted from the link. */
6992 continue;
6993 }
6994
6995 if ((o->flags & SEC_HAS_CONTENTS) == 0
6996 || (o->_raw_size == 0 && (o->flags & SEC_RELOC) == 0))
6997 continue;
6998
6999 if ((o->flags & SEC_LINKER_CREATED) != 0)
7000 {
7001 /* Section was created by elf_link_create_dynamic_sections
7002 or somesuch. */
7003 continue;
7004 }
7005
7006 /* Get the contents of the section. They have been cached by a
7007 relaxation routine. Note that o is a section in an input
7008 file, so the contents field will not have been set by any of
7009 the routines which work on output files. */
7010 if (elf_section_data (o)->this_hdr.contents != NULL)
7011 contents = elf_section_data (o)->this_hdr.contents;
7012 else
7013 {
7014 contents = finfo->contents;
7015 if (! bfd_get_section_contents (input_bfd, o, contents,
7016 (file_ptr) 0, o->_raw_size))
7017 return FALSE;
7018 }
7019
7020 if ((o->flags & SEC_RELOC) != 0)
7021 {
7022 Elf_Internal_Rela *internal_relocs;
7023
7024 /* Get the swapped relocs. */
7025 internal_relocs = (NAME(_bfd_elf,link_read_relocs)
7026 (input_bfd, o, finfo->external_relocs,
7027 finfo->internal_relocs, FALSE));
7028 if (internal_relocs == NULL
7029 && o->reloc_count > 0)
7030 return FALSE;
7031
7032 /* Run through the relocs looking for any against symbols
7033 from discarded sections and section symbols from
7034 removed link-once sections. Complain about relocs
7035 against discarded sections. Zero relocs against removed
7036 link-once sections. */
7037 if (!finfo->info->relocateable
7038 && !elf_section_ignore_discarded_relocs (o))
7039 {
7040 Elf_Internal_Rela *rel, *relend;
7041
7042 rel = internal_relocs;
7043 relend = rel + o->reloc_count * bed->s->int_rels_per_ext_rel;
7044 for ( ; rel < relend; rel++)
7045 {
7046 unsigned long r_symndx = ELF_R_SYM (rel->r_info);
7047
7048 if (r_symndx >= locsymcount
7049 || (elf_bad_symtab (input_bfd)
7050 && finfo->sections[r_symndx] == NULL))
7051 {
7052 struct elf_link_hash_entry *h;
7053
7054 h = sym_hashes[r_symndx - extsymoff];
7055 while (h->root.type == bfd_link_hash_indirect
7056 || h->root.type == bfd_link_hash_warning)
7057 h = (struct elf_link_hash_entry *) h->root.u.i.link;
7058
7059 /* Complain if the definition comes from a
7060 discarded section. */
7061 if ((h->root.type == bfd_link_hash_defined
7062 || h->root.type == bfd_link_hash_defweak)
7063 && elf_discarded_section (h->root.u.def.section))
7064 {
7065 if ((o->flags & SEC_DEBUGGING) != 0)
7066 {
7067 BFD_ASSERT (r_symndx != 0);
7068 memset (rel, 0, sizeof (*rel));
7069 }
7070 else
7071 {
7072 if (! ((*finfo->info->callbacks->undefined_symbol)
7073 (finfo->info, h->root.root.string,
7074 input_bfd, o, rel->r_offset,
7075 TRUE)))
7076 return FALSE;
7077 }
7078 }
7079 }
7080 else
7081 {
7082 asection *sec = finfo->sections[r_symndx];
7083
7084 if (sec != NULL && elf_discarded_section (sec))
7085 {
7086 if ((o->flags & SEC_DEBUGGING) != 0
7087 || (sec->flags & SEC_LINK_ONCE) != 0)
7088 {
7089 BFD_ASSERT (r_symndx != 0);
7090 rel->r_info
7091 = ELF_R_INFO (0, ELF_R_TYPE (rel->r_info));
7092 rel->r_addend = 0;
7093 }
7094 else
7095 {
7096 bfd_boolean ok;
7097 const char *msg
7098 = _("local symbols in discarded section %s");
7099 bfd_size_type amt
7100 = strlen (sec->name) + strlen (msg) - 1;
7101 char *buf = (char *) bfd_malloc (amt);
7102
7103 if (buf != NULL)
7104 sprintf (buf, msg, sec->name);
7105 else
7106 buf = (char *) sec->name;
7107 ok = (*finfo->info->callbacks
7108 ->undefined_symbol) (finfo->info, buf,
7109 input_bfd, o,
7110 rel->r_offset,
7111 TRUE);
7112 if (buf != sec->name)
7113 free (buf);
7114 if (!ok)
7115 return FALSE;
7116 }
7117 }
7118 }
7119 }
7120 }
7121
7122 /* Relocate the section by invoking a back end routine.
7123
7124 The back end routine is responsible for adjusting the
7125 section contents as necessary, and (if using Rela relocs
7126 and generating a relocateable output file) adjusting the
7127 reloc addend as necessary.
7128
7129 The back end routine does not have to worry about setting
7130 the reloc address or the reloc symbol index.
7131
7132 The back end routine is given a pointer to the swapped in
7133 internal symbols, and can access the hash table entries
7134 for the external symbols via elf_sym_hashes (input_bfd).
7135
7136 When generating relocateable output, the back end routine
7137 must handle STB_LOCAL/STT_SECTION symbols specially. The
7138 output symbol is going to be a section symbol
7139 corresponding to the output section, which will require
7140 the addend to be adjusted. */
7141
7142 if (! (*relocate_section) (output_bfd, finfo->info,
7143 input_bfd, o, contents,
7144 internal_relocs,
7145 isymbuf,
7146 finfo->sections))
7147 return FALSE;
7148
7149 if (emit_relocs)
7150 {
7151 Elf_Internal_Rela *irela;
7152 Elf_Internal_Rela *irelaend;
7153 bfd_vma last_offset;
7154 struct elf_link_hash_entry **rel_hash;
7155 Elf_Internal_Shdr *input_rel_hdr, *input_rel_hdr2;
7156 unsigned int next_erel;
7157 bfd_boolean (*reloc_emitter)
7158 PARAMS ((bfd *, asection *, Elf_Internal_Shdr *,
7159 Elf_Internal_Rela *));
7160 bfd_boolean rela_normal;
7161
7162 input_rel_hdr = &elf_section_data (o)->rel_hdr;
7163 rela_normal = (bed->rela_normal
7164 && (input_rel_hdr->sh_entsize
7165 == sizeof (Elf_External_Rela)));
7166
7167 /* Adjust the reloc addresses and symbol indices. */
7168
7169 irela = internal_relocs;
7170 irelaend = irela + o->reloc_count * bed->s->int_rels_per_ext_rel;
7171 rel_hash = (elf_section_data (o->output_section)->rel_hashes
7172 + elf_section_data (o->output_section)->rel_count
7173 + elf_section_data (o->output_section)->rel_count2);
7174 last_offset = o->output_offset;
7175 if (!finfo->info->relocateable)
7176 last_offset += o->output_section->vma;
7177 for (next_erel = 0; irela < irelaend; irela++, next_erel++)
7178 {
7179 unsigned long r_symndx;
7180 asection *sec;
7181 Elf_Internal_Sym sym;
7182
7183 if (next_erel == bed->s->int_rels_per_ext_rel)
7184 {
7185 rel_hash++;
7186 next_erel = 0;
7187 }
7188
7189 irela->r_offset = _bfd_elf_section_offset (output_bfd,
7190 finfo->info, o,
7191 irela->r_offset);
7192 if (irela->r_offset >= (bfd_vma) -2)
7193 {
7194 /* This is a reloc for a deleted entry or somesuch.
7195 Turn it into an R_*_NONE reloc, at the same
7196 offset as the last reloc. elf_eh_frame.c and
7197 elf_bfd_discard_info rely on reloc offsets
7198 being ordered. */
7199 irela->r_offset = last_offset;
7200 irela->r_info = 0;
7201 irela->r_addend = 0;
7202 continue;
7203 }
7204
7205 irela->r_offset += o->output_offset;
7206
7207 /* Relocs in an executable have to be virtual addresses. */
7208 if (!finfo->info->relocateable)
7209 irela->r_offset += o->output_section->vma;
7210
7211 last_offset = irela->r_offset;
7212
7213 r_symndx = ELF_R_SYM (irela->r_info);
7214 if (r_symndx == STN_UNDEF)
7215 continue;
7216
7217 if (r_symndx >= locsymcount
7218 || (elf_bad_symtab (input_bfd)
7219 && finfo->sections[r_symndx] == NULL))
7220 {
7221 struct elf_link_hash_entry *rh;
7222 unsigned long indx;
7223
7224 /* This is a reloc against a global symbol. We
7225 have not yet output all the local symbols, so
7226 we do not know the symbol index of any global
7227 symbol. We set the rel_hash entry for this
7228 reloc to point to the global hash table entry
7229 for this symbol. The symbol index is then
7230 set at the end of elf_bfd_final_link. */
7231 indx = r_symndx - extsymoff;
7232 rh = elf_sym_hashes (input_bfd)[indx];
7233 while (rh->root.type == bfd_link_hash_indirect
7234 || rh->root.type == bfd_link_hash_warning)
7235 rh = (struct elf_link_hash_entry *) rh->root.u.i.link;
7236
7237 /* Setting the index to -2 tells
7238 elf_link_output_extsym that this symbol is
7239 used by a reloc. */
7240 BFD_ASSERT (rh->indx < 0);
7241 rh->indx = -2;
7242
7243 *rel_hash = rh;
7244
7245 continue;
7246 }
7247
7248 /* This is a reloc against a local symbol. */
7249
7250 *rel_hash = NULL;
7251 sym = isymbuf[r_symndx];
7252 sec = finfo->sections[r_symndx];
7253 if (ELF_ST_TYPE (sym.st_info) == STT_SECTION)
7254 {
7255 /* I suppose the backend ought to fill in the
7256 section of any STT_SECTION symbol against a
7257 processor specific section. If we have
7258 discarded a section, the output_section will
7259 be the absolute section. */
7260 if (bfd_is_abs_section (sec)
7261 || (sec != NULL
7262 && bfd_is_abs_section (sec->output_section)))
7263 r_symndx = 0;
7264 else if (sec == NULL || sec->owner == NULL)
7265 {
7266 bfd_set_error (bfd_error_bad_value);
7267 return FALSE;
7268 }
7269 else
7270 {
7271 r_symndx = sec->output_section->target_index;
7272 BFD_ASSERT (r_symndx != 0);
7273 }
7274
7275 /* Adjust the addend according to where the
7276 section winds up in the output section. */
7277 if (rela_normal)
7278 irela->r_addend += sec->output_offset;
7279 }
7280 else
7281 {
7282 if (finfo->indices[r_symndx] == -1)
7283 {
7284 unsigned long shlink;
7285 const char *name;
7286 asection *osec;
7287
7288 if (finfo->info->strip == strip_all)
7289 {
7290 /* You can't do ld -r -s. */
7291 bfd_set_error (bfd_error_invalid_operation);
7292 return FALSE;
7293 }
7294
7295 /* This symbol was skipped earlier, but
7296 since it is needed by a reloc, we
7297 must output it now. */
7298 shlink = symtab_hdr->sh_link;
7299 name = (bfd_elf_string_from_elf_section
7300 (input_bfd, shlink, sym.st_name));
7301 if (name == NULL)
7302 return FALSE;
7303
7304 osec = sec->output_section;
7305 sym.st_shndx =
7306 _bfd_elf_section_from_bfd_section (output_bfd,
7307 osec);
7308 if (sym.st_shndx == SHN_BAD)
7309 return FALSE;
7310
7311 sym.st_value += sec->output_offset;
7312 if (! finfo->info->relocateable)
7313 {
7314 sym.st_value += osec->vma;
7315 if (ELF_ST_TYPE (sym.st_info) == STT_TLS)
7316 {
7317 /* STT_TLS symbols are relative to PT_TLS
7318 segment base. */
7319 BFD_ASSERT (finfo->first_tls_sec != NULL);
7320 sym.st_value -= finfo->first_tls_sec->vma;
7321 }
7322 }
7323
7324 finfo->indices[r_symndx]
7325 = bfd_get_symcount (output_bfd);
7326
7327 if (! elf_link_output_sym (finfo, name, &sym, sec))
7328 return FALSE;
7329 }
7330
7331 r_symndx = finfo->indices[r_symndx];
7332 }
7333
7334 irela->r_info = ELF_R_INFO (r_symndx,
7335 ELF_R_TYPE (irela->r_info));
7336 }
7337
7338 /* Swap out the relocs. */
7339 if (bed->elf_backend_emit_relocs
7340 && !(finfo->info->relocateable
7341 || finfo->info->emitrelocations))
7342 reloc_emitter = bed->elf_backend_emit_relocs;
7343 else
7344 reloc_emitter = elf_link_output_relocs;
7345
7346 if (input_rel_hdr->sh_size != 0
7347 && ! (*reloc_emitter) (output_bfd, o, input_rel_hdr,
7348 internal_relocs))
7349 return FALSE;
7350
7351 input_rel_hdr2 = elf_section_data (o)->rel_hdr2;
7352 if (input_rel_hdr2 && input_rel_hdr2->sh_size != 0)
7353 {
7354 internal_relocs += (NUM_SHDR_ENTRIES (input_rel_hdr)
7355 * bed->s->int_rels_per_ext_rel);
7356 if (! (*reloc_emitter) (output_bfd, o, input_rel_hdr2,
7357 internal_relocs))
7358 return FALSE;
7359 }
7360 }
7361 }
7362
7363 /* Write out the modified section contents. */
7364 if (bed->elf_backend_write_section
7365 && (*bed->elf_backend_write_section) (output_bfd, o, contents))
7366 {
7367 /* Section written out. */
7368 }
7369 else switch (o->sec_info_type)
7370 {
7371 case ELF_INFO_TYPE_STABS:
7372 if (! (_bfd_write_section_stabs
7373 (output_bfd,
7374 &elf_hash_table (finfo->info)->stab_info,
7375 o, &elf_section_data (o)->sec_info, contents)))
7376 return FALSE;
7377 break;
7378 case ELF_INFO_TYPE_MERGE:
7379 if (! _bfd_write_merged_section (output_bfd, o,
7380 elf_section_data (o)->sec_info))
7381 return FALSE;
7382 break;
7383 case ELF_INFO_TYPE_EH_FRAME:
7384 {
7385 if (! _bfd_elf_write_section_eh_frame (output_bfd, finfo->info,
7386 o, contents))
7387 return FALSE;
7388 }
7389 break;
7390 default:
7391 {
7392 bfd_size_type sec_size;
7393
7394 sec_size = (o->_cooked_size != 0 ? o->_cooked_size : o->_raw_size);
7395 if (! (o->flags & SEC_EXCLUDE)
7396 && ! bfd_set_section_contents (output_bfd, o->output_section,
7397 contents,
7398 (file_ptr) o->output_offset,
7399 sec_size))
7400 return FALSE;
7401 }
7402 break;
7403 }
7404 }
7405
7406 return TRUE;
7407 }
7408
7409 /* Generate a reloc when linking an ELF file. This is a reloc
7410 requested by the linker, and does come from any input file. This
7411 is used to build constructor and destructor tables when linking
7412 with -Ur. */
7413
7414 static bfd_boolean
elf_reloc_link_order(output_bfd,info,output_section,link_order)7415 elf_reloc_link_order (output_bfd, info, output_section, link_order)
7416 bfd *output_bfd;
7417 struct bfd_link_info *info;
7418 asection *output_section;
7419 struct bfd_link_order *link_order;
7420 {
7421 reloc_howto_type *howto;
7422 long indx;
7423 bfd_vma offset;
7424 bfd_vma addend;
7425 struct elf_link_hash_entry **rel_hash_ptr;
7426 Elf_Internal_Shdr *rel_hdr;
7427 struct elf_backend_data *bed = get_elf_backend_data (output_bfd);
7428 Elf_Internal_Rela irel[MAX_INT_RELS_PER_EXT_REL];
7429 bfd_byte *erel;
7430 unsigned int i;
7431
7432 howto = bfd_reloc_type_lookup (output_bfd, link_order->u.reloc.p->reloc);
7433 if (howto == NULL)
7434 {
7435 bfd_set_error (bfd_error_bad_value);
7436 return FALSE;
7437 }
7438
7439 addend = link_order->u.reloc.p->addend;
7440
7441 /* Figure out the symbol index. */
7442 rel_hash_ptr = (elf_section_data (output_section)->rel_hashes
7443 + elf_section_data (output_section)->rel_count
7444 + elf_section_data (output_section)->rel_count2);
7445 if (link_order->type == bfd_section_reloc_link_order)
7446 {
7447 indx = link_order->u.reloc.p->u.section->target_index;
7448 BFD_ASSERT (indx != 0);
7449 *rel_hash_ptr = NULL;
7450 }
7451 else
7452 {
7453 struct elf_link_hash_entry *h;
7454
7455 /* Treat a reloc against a defined symbol as though it were
7456 actually against the section. */
7457 h = ((struct elf_link_hash_entry *)
7458 bfd_wrapped_link_hash_lookup (output_bfd, info,
7459 link_order->u.reloc.p->u.name,
7460 FALSE, FALSE, TRUE));
7461 if (h != NULL
7462 && (h->root.type == bfd_link_hash_defined
7463 || h->root.type == bfd_link_hash_defweak))
7464 {
7465 asection *section;
7466
7467 section = h->root.u.def.section;
7468 indx = section->output_section->target_index;
7469 *rel_hash_ptr = NULL;
7470 /* It seems that we ought to add the symbol value to the
7471 addend here, but in practice it has already been added
7472 because it was passed to constructor_callback. */
7473 addend += section->output_section->vma + section->output_offset;
7474 }
7475 else if (h != NULL)
7476 {
7477 /* Setting the index to -2 tells elf_link_output_extsym that
7478 this symbol is used by a reloc. */
7479 h->indx = -2;
7480 *rel_hash_ptr = h;
7481 indx = 0;
7482 }
7483 else
7484 {
7485 if (! ((*info->callbacks->unattached_reloc)
7486 (info, link_order->u.reloc.p->u.name, (bfd *) NULL,
7487 (asection *) NULL, (bfd_vma) 0)))
7488 return FALSE;
7489 indx = 0;
7490 }
7491 }
7492
7493 /* If this is an inplace reloc, we must write the addend into the
7494 object file. */
7495 if (howto->partial_inplace && addend != 0)
7496 {
7497 bfd_size_type size;
7498 bfd_reloc_status_type rstat;
7499 bfd_byte *buf;
7500 bfd_boolean ok;
7501 const char *sym_name;
7502
7503 size = bfd_get_reloc_size (howto);
7504 buf = (bfd_byte *) bfd_zmalloc (size);
7505 if (buf == (bfd_byte *) NULL)
7506 return FALSE;
7507 rstat = _bfd_relocate_contents (howto, output_bfd, (bfd_vma) addend, buf);
7508 switch (rstat)
7509 {
7510 case bfd_reloc_ok:
7511 break;
7512
7513 default:
7514 case bfd_reloc_outofrange:
7515 abort ();
7516
7517 case bfd_reloc_overflow:
7518 if (link_order->type == bfd_section_reloc_link_order)
7519 sym_name = bfd_section_name (output_bfd,
7520 link_order->u.reloc.p->u.section);
7521 else
7522 sym_name = link_order->u.reloc.p->u.name;
7523 if (! ((*info->callbacks->reloc_overflow)
7524 (info, sym_name, howto->name, addend,
7525 (bfd *) NULL, (asection *) NULL, (bfd_vma) 0)))
7526 {
7527 free (buf);
7528 return FALSE;
7529 }
7530 break;
7531 }
7532 ok = bfd_set_section_contents (output_bfd, output_section, (PTR) buf,
7533 (file_ptr) link_order->offset, size);
7534 free (buf);
7535 if (! ok)
7536 return FALSE;
7537 }
7538
7539 /* The address of a reloc is relative to the section in a
7540 relocateable file, and is a virtual address in an executable
7541 file. */
7542 offset = link_order->offset;
7543 if (! info->relocateable)
7544 offset += output_section->vma;
7545
7546 for (i = 0; i < bed->s->int_rels_per_ext_rel; i++)
7547 {
7548 irel[i].r_offset = offset;
7549 irel[i].r_info = 0;
7550 irel[i].r_addend = 0;
7551 }
7552 irel[0].r_info = ELF_R_INFO (indx, howto->type);
7553
7554 rel_hdr = &elf_section_data (output_section)->rel_hdr;
7555 erel = rel_hdr->contents;
7556 if (rel_hdr->sh_type == SHT_REL)
7557 {
7558 erel += (elf_section_data (output_section)->rel_count
7559 * sizeof (Elf_External_Rel));
7560 (*bed->s->swap_reloc_out) (output_bfd, irel, erel);
7561 }
7562 else
7563 {
7564 irel[0].r_addend = addend;
7565 erel += (elf_section_data (output_section)->rel_count
7566 * sizeof (Elf_External_Rela));
7567 (*bed->s->swap_reloca_out) (output_bfd, irel, erel);
7568 }
7569
7570 ++elf_section_data (output_section)->rel_count;
7571
7572 return TRUE;
7573 }
7574
7575 /* Allocate a pointer to live in a linker created section. */
7576
7577 bfd_boolean
elf_create_pointer_linker_section(abfd,info,lsect,h,rel)7578 elf_create_pointer_linker_section (abfd, info, lsect, h, rel)
7579 bfd *abfd;
7580 struct bfd_link_info *info;
7581 elf_linker_section_t *lsect;
7582 struct elf_link_hash_entry *h;
7583 const Elf_Internal_Rela *rel;
7584 {
7585 elf_linker_section_pointers_t **ptr_linker_section_ptr = NULL;
7586 elf_linker_section_pointers_t *linker_section_ptr;
7587 unsigned long r_symndx = ELF_R_SYM (rel->r_info);
7588 bfd_size_type amt;
7589
7590 BFD_ASSERT (lsect != NULL);
7591
7592 /* Is this a global symbol? */
7593 if (h != NULL)
7594 {
7595 /* Has this symbol already been allocated? If so, our work is done. */
7596 if (_bfd_elf_find_pointer_linker_section (h->linker_section_pointer,
7597 rel->r_addend,
7598 lsect->which))
7599 return TRUE;
7600
7601 ptr_linker_section_ptr = &h->linker_section_pointer;
7602 /* Make sure this symbol is output as a dynamic symbol. */
7603 if (h->dynindx == -1)
7604 {
7605 if (! elf_link_record_dynamic_symbol (info, h))
7606 return FALSE;
7607 }
7608
7609 if (lsect->rel_section)
7610 lsect->rel_section->_raw_size += sizeof (Elf_External_Rela);
7611 }
7612 else
7613 {
7614 /* Allocation of a pointer to a local symbol. */
7615 elf_linker_section_pointers_t **ptr = elf_local_ptr_offsets (abfd);
7616
7617 /* Allocate a table to hold the local symbols if first time. */
7618 if (!ptr)
7619 {
7620 unsigned int num_symbols = elf_tdata (abfd)->symtab_hdr.sh_info;
7621 register unsigned int i;
7622
7623 amt = num_symbols;
7624 amt *= sizeof (elf_linker_section_pointers_t *);
7625 ptr = (elf_linker_section_pointers_t **) bfd_alloc (abfd, amt);
7626
7627 if (!ptr)
7628 return FALSE;
7629
7630 elf_local_ptr_offsets (abfd) = ptr;
7631 for (i = 0; i < num_symbols; i++)
7632 ptr[i] = (elf_linker_section_pointers_t *) 0;
7633 }
7634
7635 /* Has this symbol already been allocated? If so, our work is done. */
7636 if (_bfd_elf_find_pointer_linker_section (ptr[r_symndx],
7637 rel->r_addend,
7638 lsect->which))
7639 return TRUE;
7640
7641 ptr_linker_section_ptr = &ptr[r_symndx];
7642
7643 if (info->shared)
7644 {
7645 /* If we are generating a shared object, we need to
7646 output a R_<xxx>_RELATIVE reloc so that the
7647 dynamic linker can adjust this GOT entry. */
7648 BFD_ASSERT (lsect->rel_section != NULL);
7649 lsect->rel_section->_raw_size += sizeof (Elf_External_Rela);
7650 }
7651 }
7652
7653 /* Allocate space for a pointer in the linker section, and allocate
7654 a new pointer record from internal memory. */
7655 BFD_ASSERT (ptr_linker_section_ptr != NULL);
7656 amt = sizeof (elf_linker_section_pointers_t);
7657 linker_section_ptr = (elf_linker_section_pointers_t *) bfd_alloc (abfd, amt);
7658
7659 if (!linker_section_ptr)
7660 return FALSE;
7661
7662 linker_section_ptr->next = *ptr_linker_section_ptr;
7663 linker_section_ptr->addend = rel->r_addend;
7664 linker_section_ptr->which = lsect->which;
7665 linker_section_ptr->written_address_p = FALSE;
7666 *ptr_linker_section_ptr = linker_section_ptr;
7667
7668 #if 0
7669 if (lsect->hole_size && lsect->hole_offset < lsect->max_hole_offset)
7670 {
7671 linker_section_ptr->offset = (lsect->section->_raw_size
7672 - lsect->hole_size + (ARCH_SIZE / 8));
7673 lsect->hole_offset += ARCH_SIZE / 8;
7674 lsect->sym_offset += ARCH_SIZE / 8;
7675 if (lsect->sym_hash)
7676 {
7677 /* Bump up symbol value if needed. */
7678 lsect->sym_hash->root.u.def.value += ARCH_SIZE / 8;
7679 #ifdef DEBUG
7680 fprintf (stderr, "Bump up %s by %ld, current value = %ld\n",
7681 lsect->sym_hash->root.root.string,
7682 (long) ARCH_SIZE / 8,
7683 (long) lsect->sym_hash->root.u.def.value);
7684 #endif
7685 }
7686 }
7687 else
7688 #endif
7689 linker_section_ptr->offset = lsect->section->_raw_size;
7690
7691 lsect->section->_raw_size += ARCH_SIZE / 8;
7692
7693 #ifdef DEBUG
7694 fprintf (stderr,
7695 "Create pointer in linker section %s, offset = %ld, section size = %ld\n",
7696 lsect->name, (long) linker_section_ptr->offset,
7697 (long) lsect->section->_raw_size);
7698 #endif
7699
7700 return TRUE;
7701 }
7702
7703 #if ARCH_SIZE==64
7704 #define bfd_put_ptr(BFD,VAL,ADDR) bfd_put_64 (BFD, VAL, ADDR)
7705 #endif
7706 #if ARCH_SIZE==32
7707 #define bfd_put_ptr(BFD,VAL,ADDR) bfd_put_32 (BFD, VAL, ADDR)
7708 #endif
7709
7710 /* Fill in the address for a pointer generated in a linker section. */
7711
7712 bfd_vma
elf_finish_pointer_linker_section(output_bfd,input_bfd,info,lsect,h,relocation,rel,relative_reloc)7713 elf_finish_pointer_linker_section (output_bfd, input_bfd, info, lsect, h,
7714 relocation, rel, relative_reloc)
7715 bfd *output_bfd;
7716 bfd *input_bfd;
7717 struct bfd_link_info *info;
7718 elf_linker_section_t *lsect;
7719 struct elf_link_hash_entry *h;
7720 bfd_vma relocation;
7721 const Elf_Internal_Rela *rel;
7722 int relative_reloc;
7723 {
7724 elf_linker_section_pointers_t *linker_section_ptr;
7725
7726 BFD_ASSERT (lsect != NULL);
7727
7728 if (h != NULL)
7729 {
7730 /* Handle global symbol. */
7731 linker_section_ptr = (_bfd_elf_find_pointer_linker_section
7732 (h->linker_section_pointer,
7733 rel->r_addend,
7734 lsect->which));
7735
7736 BFD_ASSERT (linker_section_ptr != NULL);
7737
7738 if (! elf_hash_table (info)->dynamic_sections_created
7739 || (info->shared
7740 && info->symbolic
7741 && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR)))
7742 {
7743 /* This is actually a static link, or it is a
7744 -Bsymbolic link and the symbol is defined
7745 locally. We must initialize this entry in the
7746 global section.
7747
7748 When doing a dynamic link, we create a .rela.<xxx>
7749 relocation entry to initialize the value. This
7750 is done in the finish_dynamic_symbol routine. */
7751 if (!linker_section_ptr->written_address_p)
7752 {
7753 linker_section_ptr->written_address_p = TRUE;
7754 bfd_put_ptr (output_bfd,
7755 relocation + linker_section_ptr->addend,
7756 (lsect->section->contents
7757 + linker_section_ptr->offset));
7758 }
7759 }
7760 }
7761 else
7762 {
7763 /* Handle local symbol. */
7764 unsigned long r_symndx = ELF_R_SYM (rel->r_info);
7765 BFD_ASSERT (elf_local_ptr_offsets (input_bfd) != NULL);
7766 BFD_ASSERT (elf_local_ptr_offsets (input_bfd)[r_symndx] != NULL);
7767 linker_section_ptr = (_bfd_elf_find_pointer_linker_section
7768 (elf_local_ptr_offsets (input_bfd)[r_symndx],
7769 rel->r_addend,
7770 lsect->which));
7771
7772 BFD_ASSERT (linker_section_ptr != NULL);
7773
7774 /* Write out pointer if it hasn't been rewritten out before. */
7775 if (!linker_section_ptr->written_address_p)
7776 {
7777 linker_section_ptr->written_address_p = TRUE;
7778 bfd_put_ptr (output_bfd, relocation + linker_section_ptr->addend,
7779 lsect->section->contents + linker_section_ptr->offset);
7780
7781 if (info->shared)
7782 {
7783 asection *srel = lsect->rel_section;
7784 Elf_Internal_Rela outrel[MAX_INT_RELS_PER_EXT_REL];
7785 bfd_byte *erel;
7786 struct elf_backend_data *bed = get_elf_backend_data (output_bfd);
7787 unsigned int i;
7788
7789 /* We need to generate a relative reloc for the dynamic
7790 linker. */
7791 if (!srel)
7792 {
7793 srel = bfd_get_section_by_name (elf_hash_table (info)->dynobj,
7794 lsect->rel_name);
7795 lsect->rel_section = srel;
7796 }
7797
7798 BFD_ASSERT (srel != NULL);
7799
7800 for (i = 0; i < bed->s->int_rels_per_ext_rel; i++)
7801 {
7802 outrel[i].r_offset = (lsect->section->output_section->vma
7803 + lsect->section->output_offset
7804 + linker_section_ptr->offset);
7805 outrel[i].r_info = 0;
7806 outrel[i].r_addend = 0;
7807 }
7808 outrel[0].r_info = ELF_R_INFO (0, relative_reloc);
7809 erel = lsect->section->contents;
7810 erel += (elf_section_data (lsect->section)->rel_count++
7811 * sizeof (Elf_External_Rela));
7812 elf_swap_reloca_out (output_bfd, outrel, erel);
7813 }
7814 }
7815 }
7816
7817 relocation = (lsect->section->output_offset
7818 + linker_section_ptr->offset
7819 - lsect->hole_offset
7820 - lsect->sym_offset);
7821
7822 #ifdef DEBUG
7823 fprintf (stderr,
7824 "Finish pointer in linker section %s, offset = %ld (0x%lx)\n",
7825 lsect->name, (long) relocation, (long) relocation);
7826 #endif
7827
7828 /* Subtract out the addend, because it will get added back in by the normal
7829 processing. */
7830 return relocation - linker_section_ptr->addend;
7831 }
7832
7833 /* Garbage collect unused sections. */
7834
7835 static bfd_boolean elf_gc_mark
7836 PARAMS ((struct bfd_link_info *, asection *,
7837 asection * (*) (asection *, struct bfd_link_info *,
7838 Elf_Internal_Rela *, struct elf_link_hash_entry *,
7839 Elf_Internal_Sym *)));
7840
7841 static bfd_boolean elf_gc_sweep
7842 PARAMS ((struct bfd_link_info *,
7843 bfd_boolean (*) (bfd *, struct bfd_link_info *, asection *,
7844 const Elf_Internal_Rela *)));
7845
7846 static bfd_boolean elf_gc_sweep_symbol
7847 PARAMS ((struct elf_link_hash_entry *, PTR));
7848
7849 static bfd_boolean elf_gc_allocate_got_offsets
7850 PARAMS ((struct elf_link_hash_entry *, PTR));
7851
7852 static bfd_boolean elf_gc_propagate_vtable_entries_used
7853 PARAMS ((struct elf_link_hash_entry *, PTR));
7854
7855 static bfd_boolean elf_gc_smash_unused_vtentry_relocs
7856 PARAMS ((struct elf_link_hash_entry *, PTR));
7857
7858 /* The mark phase of garbage collection. For a given section, mark
7859 it and any sections in this section's group, and all the sections
7860 which define symbols to which it refers. */
7861
7862 typedef asection * (*gc_mark_hook_fn)
7863 PARAMS ((asection *, struct bfd_link_info *, Elf_Internal_Rela *,
7864 struct elf_link_hash_entry *, Elf_Internal_Sym *));
7865
7866 static bfd_boolean
elf_gc_mark(info,sec,gc_mark_hook)7867 elf_gc_mark (info, sec, gc_mark_hook)
7868 struct bfd_link_info *info;
7869 asection *sec;
7870 gc_mark_hook_fn gc_mark_hook;
7871 {
7872 bfd_boolean ret;
7873 asection *group_sec;
7874
7875 sec->gc_mark = 1;
7876
7877 /* Mark all the sections in the group. */
7878 group_sec = elf_section_data (sec)->next_in_group;
7879 if (group_sec && !group_sec->gc_mark)
7880 if (!elf_gc_mark (info, group_sec, gc_mark_hook))
7881 return FALSE;
7882
7883 /* Look through the section relocs. */
7884 ret = TRUE;
7885 if ((sec->flags & SEC_RELOC) != 0 && sec->reloc_count > 0)
7886 {
7887 Elf_Internal_Rela *relstart, *rel, *relend;
7888 Elf_Internal_Shdr *symtab_hdr;
7889 struct elf_link_hash_entry **sym_hashes;
7890 size_t nlocsyms;
7891 size_t extsymoff;
7892 bfd *input_bfd = sec->owner;
7893 struct elf_backend_data *bed = get_elf_backend_data (input_bfd);
7894 Elf_Internal_Sym *isym = NULL;
7895
7896 symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
7897 sym_hashes = elf_sym_hashes (input_bfd);
7898
7899 /* Read the local symbols. */
7900 if (elf_bad_symtab (input_bfd))
7901 {
7902 nlocsyms = symtab_hdr->sh_size / sizeof (Elf_External_Sym);
7903 extsymoff = 0;
7904 }
7905 else
7906 extsymoff = nlocsyms = symtab_hdr->sh_info;
7907
7908 isym = (Elf_Internal_Sym *) symtab_hdr->contents;
7909 if (isym == NULL && nlocsyms != 0)
7910 {
7911 isym = bfd_elf_get_elf_syms (input_bfd, symtab_hdr, nlocsyms, 0,
7912 NULL, NULL, NULL);
7913 if (isym == NULL)
7914 return FALSE;
7915 }
7916
7917 /* Read the relocations. */
7918 relstart = (NAME(_bfd_elf,link_read_relocs)
7919 (input_bfd, sec, NULL, (Elf_Internal_Rela *) NULL,
7920 info->keep_memory));
7921 if (relstart == NULL)
7922 {
7923 ret = FALSE;
7924 goto out1;
7925 }
7926 relend = relstart + sec->reloc_count * bed->s->int_rels_per_ext_rel;
7927
7928 for (rel = relstart; rel < relend; rel++)
7929 {
7930 unsigned long r_symndx;
7931 asection *rsec;
7932 struct elf_link_hash_entry *h;
7933
7934 r_symndx = ELF_R_SYM (rel->r_info);
7935 if (r_symndx == 0)
7936 continue;
7937
7938 if (r_symndx >= nlocsyms
7939 || ELF_ST_BIND (isym[r_symndx].st_info) != STB_LOCAL)
7940 {
7941 h = sym_hashes[r_symndx - extsymoff];
7942 rsec = (*gc_mark_hook) (sec, info, rel, h, NULL);
7943 }
7944 else
7945 {
7946 rsec = (*gc_mark_hook) (sec, info, rel, NULL, &isym[r_symndx]);
7947 }
7948
7949 if (rsec && !rsec->gc_mark)
7950 {
7951 if (bfd_get_flavour (rsec->owner) != bfd_target_elf_flavour)
7952 rsec->gc_mark = 1;
7953 else if (!elf_gc_mark (info, rsec, gc_mark_hook))
7954 {
7955 ret = FALSE;
7956 goto out2;
7957 }
7958 }
7959 }
7960
7961 out2:
7962 if (elf_section_data (sec)->relocs != relstart)
7963 free (relstart);
7964 out1:
7965 if (isym != NULL && symtab_hdr->contents != (unsigned char *) isym)
7966 {
7967 if (! info->keep_memory)
7968 free (isym);
7969 else
7970 symtab_hdr->contents = (unsigned char *) isym;
7971 }
7972 }
7973
7974 return ret;
7975 }
7976
7977 /* The sweep phase of garbage collection. Remove all garbage sections. */
7978
7979 typedef bfd_boolean (*gc_sweep_hook_fn)
7980 PARAMS ((bfd *, struct bfd_link_info *, asection *,
7981 const Elf_Internal_Rela *));
7982
7983 static bfd_boolean
elf_gc_sweep(info,gc_sweep_hook)7984 elf_gc_sweep (info, gc_sweep_hook)
7985 struct bfd_link_info *info;
7986 gc_sweep_hook_fn gc_sweep_hook;
7987 {
7988 bfd *sub;
7989
7990 for (sub = info->input_bfds; sub != NULL; sub = sub->link_next)
7991 {
7992 asection *o;
7993
7994 if (bfd_get_flavour (sub) != bfd_target_elf_flavour)
7995 continue;
7996
7997 for (o = sub->sections; o != NULL; o = o->next)
7998 {
7999 /* Keep special sections. Keep .debug sections. */
8000 if ((o->flags & SEC_LINKER_CREATED)
8001 || (o->flags & SEC_DEBUGGING))
8002 o->gc_mark = 1;
8003
8004 if (o->gc_mark)
8005 continue;
8006
8007 /* Skip sweeping sections already excluded. */
8008 if (o->flags & SEC_EXCLUDE)
8009 continue;
8010
8011 /* Since this is early in the link process, it is simple
8012 to remove a section from the output. */
8013 o->flags |= SEC_EXCLUDE;
8014
8015 /* But we also have to update some of the relocation
8016 info we collected before. */
8017 if (gc_sweep_hook
8018 && (o->flags & SEC_RELOC) && o->reloc_count > 0)
8019 {
8020 Elf_Internal_Rela *internal_relocs;
8021 bfd_boolean r;
8022
8023 internal_relocs = (NAME(_bfd_elf,link_read_relocs)
8024 (o->owner, o, NULL, NULL, info->keep_memory));
8025 if (internal_relocs == NULL)
8026 return FALSE;
8027
8028 r = (*gc_sweep_hook) (o->owner, info, o, internal_relocs);
8029
8030 if (elf_section_data (o)->relocs != internal_relocs)
8031 free (internal_relocs);
8032
8033 if (!r)
8034 return FALSE;
8035 }
8036 }
8037 }
8038
8039 /* Remove the symbols that were in the swept sections from the dynamic
8040 symbol table. GCFIXME: Anyone know how to get them out of the
8041 static symbol table as well? */
8042 {
8043 int i = 0;
8044
8045 elf_link_hash_traverse (elf_hash_table (info),
8046 elf_gc_sweep_symbol,
8047 (PTR) &i);
8048
8049 elf_hash_table (info)->dynsymcount = i;
8050 }
8051
8052 return TRUE;
8053 }
8054
8055 /* Sweep symbols in swept sections. Called via elf_link_hash_traverse. */
8056
8057 static bfd_boolean
elf_gc_sweep_symbol(h,idxptr)8058 elf_gc_sweep_symbol (h, idxptr)
8059 struct elf_link_hash_entry *h;
8060 PTR idxptr;
8061 {
8062 int *idx = (int *) idxptr;
8063
8064 if (h->root.type == bfd_link_hash_warning)
8065 h = (struct elf_link_hash_entry *) h->root.u.i.link;
8066
8067 if (h->dynindx != -1
8068 && ((h->root.type != bfd_link_hash_defined
8069 && h->root.type != bfd_link_hash_defweak)
8070 || h->root.u.def.section->gc_mark))
8071 h->dynindx = (*idx)++;
8072
8073 return TRUE;
8074 }
8075
8076 /* Propogate collected vtable information. This is called through
8077 elf_link_hash_traverse. */
8078
8079 static bfd_boolean
elf_gc_propagate_vtable_entries_used(h,okp)8080 elf_gc_propagate_vtable_entries_used (h, okp)
8081 struct elf_link_hash_entry *h;
8082 PTR okp;
8083 {
8084 if (h->root.type == bfd_link_hash_warning)
8085 h = (struct elf_link_hash_entry *) h->root.u.i.link;
8086
8087 /* Those that are not vtables. */
8088 if (h->vtable_parent == NULL)
8089 return TRUE;
8090
8091 /* Those vtables that do not have parents, we cannot merge. */
8092 if (h->vtable_parent == (struct elf_link_hash_entry *) -1)
8093 return TRUE;
8094
8095 /* If we've already been done, exit. */
8096 if (h->vtable_entries_used && h->vtable_entries_used[-1])
8097 return TRUE;
8098
8099 /* Make sure the parent's table is up to date. */
8100 elf_gc_propagate_vtable_entries_used (h->vtable_parent, okp);
8101
8102 if (h->vtable_entries_used == NULL)
8103 {
8104 /* None of this table's entries were referenced. Re-use the
8105 parent's table. */
8106 h->vtable_entries_used = h->vtable_parent->vtable_entries_used;
8107 h->vtable_entries_size = h->vtable_parent->vtable_entries_size;
8108 }
8109 else
8110 {
8111 size_t n;
8112 bfd_boolean *cu, *pu;
8113
8114 /* Or the parent's entries into ours. */
8115 cu = h->vtable_entries_used;
8116 cu[-1] = TRUE;
8117 pu = h->vtable_parent->vtable_entries_used;
8118 if (pu != NULL)
8119 {
8120 asection *sec = h->root.u.def.section;
8121 struct elf_backend_data *bed = get_elf_backend_data (sec->owner);
8122 int file_align = bed->s->file_align;
8123
8124 n = h->vtable_parent->vtable_entries_size / file_align;
8125 while (n--)
8126 {
8127 if (*pu)
8128 *cu = TRUE;
8129 pu++;
8130 cu++;
8131 }
8132 }
8133 }
8134
8135 return TRUE;
8136 }
8137
8138 static bfd_boolean
elf_gc_smash_unused_vtentry_relocs(h,okp)8139 elf_gc_smash_unused_vtentry_relocs (h, okp)
8140 struct elf_link_hash_entry *h;
8141 PTR okp;
8142 {
8143 asection *sec;
8144 bfd_vma hstart, hend;
8145 Elf_Internal_Rela *relstart, *relend, *rel;
8146 struct elf_backend_data *bed;
8147 int file_align;
8148
8149 if (h->root.type == bfd_link_hash_warning)
8150 h = (struct elf_link_hash_entry *) h->root.u.i.link;
8151
8152 /* Take care of both those symbols that do not describe vtables as
8153 well as those that are not loaded. */
8154 if (h->vtable_parent == NULL)
8155 return TRUE;
8156
8157 BFD_ASSERT (h->root.type == bfd_link_hash_defined
8158 || h->root.type == bfd_link_hash_defweak);
8159
8160 sec = h->root.u.def.section;
8161 hstart = h->root.u.def.value;
8162 hend = hstart + h->size;
8163
8164 relstart = (NAME(_bfd_elf,link_read_relocs)
8165 (sec->owner, sec, NULL, (Elf_Internal_Rela *) NULL, TRUE));
8166 if (!relstart)
8167 return *(bfd_boolean *) okp = FALSE;
8168 bed = get_elf_backend_data (sec->owner);
8169 file_align = bed->s->file_align;
8170
8171 relend = relstart + sec->reloc_count * bed->s->int_rels_per_ext_rel;
8172
8173 for (rel = relstart; rel < relend; ++rel)
8174 if (rel->r_offset >= hstart && rel->r_offset < hend)
8175 {
8176 /* If the entry is in use, do nothing. */
8177 if (h->vtable_entries_used
8178 && (rel->r_offset - hstart) < h->vtable_entries_size)
8179 {
8180 bfd_vma entry = (rel->r_offset - hstart) / file_align;
8181 if (h->vtable_entries_used[entry])
8182 continue;
8183 }
8184 /* Otherwise, kill it. */
8185 rel->r_offset = rel->r_info = rel->r_addend = 0;
8186 }
8187
8188 return TRUE;
8189 }
8190
8191 /* Do mark and sweep of unused sections. */
8192
8193 bfd_boolean
elf_gc_sections(abfd,info)8194 elf_gc_sections (abfd, info)
8195 bfd *abfd;
8196 struct bfd_link_info *info;
8197 {
8198 bfd_boolean ok = TRUE;
8199 bfd *sub;
8200 asection * (*gc_mark_hook)
8201 PARAMS ((asection *, struct bfd_link_info *, Elf_Internal_Rela *,
8202 struct elf_link_hash_entry *h, Elf_Internal_Sym *));
8203
8204 if (!get_elf_backend_data (abfd)->can_gc_sections
8205 || info->relocateable || info->emitrelocations
8206 || elf_hash_table (info)->dynamic_sections_created)
8207 return TRUE;
8208
8209 /* Apply transitive closure to the vtable entry usage info. */
8210 elf_link_hash_traverse (elf_hash_table (info),
8211 elf_gc_propagate_vtable_entries_used,
8212 (PTR) &ok);
8213 if (!ok)
8214 return FALSE;
8215
8216 /* Kill the vtable relocations that were not used. */
8217 elf_link_hash_traverse (elf_hash_table (info),
8218 elf_gc_smash_unused_vtentry_relocs,
8219 (PTR) &ok);
8220 if (!ok)
8221 return FALSE;
8222
8223 /* Grovel through relocs to find out who stays ... */
8224
8225 gc_mark_hook = get_elf_backend_data (abfd)->gc_mark_hook;
8226 for (sub = info->input_bfds; sub != NULL; sub = sub->link_next)
8227 {
8228 asection *o;
8229
8230 if (bfd_get_flavour (sub) != bfd_target_elf_flavour)
8231 continue;
8232
8233 for (o = sub->sections; o != NULL; o = o->next)
8234 {
8235 if (o->flags & SEC_KEEP)
8236 if (!elf_gc_mark (info, o, gc_mark_hook))
8237 return FALSE;
8238 }
8239 }
8240
8241 /* ... and mark SEC_EXCLUDE for those that go. */
8242 if (!elf_gc_sweep (info, get_elf_backend_data (abfd)->gc_sweep_hook))
8243 return FALSE;
8244
8245 return TRUE;
8246 }
8247
8248 /* Called from check_relocs to record the existance of a VTINHERIT reloc. */
8249
8250 bfd_boolean
elf_gc_record_vtinherit(abfd,sec,h,offset)8251 elf_gc_record_vtinherit (abfd, sec, h, offset)
8252 bfd *abfd;
8253 asection *sec;
8254 struct elf_link_hash_entry *h;
8255 bfd_vma offset;
8256 {
8257 struct elf_link_hash_entry **sym_hashes, **sym_hashes_end;
8258 struct elf_link_hash_entry **search, *child;
8259 bfd_size_type extsymcount;
8260
8261 /* The sh_info field of the symtab header tells us where the
8262 external symbols start. We don't care about the local symbols at
8263 this point. */
8264 extsymcount = elf_tdata (abfd)->symtab_hdr.sh_size/sizeof (Elf_External_Sym);
8265 if (!elf_bad_symtab (abfd))
8266 extsymcount -= elf_tdata (abfd)->symtab_hdr.sh_info;
8267
8268 sym_hashes = elf_sym_hashes (abfd);
8269 sym_hashes_end = sym_hashes + extsymcount;
8270
8271 /* Hunt down the child symbol, which is in this section at the same
8272 offset as the relocation. */
8273 for (search = sym_hashes; search != sym_hashes_end; ++search)
8274 {
8275 if ((child = *search) != NULL
8276 && (child->root.type == bfd_link_hash_defined
8277 || child->root.type == bfd_link_hash_defweak)
8278 && child->root.u.def.section == sec
8279 && child->root.u.def.value == offset)
8280 goto win;
8281 }
8282
8283 (*_bfd_error_handler) ("%s: %s+%lu: No symbol found for INHERIT",
8284 bfd_archive_filename (abfd), sec->name,
8285 (unsigned long) offset);
8286 bfd_set_error (bfd_error_invalid_operation);
8287 return FALSE;
8288
8289 win:
8290 if (!h)
8291 {
8292 /* This *should* only be the absolute section. It could potentially
8293 be that someone has defined a non-global vtable though, which
8294 would be bad. It isn't worth paging in the local symbols to be
8295 sure though; that case should simply be handled by the assembler. */
8296
8297 child->vtable_parent = (struct elf_link_hash_entry *) -1;
8298 }
8299 else
8300 child->vtable_parent = h;
8301
8302 return TRUE;
8303 }
8304
8305 /* Called from check_relocs to record the existance of a VTENTRY reloc. */
8306
8307 bfd_boolean
elf_gc_record_vtentry(abfd,sec,h,addend)8308 elf_gc_record_vtentry (abfd, sec, h, addend)
8309 bfd *abfd ATTRIBUTE_UNUSED;
8310 asection *sec ATTRIBUTE_UNUSED;
8311 struct elf_link_hash_entry *h;
8312 bfd_vma addend;
8313 {
8314 struct elf_backend_data *bed = get_elf_backend_data (abfd);
8315 int file_align = bed->s->file_align;
8316
8317 if (addend >= h->vtable_entries_size)
8318 {
8319 size_t size, bytes;
8320 bfd_boolean *ptr = h->vtable_entries_used;
8321
8322 /* While the symbol is undefined, we have to be prepared to handle
8323 a zero size. */
8324 if (h->root.type == bfd_link_hash_undefined)
8325 size = addend;
8326 else
8327 {
8328 size = h->size;
8329 if (size < addend)
8330 {
8331 /* Oops! We've got a reference past the defined end of
8332 the table. This is probably a bug -- shall we warn? */
8333 size = addend;
8334 }
8335 }
8336
8337 /* Allocate one extra entry for use as a "done" flag for the
8338 consolidation pass. */
8339 bytes = (size / file_align + 1) * sizeof (bfd_boolean);
8340
8341 if (ptr)
8342 {
8343 ptr = bfd_realloc (ptr - 1, (bfd_size_type) bytes);
8344
8345 if (ptr != NULL)
8346 {
8347 size_t oldbytes;
8348
8349 oldbytes = ((h->vtable_entries_size / file_align + 1)
8350 * sizeof (bfd_boolean));
8351 memset (((char *) ptr) + oldbytes, 0, bytes - oldbytes);
8352 }
8353 }
8354 else
8355 ptr = bfd_zmalloc ((bfd_size_type) bytes);
8356
8357 if (ptr == NULL)
8358 return FALSE;
8359
8360 /* And arrange for that done flag to be at index -1. */
8361 h->vtable_entries_used = ptr + 1;
8362 h->vtable_entries_size = size;
8363 }
8364
8365 h->vtable_entries_used[addend / file_align] = TRUE;
8366
8367 return TRUE;
8368 }
8369
8370 /* And an accompanying bit to work out final got entry offsets once
8371 we're done. Should be called from final_link. */
8372
8373 bfd_boolean
elf_gc_common_finalize_got_offsets(abfd,info)8374 elf_gc_common_finalize_got_offsets (abfd, info)
8375 bfd *abfd;
8376 struct bfd_link_info *info;
8377 {
8378 bfd *i;
8379 struct elf_backend_data *bed = get_elf_backend_data (abfd);
8380 bfd_vma gotoff;
8381
8382 /* The GOT offset is relative to the .got section, but the GOT header is
8383 put into the .got.plt section, if the backend uses it. */
8384 if (bed->want_got_plt)
8385 gotoff = 0;
8386 else
8387 gotoff = bed->got_header_size;
8388
8389 /* Do the local .got entries first. */
8390 for (i = info->input_bfds; i; i = i->link_next)
8391 {
8392 bfd_signed_vma *local_got;
8393 bfd_size_type j, locsymcount;
8394 Elf_Internal_Shdr *symtab_hdr;
8395
8396 if (bfd_get_flavour (i) != bfd_target_elf_flavour)
8397 continue;
8398
8399 local_got = elf_local_got_refcounts (i);
8400 if (!local_got)
8401 continue;
8402
8403 symtab_hdr = &elf_tdata (i)->symtab_hdr;
8404 if (elf_bad_symtab (i))
8405 locsymcount = symtab_hdr->sh_size / sizeof (Elf_External_Sym);
8406 else
8407 locsymcount = symtab_hdr->sh_info;
8408
8409 for (j = 0; j < locsymcount; ++j)
8410 {
8411 if (local_got[j] > 0)
8412 {
8413 local_got[j] = gotoff;
8414 gotoff += ARCH_SIZE / 8;
8415 }
8416 else
8417 local_got[j] = (bfd_vma) -1;
8418 }
8419 }
8420
8421 /* Then the global .got entries. .plt refcounts are handled by
8422 adjust_dynamic_symbol */
8423 elf_link_hash_traverse (elf_hash_table (info),
8424 elf_gc_allocate_got_offsets,
8425 (PTR) &gotoff);
8426 return TRUE;
8427 }
8428
8429 /* We need a special top-level link routine to convert got reference counts
8430 to real got offsets. */
8431
8432 static bfd_boolean
elf_gc_allocate_got_offsets(h,offarg)8433 elf_gc_allocate_got_offsets (h, offarg)
8434 struct elf_link_hash_entry *h;
8435 PTR offarg;
8436 {
8437 bfd_vma *off = (bfd_vma *) offarg;
8438
8439 if (h->root.type == bfd_link_hash_warning)
8440 h = (struct elf_link_hash_entry *) h->root.u.i.link;
8441
8442 if (h->got.refcount > 0)
8443 {
8444 h->got.offset = off[0];
8445 off[0] += ARCH_SIZE / 8;
8446 }
8447 else
8448 h->got.offset = (bfd_vma) -1;
8449
8450 return TRUE;
8451 }
8452
8453 /* Many folk need no more in the way of final link than this, once
8454 got entry reference counting is enabled. */
8455
8456 bfd_boolean
elf_gc_common_final_link(abfd,info)8457 elf_gc_common_final_link (abfd, info)
8458 bfd *abfd;
8459 struct bfd_link_info *info;
8460 {
8461 if (!elf_gc_common_finalize_got_offsets (abfd, info))
8462 return FALSE;
8463
8464 /* Invoke the regular ELF backend linker to do all the work. */
8465 return elf_bfd_final_link (abfd, info);
8466 }
8467
8468 /* This function will be called though elf_link_hash_traverse to store
8469 all hash value of the exported symbols in an array. */
8470
8471 static bfd_boolean
elf_collect_hash_codes(h,data)8472 elf_collect_hash_codes (h, data)
8473 struct elf_link_hash_entry *h;
8474 PTR data;
8475 {
8476 unsigned long **valuep = (unsigned long **) data;
8477 const char *name;
8478 char *p;
8479 unsigned long ha;
8480 char *alc = NULL;
8481
8482 if (h->root.type == bfd_link_hash_warning)
8483 h = (struct elf_link_hash_entry *) h->root.u.i.link;
8484
8485 /* Ignore indirect symbols. These are added by the versioning code. */
8486 if (h->dynindx == -1)
8487 return TRUE;
8488
8489 name = h->root.root.string;
8490 p = strchr (name, ELF_VER_CHR);
8491 if (p != NULL)
8492 {
8493 alc = bfd_malloc ((bfd_size_type) (p - name + 1));
8494 memcpy (alc, name, (size_t) (p - name));
8495 alc[p - name] = '\0';
8496 name = alc;
8497 }
8498
8499 /* Compute the hash value. */
8500 ha = bfd_elf_hash (name);
8501
8502 /* Store the found hash value in the array given as the argument. */
8503 *(*valuep)++ = ha;
8504
8505 /* And store it in the struct so that we can put it in the hash table
8506 later. */
8507 h->elf_hash_value = ha;
8508
8509 if (alc != NULL)
8510 free (alc);
8511
8512 return TRUE;
8513 }
8514
8515 bfd_boolean
elf_reloc_symbol_deleted_p(offset,cookie)8516 elf_reloc_symbol_deleted_p (offset, cookie)
8517 bfd_vma offset;
8518 PTR cookie;
8519 {
8520 struct elf_reloc_cookie *rcookie = (struct elf_reloc_cookie *) cookie;
8521
8522 if (rcookie->bad_symtab)
8523 rcookie->rel = rcookie->rels;
8524
8525 for (; rcookie->rel < rcookie->relend; rcookie->rel++)
8526 {
8527 unsigned long r_symndx;
8528
8529 if (! rcookie->bad_symtab)
8530 if (rcookie->rel->r_offset > offset)
8531 return FALSE;
8532 if (rcookie->rel->r_offset != offset)
8533 continue;
8534
8535 r_symndx = ELF_R_SYM (rcookie->rel->r_info);
8536 if (r_symndx == SHN_UNDEF)
8537 return TRUE;
8538
8539 if (r_symndx >= rcookie->locsymcount
8540 || ELF_ST_BIND (rcookie->locsyms[r_symndx].st_info) != STB_LOCAL)
8541 {
8542 struct elf_link_hash_entry *h;
8543
8544 h = rcookie->sym_hashes[r_symndx - rcookie->extsymoff];
8545
8546 while (h->root.type == bfd_link_hash_indirect
8547 || h->root.type == bfd_link_hash_warning)
8548 h = (struct elf_link_hash_entry *) h->root.u.i.link;
8549
8550 if ((h->root.type == bfd_link_hash_defined
8551 || h->root.type == bfd_link_hash_defweak)
8552 && elf_discarded_section (h->root.u.def.section))
8553 return TRUE;
8554 else
8555 return FALSE;
8556 }
8557 else
8558 {
8559 /* It's not a relocation against a global symbol,
8560 but it could be a relocation against a local
8561 symbol for a discarded section. */
8562 asection *isec;
8563 Elf_Internal_Sym *isym;
8564
8565 /* Need to: get the symbol; get the section. */
8566 isym = &rcookie->locsyms[r_symndx];
8567 if (isym->st_shndx < SHN_LORESERVE || isym->st_shndx > SHN_HIRESERVE)
8568 {
8569 isec = section_from_elf_index (rcookie->abfd, isym->st_shndx);
8570 if (isec != NULL && elf_discarded_section (isec))
8571 return TRUE;
8572 }
8573 }
8574 return FALSE;
8575 }
8576 return FALSE;
8577 }
8578
8579 /* Discard unneeded references to discarded sections.
8580 Returns TRUE if any section's size was changed. */
8581 /* This function assumes that the relocations are in sorted order,
8582 which is true for all known assemblers. */
8583
8584 bfd_boolean
elf_bfd_discard_info(output_bfd,info)8585 elf_bfd_discard_info (output_bfd, info)
8586 bfd *output_bfd;
8587 struct bfd_link_info *info;
8588 {
8589 struct elf_reloc_cookie cookie;
8590 asection *stab, *eh;
8591 Elf_Internal_Shdr *symtab_hdr;
8592 struct elf_backend_data *bed;
8593 bfd *abfd;
8594 unsigned int count;
8595 bfd_boolean ret = FALSE;
8596
8597 if (info->traditional_format
8598 || info->hash->creator->flavour != bfd_target_elf_flavour
8599 || ! is_elf_hash_table (info))
8600 return FALSE;
8601
8602 for (abfd = info->input_bfds; abfd != NULL; abfd = abfd->link_next)
8603 {
8604 if (bfd_get_flavour (abfd) != bfd_target_elf_flavour)
8605 continue;
8606
8607 bed = get_elf_backend_data (abfd);
8608
8609 if ((abfd->flags & DYNAMIC) != 0)
8610 continue;
8611
8612 eh = bfd_get_section_by_name (abfd, ".eh_frame");
8613 if (info->relocateable
8614 || (eh != NULL
8615 && (eh->_raw_size == 0
8616 || bfd_is_abs_section (eh->output_section))))
8617 eh = NULL;
8618
8619 stab = bfd_get_section_by_name (abfd, ".stab");
8620 if (stab != NULL
8621 && (stab->_raw_size == 0
8622 || bfd_is_abs_section (stab->output_section)
8623 || stab->sec_info_type != ELF_INFO_TYPE_STABS))
8624 stab = NULL;
8625
8626 if (stab == NULL
8627 && eh == NULL
8628 && bed->elf_backend_discard_info == NULL)
8629 continue;
8630
8631 symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
8632 cookie.abfd = abfd;
8633 cookie.sym_hashes = elf_sym_hashes (abfd);
8634 cookie.bad_symtab = elf_bad_symtab (abfd);
8635 if (cookie.bad_symtab)
8636 {
8637 cookie.locsymcount = symtab_hdr->sh_size / sizeof (Elf_External_Sym);
8638 cookie.extsymoff = 0;
8639 }
8640 else
8641 {
8642 cookie.locsymcount = symtab_hdr->sh_info;
8643 cookie.extsymoff = symtab_hdr->sh_info;
8644 }
8645
8646 cookie.locsyms = (Elf_Internal_Sym *) symtab_hdr->contents;
8647 if (cookie.locsyms == NULL && cookie.locsymcount != 0)
8648 {
8649 cookie.locsyms = bfd_elf_get_elf_syms (abfd, symtab_hdr,
8650 cookie.locsymcount, 0,
8651 NULL, NULL, NULL);
8652 if (cookie.locsyms == NULL)
8653 return FALSE;
8654 }
8655
8656 if (stab != NULL)
8657 {
8658 cookie.rels = NULL;
8659 count = stab->reloc_count;
8660 if (count != 0)
8661 cookie.rels = (NAME(_bfd_elf,link_read_relocs)
8662 (abfd, stab, (PTR) NULL, (Elf_Internal_Rela *) NULL,
8663 info->keep_memory));
8664 if (cookie.rels != NULL)
8665 {
8666 cookie.rel = cookie.rels;
8667 cookie.relend = cookie.rels;
8668 cookie.relend += count * bed->s->int_rels_per_ext_rel;
8669 if (_bfd_discard_section_stabs (abfd, stab,
8670 elf_section_data (stab)->sec_info,
8671 elf_reloc_symbol_deleted_p,
8672 &cookie))
8673 ret = TRUE;
8674 if (elf_section_data (stab)->relocs != cookie.rels)
8675 free (cookie.rels);
8676 }
8677 }
8678
8679 if (eh != NULL)
8680 {
8681 cookie.rels = NULL;
8682 count = eh->reloc_count;
8683 if (count != 0)
8684 cookie.rels = (NAME(_bfd_elf,link_read_relocs)
8685 (abfd, eh, (PTR) NULL, (Elf_Internal_Rela *) NULL,
8686 info->keep_memory));
8687 cookie.rel = cookie.rels;
8688 cookie.relend = cookie.rels;
8689 if (cookie.rels != NULL)
8690 cookie.relend += count * bed->s->int_rels_per_ext_rel;
8691
8692 if (_bfd_elf_discard_section_eh_frame (abfd, info, eh,
8693 elf_reloc_symbol_deleted_p,
8694 &cookie))
8695 ret = TRUE;
8696
8697 if (cookie.rels != NULL
8698 && elf_section_data (eh)->relocs != cookie.rels)
8699 free (cookie.rels);
8700 }
8701
8702 if (bed->elf_backend_discard_info != NULL
8703 && (*bed->elf_backend_discard_info) (abfd, &cookie, info))
8704 ret = TRUE;
8705
8706 if (cookie.locsyms != NULL
8707 && symtab_hdr->contents != (unsigned char *) cookie.locsyms)
8708 {
8709 if (! info->keep_memory)
8710 free (cookie.locsyms);
8711 else
8712 symtab_hdr->contents = (unsigned char *) cookie.locsyms;
8713 }
8714 }
8715
8716 if (info->eh_frame_hdr
8717 && !info->relocateable
8718 && _bfd_elf_discard_section_eh_frame_hdr (output_bfd, info))
8719 ret = TRUE;
8720
8721 return ret;
8722 }
8723
8724 static bfd_boolean
elf_section_ignore_discarded_relocs(sec)8725 elf_section_ignore_discarded_relocs (sec)
8726 asection *sec;
8727 {
8728 struct elf_backend_data *bed;
8729
8730 switch (sec->sec_info_type)
8731 {
8732 case ELF_INFO_TYPE_STABS:
8733 case ELF_INFO_TYPE_EH_FRAME:
8734 return TRUE;
8735 default:
8736 break;
8737 }
8738
8739 bed = get_elf_backend_data (sec->owner);
8740 if (bed->elf_backend_ignore_discarded_relocs != NULL
8741 && (*bed->elf_backend_ignore_discarded_relocs) (sec))
8742 return TRUE;
8743
8744 return FALSE;
8745 }
8746