* elflink.h (elf_link_add_object_symbols): Only subtract the
[binutils-gdb.git] / bfd / elflink.h
1 /* ELF linker support.
2 Copyright 1995, 1996, 1997 Free Software Foundation, Inc.
3
4 This file is part of BFD, the Binary File Descriptor library.
5
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version.
10
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
19
20 /* ELF linker code. */
21
22 static boolean elf_link_add_object_symbols
23 PARAMS ((bfd *, struct bfd_link_info *));
24 static boolean elf_link_add_archive_symbols
25 PARAMS ((bfd *, struct bfd_link_info *));
26 static boolean elf_export_symbol
27 PARAMS ((struct elf_link_hash_entry *, PTR));
28 static boolean elf_adjust_dynamic_symbol
29 PARAMS ((struct elf_link_hash_entry *, PTR));
30 static boolean elf_link_find_version_dependencies
31 PARAMS ((struct elf_link_hash_entry *, PTR));
32 static boolean elf_link_find_version_dependencies
33 PARAMS ((struct elf_link_hash_entry *, PTR));
34 static boolean elf_link_assign_sym_version
35 PARAMS ((struct elf_link_hash_entry *, PTR));
36 static boolean elf_link_renumber_dynsyms
37 PARAMS ((struct elf_link_hash_entry *, PTR));
38
39 /* This struct is used to pass information to routines called via
40 elf_link_hash_traverse which must return failure. */
41
42 struct elf_info_failed
43 {
44 boolean failed;
45 struct bfd_link_info *info;
46 };
47
48 /* Given an ELF BFD, add symbols to the global hash table as
49 appropriate. */
50
51 boolean
52 elf_bfd_link_add_symbols (abfd, info)
53 bfd *abfd;
54 struct bfd_link_info *info;
55 {
56 switch (bfd_get_format (abfd))
57 {
58 case bfd_object:
59 return elf_link_add_object_symbols (abfd, info);
60 case bfd_archive:
61 return elf_link_add_archive_symbols (abfd, info);
62 default:
63 bfd_set_error (bfd_error_wrong_format);
64 return false;
65 }
66 }
67 \f
68
69 /* Add symbols from an ELF archive file to the linker hash table. We
70 don't use _bfd_generic_link_add_archive_symbols because of a
71 problem which arises on UnixWare. The UnixWare libc.so is an
72 archive which includes an entry libc.so.1 which defines a bunch of
73 symbols. The libc.so archive also includes a number of other
74 object files, which also define symbols, some of which are the same
75 as those defined in libc.so.1. Correct linking requires that we
76 consider each object file in turn, and include it if it defines any
77 symbols we need. _bfd_generic_link_add_archive_symbols does not do
78 this; it looks through the list of undefined symbols, and includes
79 any object file which defines them. When this algorithm is used on
80 UnixWare, it winds up pulling in libc.so.1 early and defining a
81 bunch of symbols. This means that some of the other objects in the
82 archive are not included in the link, which is incorrect since they
83 precede libc.so.1 in the archive.
84
85 Fortunately, ELF archive handling is simpler than that done by
86 _bfd_generic_link_add_archive_symbols, which has to allow for a.out
87 oddities. In ELF, if we find a symbol in the archive map, and the
88 symbol is currently undefined, we know that we must pull in that
89 object file.
90
91 Unfortunately, we do have to make multiple passes over the symbol
92 table until nothing further is resolved. */
93
94 static boolean
95 elf_link_add_archive_symbols (abfd, info)
96 bfd *abfd;
97 struct bfd_link_info *info;
98 {
99 symindex c;
100 boolean *defined = NULL;
101 boolean *included = NULL;
102 carsym *symdefs;
103 boolean loop;
104
105 if (! bfd_has_map (abfd))
106 {
107 /* An empty archive is a special case. */
108 if (bfd_openr_next_archived_file (abfd, (bfd *) NULL) == NULL)
109 return true;
110 bfd_set_error (bfd_error_no_armap);
111 return false;
112 }
113
114 /* Keep track of all symbols we know to be already defined, and all
115 files we know to be already included. This is to speed up the
116 second and subsequent passes. */
117 c = bfd_ardata (abfd)->symdef_count;
118 if (c == 0)
119 return true;
120 defined = (boolean *) bfd_malloc (c * sizeof (boolean));
121 included = (boolean *) bfd_malloc (c * sizeof (boolean));
122 if (defined == (boolean *) NULL || included == (boolean *) NULL)
123 goto error_return;
124 memset (defined, 0, c * sizeof (boolean));
125 memset (included, 0, c * sizeof (boolean));
126
127 symdefs = bfd_ardata (abfd)->symdefs;
128
129 do
130 {
131 file_ptr last;
132 symindex i;
133 carsym *symdef;
134 carsym *symdefend;
135
136 loop = false;
137 last = -1;
138
139 symdef = symdefs;
140 symdefend = symdef + c;
141 for (i = 0; symdef < symdefend; symdef++, i++)
142 {
143 struct elf_link_hash_entry *h;
144 bfd *element;
145 struct bfd_link_hash_entry *undefs_tail;
146 symindex mark;
147
148 if (defined[i] || included[i])
149 continue;
150 if (symdef->file_offset == last)
151 {
152 included[i] = true;
153 continue;
154 }
155
156 h = elf_link_hash_lookup (elf_hash_table (info), symdef->name,
157 false, false, false);
158
159 if (h == NULL)
160 {
161 char *p, *copy;
162
163 /* If this is a default version (the name contains @@),
164 look up the symbol again without the version. The
165 effect is that references to the symbol without the
166 version will be matched by the default symbol in the
167 archive. */
168
169 p = strchr (symdef->name, ELF_VER_CHR);
170 if (p == NULL || p[1] != ELF_VER_CHR)
171 continue;
172
173 copy = bfd_alloc (abfd, p - symdef->name + 1);
174 if (copy == NULL)
175 goto error_return;
176 memcpy (copy, symdef->name, p - symdef->name);
177 copy[p - symdef->name] = '\0';
178
179 h = elf_link_hash_lookup (elf_hash_table (info), copy,
180 false, false, false);
181
182 bfd_release (abfd, copy);
183 }
184
185 if (h == NULL)
186 continue;
187
188 if (h->root.type != bfd_link_hash_undefined)
189 {
190 if (h->root.type != bfd_link_hash_undefweak)
191 defined[i] = true;
192 continue;
193 }
194
195 /* We need to include this archive member. */
196
197 element = _bfd_get_elt_at_filepos (abfd, symdef->file_offset);
198 if (element == (bfd *) NULL)
199 goto error_return;
200
201 if (! bfd_check_format (element, bfd_object))
202 goto error_return;
203
204 /* Doublecheck that we have not included this object
205 already--it should be impossible, but there may be
206 something wrong with the archive. */
207 if (element->archive_pass != 0)
208 {
209 bfd_set_error (bfd_error_bad_value);
210 goto error_return;
211 }
212 element->archive_pass = 1;
213
214 undefs_tail = info->hash->undefs_tail;
215
216 if (! (*info->callbacks->add_archive_element) (info, element,
217 symdef->name))
218 goto error_return;
219 if (! elf_link_add_object_symbols (element, info))
220 goto error_return;
221
222 /* If there are any new undefined symbols, we need to make
223 another pass through the archive in order to see whether
224 they can be defined. FIXME: This isn't perfect, because
225 common symbols wind up on undefs_tail and because an
226 undefined symbol which is defined later on in this pass
227 does not require another pass. This isn't a bug, but it
228 does make the code less efficient than it could be. */
229 if (undefs_tail != info->hash->undefs_tail)
230 loop = true;
231
232 /* Look backward to mark all symbols from this object file
233 which we have already seen in this pass. */
234 mark = i;
235 do
236 {
237 included[mark] = true;
238 if (mark == 0)
239 break;
240 --mark;
241 }
242 while (symdefs[mark].file_offset == symdef->file_offset);
243
244 /* We mark subsequent symbols from this object file as we go
245 on through the loop. */
246 last = symdef->file_offset;
247 }
248 }
249 while (loop);
250
251 free (defined);
252 free (included);
253
254 return true;
255
256 error_return:
257 if (defined != (boolean *) NULL)
258 free (defined);
259 if (included != (boolean *) NULL)
260 free (included);
261 return false;
262 }
263
264 /* Add symbols from an ELF object file to the linker hash table. */
265
266 static boolean
267 elf_link_add_object_symbols (abfd, info)
268 bfd *abfd;
269 struct bfd_link_info *info;
270 {
271 boolean (*add_symbol_hook) PARAMS ((bfd *, struct bfd_link_info *,
272 const Elf_Internal_Sym *,
273 const char **, flagword *,
274 asection **, bfd_vma *));
275 boolean (*check_relocs) PARAMS ((bfd *, struct bfd_link_info *,
276 asection *, const Elf_Internal_Rela *));
277 boolean collect;
278 Elf_Internal_Shdr *hdr;
279 size_t symcount;
280 size_t extsymcount;
281 size_t extsymoff;
282 Elf_External_Sym *buf = NULL;
283 struct elf_link_hash_entry **sym_hash;
284 boolean dynamic;
285 bfd_byte *dynver = NULL;
286 Elf_External_Versym *extversym = NULL;
287 Elf_External_Versym *ever;
288 Elf_External_Dyn *dynbuf = NULL;
289 struct elf_link_hash_entry *weaks;
290 Elf_External_Sym *esym;
291 Elf_External_Sym *esymend;
292
293 add_symbol_hook = get_elf_backend_data (abfd)->elf_add_symbol_hook;
294 collect = get_elf_backend_data (abfd)->collect;
295
296 if ((abfd->flags & DYNAMIC) == 0)
297 dynamic = false;
298 else
299 {
300 dynamic = true;
301
302 /* You can't use -r against a dynamic object. Also, there's no
303 hope of using a dynamic object which does not exactly match
304 the format of the output file. */
305 if (info->relocateable || info->hash->creator != abfd->xvec)
306 {
307 bfd_set_error (bfd_error_invalid_operation);
308 goto error_return;
309 }
310 }
311
312 /* As a GNU extension, any input sections which are named
313 .gnu.warning.SYMBOL are treated as warning symbols for the given
314 symbol. This differs from .gnu.warning sections, which generate
315 warnings when they are included in an output file. */
316 if (! info->shared)
317 {
318 asection *s;
319
320 for (s = abfd->sections; s != NULL; s = s->next)
321 {
322 const char *name;
323
324 name = bfd_get_section_name (abfd, s);
325 if (strncmp (name, ".gnu.warning.", sizeof ".gnu.warning." - 1) == 0)
326 {
327 char *msg;
328 bfd_size_type sz;
329
330 name += sizeof ".gnu.warning." - 1;
331
332 /* If this is a shared object, then look up the symbol
333 in the hash table. If it is there, and it is already
334 been defined, then we will not be using the entry
335 from this shared object, so we don't need to warn.
336 FIXME: If we see the definition in a regular object
337 later on, we will warn, but we shouldn't. The only
338 fix is to keep track of what warnings we are supposed
339 to emit, and then handle them all at the end of the
340 link. */
341 if (dynamic && abfd->xvec == info->hash->creator)
342 {
343 struct elf_link_hash_entry *h;
344
345 h = elf_link_hash_lookup (elf_hash_table (info), name,
346 false, false, true);
347
348 /* FIXME: What about bfd_link_hash_common? */
349 if (h != NULL
350 && (h->root.type == bfd_link_hash_defined
351 || h->root.type == bfd_link_hash_defweak))
352 {
353 /* We don't want to issue this warning. Clobber
354 the section size so that the warning does not
355 get copied into the output file. */
356 s->_raw_size = 0;
357 continue;
358 }
359 }
360
361 sz = bfd_section_size (abfd, s);
362 msg = (char *) bfd_alloc (abfd, sz);
363 if (msg == NULL)
364 goto error_return;
365
366 if (! bfd_get_section_contents (abfd, s, msg, (file_ptr) 0, sz))
367 goto error_return;
368
369 if (! (_bfd_generic_link_add_one_symbol
370 (info, abfd, name, BSF_WARNING, s, (bfd_vma) 0, msg,
371 false, collect, (struct bfd_link_hash_entry **) NULL)))
372 goto error_return;
373
374 if (! info->relocateable)
375 {
376 /* Clobber the section size so that the warning does
377 not get copied into the output file. */
378 s->_raw_size = 0;
379 }
380 }
381 }
382 }
383
384 /* If this is a dynamic object, we always link against the .dynsym
385 symbol table, not the .symtab symbol table. The dynamic linker
386 will only see the .dynsym symbol table, so there is no reason to
387 look at .symtab for a dynamic object. */
388
389 if (! dynamic || elf_dynsymtab (abfd) == 0)
390 hdr = &elf_tdata (abfd)->symtab_hdr;
391 else
392 hdr = &elf_tdata (abfd)->dynsymtab_hdr;
393
394 if (dynamic)
395 {
396 /* Read in any version definitions. */
397
398 if (elf_dynverdef (abfd) != 0)
399 {
400 Elf_Internal_Shdr *verdefhdr;
401 bfd_byte *dynver;
402 int i;
403 const Elf_External_Verdef *extverdef;
404 Elf_Internal_Verdef *intverdef;
405
406 verdefhdr = &elf_tdata (abfd)->dynverdef_hdr;
407 elf_tdata (abfd)->verdef =
408 ((Elf_Internal_Verdef *)
409 bfd_zalloc (abfd,
410 verdefhdr->sh_info * sizeof (Elf_Internal_Verdef)));
411 if (elf_tdata (abfd)->verdef == NULL)
412 goto error_return;
413
414 dynver = (bfd_byte *) bfd_malloc (verdefhdr->sh_size);
415 if (dynver == NULL)
416 goto error_return;
417
418 if (bfd_seek (abfd, verdefhdr->sh_offset, SEEK_SET) != 0
419 || (bfd_read ((PTR) dynver, 1, verdefhdr->sh_size, abfd)
420 != verdefhdr->sh_size))
421 goto error_return;
422
423 extverdef = (const Elf_External_Verdef *) dynver;
424 intverdef = elf_tdata (abfd)->verdef;
425 for (i = 0; i < verdefhdr->sh_info; i++, intverdef++)
426 {
427 const Elf_External_Verdaux *extverdaux;
428 Elf_Internal_Verdaux intverdaux;
429
430 _bfd_elf_swap_verdef_in (abfd, extverdef, intverdef);
431
432 /* Pick up the name of the version. */
433 extverdaux = ((const Elf_External_Verdaux *)
434 ((bfd_byte *) extverdef + intverdef->vd_aux));
435 _bfd_elf_swap_verdaux_in (abfd, extverdaux, &intverdaux);
436
437 intverdef->vd_bfd = abfd;
438 intverdef->vd_nodename =
439 bfd_elf_string_from_elf_section (abfd, verdefhdr->sh_link,
440 intverdaux.vda_name);
441
442 extverdef = ((const Elf_External_Verdef *)
443 ((bfd_byte *) extverdef + intverdef->vd_next));
444 }
445
446 free (dynver);
447 dynver = NULL;
448 }
449
450 /* Read in the symbol versions, but don't bother to convert them
451 to internal format. */
452 if (elf_dynversym (abfd) != 0)
453 {
454 Elf_Internal_Shdr *versymhdr;
455
456 versymhdr = &elf_tdata (abfd)->dynversym_hdr;
457 extversym = (Elf_External_Versym *) bfd_malloc (hdr->sh_size);
458 if (extversym == NULL)
459 goto error_return;
460 if (bfd_seek (abfd, versymhdr->sh_offset, SEEK_SET) != 0
461 || (bfd_read ((PTR) extversym, 1, versymhdr->sh_size, abfd)
462 != versymhdr->sh_size))
463 goto error_return;
464 }
465 }
466
467 symcount = hdr->sh_size / sizeof (Elf_External_Sym);
468
469 /* The sh_info field of the symtab header tells us where the
470 external symbols start. We don't care about the local symbols at
471 this point. */
472 if (elf_bad_symtab (abfd))
473 {
474 extsymcount = symcount;
475 extsymoff = 0;
476 }
477 else
478 {
479 extsymcount = symcount - hdr->sh_info;
480 extsymoff = hdr->sh_info;
481 }
482
483 buf = ((Elf_External_Sym *)
484 bfd_malloc (extsymcount * sizeof (Elf_External_Sym)));
485 if (buf == NULL && extsymcount != 0)
486 goto error_return;
487
488 /* We store a pointer to the hash table entry for each external
489 symbol. */
490 sym_hash = ((struct elf_link_hash_entry **)
491 bfd_alloc (abfd,
492 extsymcount * sizeof (struct elf_link_hash_entry *)));
493 if (sym_hash == NULL)
494 goto error_return;
495 elf_sym_hashes (abfd) = sym_hash;
496
497 if (! dynamic)
498 {
499 /* If we are creating a shared library, create all the dynamic
500 sections immediately. We need to attach them to something,
501 so we attach them to this BFD, provided it is the right
502 format. FIXME: If there are no input BFD's of the same
503 format as the output, we can't make a shared library. */
504 if (info->shared
505 && ! elf_hash_table (info)->dynamic_sections_created
506 && abfd->xvec == info->hash->creator)
507 {
508 if (! elf_link_create_dynamic_sections (abfd, info))
509 goto error_return;
510 }
511 }
512 else
513 {
514 asection *s;
515 boolean add_needed;
516 const char *name;
517 bfd_size_type oldsize;
518 bfd_size_type strindex;
519
520 /* Find the name to use in a DT_NEEDED entry that refers to this
521 object. If the object has a DT_SONAME entry, we use it.
522 Otherwise, if the generic linker stuck something in
523 elf_dt_name, we use that. Otherwise, we just use the file
524 name. If the generic linker put a null string into
525 elf_dt_name, we don't make a DT_NEEDED entry at all, even if
526 there is a DT_SONAME entry. */
527 add_needed = true;
528 name = bfd_get_filename (abfd);
529 if (elf_dt_name (abfd) != NULL)
530 {
531 name = elf_dt_name (abfd);
532 if (*name == '\0')
533 add_needed = false;
534 }
535 s = bfd_get_section_by_name (abfd, ".dynamic");
536 if (s != NULL)
537 {
538 Elf_External_Dyn *extdyn;
539 Elf_External_Dyn *extdynend;
540 int elfsec;
541 unsigned long link;
542
543 dynbuf = (Elf_External_Dyn *) bfd_malloc ((size_t) s->_raw_size);
544 if (dynbuf == NULL)
545 goto error_return;
546
547 if (! bfd_get_section_contents (abfd, s, (PTR) dynbuf,
548 (file_ptr) 0, s->_raw_size))
549 goto error_return;
550
551 elfsec = _bfd_elf_section_from_bfd_section (abfd, s);
552 if (elfsec == -1)
553 goto error_return;
554 link = elf_elfsections (abfd)[elfsec]->sh_link;
555
556 extdyn = dynbuf;
557 extdynend = extdyn + s->_raw_size / sizeof (Elf_External_Dyn);
558 for (; extdyn < extdynend; extdyn++)
559 {
560 Elf_Internal_Dyn dyn;
561
562 elf_swap_dyn_in (abfd, extdyn, &dyn);
563 if (dyn.d_tag == DT_SONAME)
564 {
565 name = bfd_elf_string_from_elf_section (abfd, link,
566 dyn.d_un.d_val);
567 if (name == NULL)
568 goto error_return;
569 }
570 if (dyn.d_tag == DT_NEEDED)
571 {
572 struct bfd_link_needed_list *n, **pn;
573 char *fnm, *anm;
574
575 n = ((struct bfd_link_needed_list *)
576 bfd_alloc (abfd, sizeof (struct bfd_link_needed_list)));
577 fnm = bfd_elf_string_from_elf_section (abfd, link,
578 dyn.d_un.d_val);
579 if (n == NULL || fnm == NULL)
580 goto error_return;
581 anm = bfd_alloc (abfd, strlen (fnm) + 1);
582 if (anm == NULL)
583 goto error_return;
584 strcpy (anm, fnm);
585 n->name = anm;
586 n->by = abfd;
587 n->next = NULL;
588 for (pn = &elf_hash_table (info)->needed;
589 *pn != NULL;
590 pn = &(*pn)->next)
591 ;
592 *pn = n;
593 }
594 }
595
596 free (dynbuf);
597 dynbuf = NULL;
598 }
599
600 /* We do not want to include any of the sections in a dynamic
601 object in the output file. We hack by simply clobbering the
602 list of sections in the BFD. This could be handled more
603 cleanly by, say, a new section flag; the existing
604 SEC_NEVER_LOAD flag is not the one we want, because that one
605 still implies that the section takes up space in the output
606 file. */
607 abfd->sections = NULL;
608 abfd->section_count = 0;
609
610 /* If this is the first dynamic object found in the link, create
611 the special sections required for dynamic linking. */
612 if (! elf_hash_table (info)->dynamic_sections_created)
613 {
614 if (! elf_link_create_dynamic_sections (abfd, info))
615 goto error_return;
616 }
617
618 if (add_needed)
619 {
620 /* Add a DT_NEEDED entry for this dynamic object. */
621 oldsize = _bfd_stringtab_size (elf_hash_table (info)->dynstr);
622 strindex = _bfd_stringtab_add (elf_hash_table (info)->dynstr, name,
623 true, false);
624 if (strindex == (bfd_size_type) -1)
625 goto error_return;
626
627 if (oldsize == _bfd_stringtab_size (elf_hash_table (info)->dynstr))
628 {
629 asection *sdyn;
630 Elf_External_Dyn *dyncon, *dynconend;
631
632 /* The hash table size did not change, which means that
633 the dynamic object name was already entered. If we
634 have already included this dynamic object in the
635 link, just ignore it. There is no reason to include
636 a particular dynamic object more than once. */
637 sdyn = bfd_get_section_by_name (elf_hash_table (info)->dynobj,
638 ".dynamic");
639 BFD_ASSERT (sdyn != NULL);
640
641 dyncon = (Elf_External_Dyn *) sdyn->contents;
642 dynconend = (Elf_External_Dyn *) (sdyn->contents +
643 sdyn->_raw_size);
644 for (; dyncon < dynconend; dyncon++)
645 {
646 Elf_Internal_Dyn dyn;
647
648 elf_swap_dyn_in (elf_hash_table (info)->dynobj, dyncon,
649 &dyn);
650 if (dyn.d_tag == DT_NEEDED
651 && dyn.d_un.d_val == strindex)
652 {
653 if (buf != NULL)
654 free (buf);
655 if (extversym != NULL)
656 free (extversym);
657 return true;
658 }
659 }
660 }
661
662 if (! elf_add_dynamic_entry (info, DT_NEEDED, strindex))
663 goto error_return;
664 }
665
666 /* Save the SONAME, if there is one, because sometimes the
667 linker emulation code will need to know it. */
668 if (*name == '\0')
669 name = bfd_get_filename (abfd);
670 elf_dt_name (abfd) = name;
671 }
672
673 if (bfd_seek (abfd,
674 hdr->sh_offset + extsymoff * sizeof (Elf_External_Sym),
675 SEEK_SET) != 0
676 || (bfd_read ((PTR) buf, sizeof (Elf_External_Sym), extsymcount, abfd)
677 != extsymcount * sizeof (Elf_External_Sym)))
678 goto error_return;
679
680 weaks = NULL;
681
682 ever = extversym != NULL ? extversym + extsymoff : NULL;
683 esymend = buf + extsymcount;
684 for (esym = buf;
685 esym < esymend;
686 esym++, sym_hash++, ever = (ever != NULL ? ever + 1 : NULL))
687 {
688 Elf_Internal_Sym sym;
689 int bind;
690 bfd_vma value;
691 asection *sec;
692 flagword flags;
693 const char *name;
694 struct elf_link_hash_entry *h;
695 boolean definition;
696 boolean size_change_ok, type_change_ok;
697 boolean new_weakdef;
698
699 elf_swap_symbol_in (abfd, esym, &sym);
700
701 flags = BSF_NO_FLAGS;
702 sec = NULL;
703 value = sym.st_value;
704 *sym_hash = NULL;
705
706 bind = ELF_ST_BIND (sym.st_info);
707 if (bind == STB_LOCAL)
708 {
709 /* This should be impossible, since ELF requires that all
710 global symbols follow all local symbols, and that sh_info
711 point to the first global symbol. Unfortunatealy, Irix 5
712 screws this up. */
713 continue;
714 }
715 else if (bind == STB_GLOBAL)
716 {
717 if (sym.st_shndx != SHN_UNDEF
718 && sym.st_shndx != SHN_COMMON)
719 flags = BSF_GLOBAL;
720 else
721 flags = 0;
722 }
723 else if (bind == STB_WEAK)
724 flags = BSF_WEAK;
725 else
726 {
727 /* Leave it up to the processor backend. */
728 }
729
730 if (sym.st_shndx == SHN_UNDEF)
731 sec = bfd_und_section_ptr;
732 else if (sym.st_shndx > 0 && sym.st_shndx < SHN_LORESERVE)
733 {
734 sec = section_from_elf_index (abfd, sym.st_shndx);
735 if (sec == NULL)
736 sec = bfd_abs_section_ptr;
737 else if ((abfd->flags & (EXEC_P | DYNAMIC)) != 0)
738 value -= sec->vma;
739 }
740 else if (sym.st_shndx == SHN_ABS)
741 sec = bfd_abs_section_ptr;
742 else if (sym.st_shndx == SHN_COMMON)
743 {
744 sec = bfd_com_section_ptr;
745 /* What ELF calls the size we call the value. What ELF
746 calls the value we call the alignment. */
747 value = sym.st_size;
748 }
749 else
750 {
751 /* Leave it up to the processor backend. */
752 }
753
754 name = bfd_elf_string_from_elf_section (abfd, hdr->sh_link, sym.st_name);
755 if (name == (const char *) NULL)
756 goto error_return;
757
758 if (add_symbol_hook)
759 {
760 if (! (*add_symbol_hook) (abfd, info, &sym, &name, &flags, &sec,
761 &value))
762 goto error_return;
763
764 /* The hook function sets the name to NULL if this symbol
765 should be skipped for some reason. */
766 if (name == (const char *) NULL)
767 continue;
768 }
769
770 /* Sanity check that all possibilities were handled. */
771 if (sec == (asection *) NULL)
772 {
773 bfd_set_error (bfd_error_bad_value);
774 goto error_return;
775 }
776
777 if (bfd_is_und_section (sec)
778 || bfd_is_com_section (sec))
779 definition = false;
780 else
781 definition = true;
782
783 size_change_ok = false;
784 type_change_ok = get_elf_backend_data (abfd)->type_change_ok;
785 if (info->hash->creator->flavour == bfd_target_elf_flavour)
786 {
787 Elf_Internal_Versym iver;
788 int vernum;
789 boolean override;
790
791 if (ever != NULL)
792 {
793 _bfd_elf_swap_versym_in (abfd, ever, &iver);
794 vernum = iver.vs_vers & VERSYM_VERSION;
795
796 /* If this is a hidden symbol, or if it is not version
797 1, we append the version name to the symbol name.
798 However, we do not modify a non-hidden absolute
799 symbol, because it might be the version symbol
800 itself. FIXME: What if it isn't? */
801 if ((iver.vs_vers & VERSYM_HIDDEN) != 0
802 || (vernum > 1 && ! bfd_is_abs_section (sec)))
803 {
804 const char *verstr;
805 int namelen, newlen;
806 char *newname, *p;
807
808 if (vernum > elf_tdata (abfd)->dynverdef_hdr.sh_info)
809 {
810 (*_bfd_error_handler)
811 ("%s: %s: invalid version %d (max %d)",
812 abfd->filename, name, vernum,
813 elf_tdata (abfd)->dynverdef_hdr.sh_info);
814 bfd_set_error (bfd_error_bad_value);
815 goto error_return;
816 }
817 else if (vernum > 1)
818 verstr = elf_tdata (abfd)->verdef[vernum - 1].vd_nodename;
819 else
820 verstr = "";
821
822 namelen = strlen (name);
823 newlen = namelen + strlen (verstr) + 2;
824 if ((iver.vs_vers & VERSYM_HIDDEN) == 0)
825 ++newlen;
826
827 newname = (char *) bfd_alloc (abfd, newlen);
828 if (newname == NULL)
829 goto error_return;
830 strcpy (newname, name);
831 p = newname + namelen;
832 *p++ = ELF_VER_CHR;
833 if ((iver.vs_vers & VERSYM_HIDDEN) == 0)
834 *p++ = ELF_VER_CHR;
835 strcpy (p, verstr);
836
837 name = newname;
838 }
839 }
840
841 /* We need to look up the symbol now in order to get some of
842 the dynamic object handling right. We pass the hash
843 table entry in to _bfd_generic_link_add_one_symbol so
844 that it does not have to look it up again. */
845 if (! bfd_is_und_section (sec))
846 h = elf_link_hash_lookup (elf_hash_table (info), name,
847 true, false, false);
848 else
849 h = ((struct elf_link_hash_entry *)
850 bfd_wrapped_link_hash_lookup (abfd, info, name, true,
851 false, false));
852 if (h == NULL)
853 goto error_return;
854 *sym_hash = h;
855
856 if (h->root.type == bfd_link_hash_new)
857 h->elf_link_hash_flags &=~ ELF_LINK_NON_ELF;
858
859 while (h->root.type == bfd_link_hash_indirect
860 || h->root.type == bfd_link_hash_warning)
861 h = (struct elf_link_hash_entry *) h->root.u.i.link;
862
863 /* It's OK to change the type if it used to be a weak
864 definition, or if the current definition is weak (and
865 hence might be ignored). */
866 if (h->root.type == bfd_link_hash_defweak
867 || h->root.type == bfd_link_hash_undefweak
868 || bind == STB_WEAK)
869 type_change_ok = true;
870
871 /* It's OK to change the size if it used to be a weak
872 definition, or if it used to be undefined, or if we will
873 be overriding an old definition. */
874 if (type_change_ok
875 || h->root.type == bfd_link_hash_undefined)
876 size_change_ok = true;
877
878 override = false;
879
880 /* If we are looking at a dynamic object, and this is a
881 definition, we need to see if it has already been defined
882 by some other object. If it has, we want to use the
883 existing definition, and we do not want to report a
884 multiple symbol definition error; we do this by
885 clobbering sec to be bfd_und_section_ptr. We treat a
886 common symbol as a definition if the symbol in the shared
887 library is a function, since common symbols always
888 represent variables; this can cause confusion in
889 principle, but any such confusion would seem to indicate
890 an erroneous program or shared library. */
891 if (dynamic && definition)
892 {
893 if (h->root.type == bfd_link_hash_defined
894 || h->root.type == bfd_link_hash_defweak
895 || (h->root.type == bfd_link_hash_common
896 && (bind == STB_WEAK
897 || ELF_ST_TYPE (sym.st_info) == STT_FUNC)))
898 {
899 override = true;
900 sec = bfd_und_section_ptr;
901 definition = false;
902 size_change_ok = true;
903 if (h->root.type == bfd_link_hash_common)
904 type_change_ok = true;
905 }
906 }
907
908 /* If we already have a common symbol, and the symbol in the
909 shared library is in an uninitialized section, then treat
910 the shared library symbol as a common symbol. This will
911 not always be correct, but it should do little harm. */
912 if (dynamic
913 && definition
914 && h->root.type == bfd_link_hash_common
915 && (sec->flags & SEC_ALLOC) != 0
916 && (sec->flags & SEC_LOAD) == 0)
917 {
918 if (! ((*info->callbacks->multiple_common)
919 (info, h->root.root.string,
920 h->root.u.c.p->section->owner, bfd_link_hash_common,
921 h->root.u.c.size, abfd, bfd_link_hash_common,
922 sym.st_size)))
923 goto error_return;
924
925 /* If the symbol in the shared library is smaller than
926 the one we already have, then override it to stick
927 with the larger symbol. Set SIZE_CHANGE_OK because
928 we only want to warn if requested with --warn-common. */
929 if (sym.st_size < h->size)
930 {
931 override = true;
932 sec = bfd_und_section_ptr;
933 definition = false;
934 size_change_ok = true;
935 }
936 }
937
938 /* Similarly, if we are not looking at a dynamic object, and
939 we have a definition, we want to override any definition
940 we may have from a dynamic object. Symbols from regular
941 files always take precedence over symbols from dynamic
942 objects, even if they are defined after the dynamic
943 object in the link. */
944 if (! dynamic
945 && (definition
946 || (bfd_is_com_section (sec)
947 && (h->root.type == bfd_link_hash_defweak
948 || h->type == STT_FUNC)))
949 && (h->root.type == bfd_link_hash_defined
950 || h->root.type == bfd_link_hash_defweak)
951 && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) != 0
952 && (h->root.u.def.section->owner->flags & DYNAMIC) != 0)
953 {
954 override = true;
955 /* Change the hash table entry to undefined, and let
956 _bfd_generic_link_add_one_symbol do the right thing
957 with the new definition. */
958 h->root.type = bfd_link_hash_undefined;
959 h->root.u.undef.abfd = h->root.u.def.section->owner;
960 size_change_ok = true;
961 if (bfd_is_com_section (sec))
962 type_change_ok = true;
963
964 /* This union may have been set to be non-NULL when this
965 symbol was seen in a dynamic object. We must force
966 the union to be NULL, so that it is correct for a
967 regular symbol. */
968 h->verinfo.vertree = NULL;
969 }
970
971 if (ever != NULL
972 && ! override
973 && vernum > 1
974 && (h->verinfo.verdef == NULL || definition))
975 h->verinfo.verdef = &elf_tdata (abfd)->verdef[vernum - 1];
976 }
977
978 if (! (_bfd_generic_link_add_one_symbol
979 (info, abfd, name, flags, sec, value, (const char *) NULL,
980 false, collect, (struct bfd_link_hash_entry **) sym_hash)))
981 goto error_return;
982
983 h = *sym_hash;
984 while (h->root.type == bfd_link_hash_indirect
985 || h->root.type == bfd_link_hash_warning)
986 h = (struct elf_link_hash_entry *) h->root.u.i.link;
987 *sym_hash = h;
988
989 new_weakdef = false;
990 if (dynamic
991 && definition
992 && (flags & BSF_WEAK) != 0
993 && ELF_ST_TYPE (sym.st_info) != STT_FUNC
994 && info->hash->creator->flavour == bfd_target_elf_flavour
995 && h->weakdef == NULL)
996 {
997 /* Keep a list of all weak defined non function symbols from
998 a dynamic object, using the weakdef field. Later in this
999 function we will set the weakdef field to the correct
1000 value. We only put non-function symbols from dynamic
1001 objects on this list, because that happens to be the only
1002 time we need to know the normal symbol corresponding to a
1003 weak symbol, and the information is time consuming to
1004 figure out. If the weakdef field is not already NULL,
1005 then this symbol was already defined by some previous
1006 dynamic object, and we will be using that previous
1007 definition anyhow. */
1008
1009 h->weakdef = weaks;
1010 weaks = h;
1011 new_weakdef = true;
1012 }
1013
1014 /* Get the alignment of a common symbol. */
1015 if (sym.st_shndx == SHN_COMMON
1016 && h->root.type == bfd_link_hash_common)
1017 h->root.u.c.p->alignment_power = bfd_log2 (sym.st_value);
1018
1019 if (info->hash->creator->flavour == bfd_target_elf_flavour)
1020 {
1021 int old_flags;
1022 boolean dynsym;
1023 int new_flag;
1024
1025 /* Remember the symbol size and type. */
1026 if (sym.st_size != 0
1027 && (definition || h->size == 0))
1028 {
1029 if (h->size != 0 && h->size != sym.st_size && ! size_change_ok)
1030 (*_bfd_error_handler)
1031 ("Warning: size of symbol `%s' changed from %lu to %lu in %s",
1032 name, (unsigned long) h->size, (unsigned long) sym.st_size,
1033 bfd_get_filename (abfd));
1034
1035 h->size = sym.st_size;
1036 }
1037 if (ELF_ST_TYPE (sym.st_info) != STT_NOTYPE
1038 && (definition || h->type == STT_NOTYPE))
1039 {
1040 if (h->type != STT_NOTYPE
1041 && h->type != ELF_ST_TYPE (sym.st_info)
1042 && ! type_change_ok)
1043 (*_bfd_error_handler)
1044 ("Warning: type of symbol `%s' changed from %d to %d in %s",
1045 name, h->type, ELF_ST_TYPE (sym.st_info),
1046 bfd_get_filename (abfd));
1047
1048 h->type = ELF_ST_TYPE (sym.st_info);
1049 }
1050
1051 if (sym.st_other != 0
1052 && (definition || h->other == 0))
1053 h->other = sym.st_other;
1054
1055 /* Set a flag in the hash table entry indicating the type of
1056 reference or definition we just found. Keep a count of
1057 the number of dynamic symbols we find. A dynamic symbol
1058 is one which is referenced or defined by both a regular
1059 object and a shared object. */
1060 old_flags = h->elf_link_hash_flags;
1061 dynsym = false;
1062 if (! dynamic)
1063 {
1064 if (! definition)
1065 new_flag = ELF_LINK_HASH_REF_REGULAR;
1066 else
1067 new_flag = ELF_LINK_HASH_DEF_REGULAR;
1068 if (info->shared
1069 || (old_flags & (ELF_LINK_HASH_DEF_DYNAMIC
1070 | ELF_LINK_HASH_REF_DYNAMIC)) != 0)
1071 dynsym = true;
1072 }
1073 else
1074 {
1075 if (! definition)
1076 new_flag = ELF_LINK_HASH_REF_DYNAMIC;
1077 else
1078 new_flag = ELF_LINK_HASH_DEF_DYNAMIC;
1079 if ((old_flags & (ELF_LINK_HASH_DEF_REGULAR
1080 | ELF_LINK_HASH_REF_REGULAR)) != 0
1081 || (h->weakdef != NULL
1082 && ! new_weakdef
1083 && h->weakdef->dynindx != -1))
1084 dynsym = true;
1085 }
1086
1087 h->elf_link_hash_flags |= new_flag;
1088
1089 /* If this symbol has a version, and it is the default
1090 version, we create an indirect symbol from the default
1091 name to the fully decorated name. This will cause
1092 external references which do not specify a version to be
1093 bound to this version of the symbol. */
1094 if (definition)
1095 {
1096 char *p;
1097
1098 p = strchr (name, ELF_VER_CHR);
1099 if (p != NULL && p[1] == ELF_VER_CHR)
1100 {
1101 char *shortname;
1102 struct elf_link_hash_entry *hold;
1103
1104 shortname = bfd_hash_allocate (&info->hash->table,
1105 p - name + 1);
1106 if (shortname == NULL)
1107 goto error_return;
1108 strncpy (shortname, name, p - name);
1109 shortname[p - name] = '\0';
1110
1111 /* First look to see if we have an existing symbol
1112 with this name. */
1113 hold = elf_link_hash_lookup (elf_hash_table (info),
1114 shortname, false, false,
1115 false);
1116
1117 /* If we are looking at a normal object, and the
1118 symbol was seen in a shared object, clobber the
1119 definition in the shared object. */
1120 if (hold != NULL
1121 && ! dynamic
1122 && (hold->root.type == bfd_link_hash_defined
1123 || hold->root.type == bfd_link_hash_defweak)
1124 && (hold->elf_link_hash_flags
1125 & ELF_LINK_HASH_DEF_DYNAMIC) != 0
1126 && ((hold->root.u.def.section->owner->flags & DYNAMIC)
1127 != 0))
1128 {
1129 /* Change the hash table entry to undefined, so
1130 that _bfd_generic_link_add_one_symbol will do
1131 the right thing. */
1132 hold->root.type = bfd_link_hash_undefined;
1133 hold->root.u.undef.abfd =
1134 hold->root.u.def.section->owner;
1135 hold->verinfo.vertree = NULL;
1136 hold = NULL;
1137 }
1138
1139 /* If we are looking at a shared object, and we have
1140 already seen this symbol defined elsewhere, then
1141 don't try to define it again. */
1142 if (hold != NULL
1143 && dynamic
1144 && (hold->root.type == bfd_link_hash_defined
1145 || hold->root.type == bfd_link_hash_defweak
1146 || hold->root.type == bfd_link_hash_indirect
1147 || (hold->root.type == bfd_link_hash_common
1148 && (bind == STB_WEAK
1149 || ELF_ST_TYPE (sym.st_info) == STT_FUNC))))
1150 {
1151 /* Don't add an indirect symbol. */
1152 }
1153 else
1154 {
1155 struct elf_link_hash_entry *hi;
1156
1157 hi = NULL;
1158 if (! (_bfd_generic_link_add_one_symbol
1159 (info, abfd, shortname, BSF_INDIRECT,
1160 bfd_ind_section_ptr, (bfd_vma) 0, name, false,
1161 collect, (struct bfd_link_hash_entry **) &hi)))
1162 goto error_return;
1163
1164 /* If there is a duplicate definition somewhere,
1165 then HI may not point to an indirect symbol.
1166 We will have reported an error to the user in
1167 that case. */
1168
1169 if (hi->root.type == bfd_link_hash_indirect)
1170 {
1171 hi->elf_link_hash_flags &= ~ ELF_LINK_NON_ELF;
1172
1173 /* If the symbol became indirect, then we
1174 assume that we have not seen a definition
1175 before. */
1176 BFD_ASSERT ((hi->elf_link_hash_flags
1177 & (ELF_LINK_HASH_DEF_DYNAMIC
1178 | ELF_LINK_HASH_DEF_REGULAR))
1179 == 0);
1180
1181 /* Copy down any references that we may have
1182 already seen to the symbol which just
1183 became indirect. */
1184 h->elf_link_hash_flags |=
1185 (hi->elf_link_hash_flags
1186 & (ELF_LINK_HASH_REF_DYNAMIC
1187 | ELF_LINK_HASH_REF_REGULAR));
1188
1189 /* Copy over the global table offset entry.
1190 This may have been already set up by a
1191 check_relocs routine. */
1192 if (h->got_offset == (bfd_vma) -1)
1193 {
1194 h->got_offset = hi->got_offset;
1195 hi->got_offset = (bfd_vma) -1;
1196 }
1197 BFD_ASSERT (hi->got_offset == (bfd_vma) -1);
1198
1199 if (h->dynindx == -1)
1200 {
1201 h->dynindx = hi->dynindx;
1202 h->dynstr_index = hi->dynstr_index;
1203 hi->dynindx = -1;
1204 hi->dynstr_index = 0;
1205 }
1206 BFD_ASSERT (hi->dynindx == -1);
1207
1208 /* FIXME: There may be other information to
1209 copy over for particular targets. */
1210
1211 /* See if the new flags lead us to realize
1212 that the symbol must be dynamic. */
1213 if (! dynsym)
1214 {
1215 if (! dynamic)
1216 {
1217 if (info->shared
1218 || ((hi->elf_link_hash_flags
1219 & ELF_LINK_HASH_REF_DYNAMIC)
1220 != 0))
1221 dynsym = true;
1222 }
1223 else
1224 {
1225 if ((hi->elf_link_hash_flags
1226 & ELF_LINK_HASH_REF_REGULAR) != 0)
1227 dynsym = true;
1228 }
1229 }
1230 }
1231 }
1232
1233 /* We also need to define an indirection from the
1234 nondefault version of the symbol. */
1235
1236 shortname = bfd_hash_allocate (&info->hash->table,
1237 strlen (name));
1238 if (shortname == NULL)
1239 goto error_return;
1240 strncpy (shortname, name, p - name);
1241 strcpy (shortname + (p - name), p + 1);
1242
1243 /* First look to see if we have an existing symbol
1244 with this name. */
1245 hold = elf_link_hash_lookup (elf_hash_table (info),
1246 shortname, false, false,
1247 false);
1248
1249 /* If we are looking at a normal object, and the
1250 symbol was seen in a shared object, clobber the
1251 definition in the shared object. */
1252 if (hold != NULL
1253 && ! dynamic
1254 && (hold->root.type == bfd_link_hash_defined
1255 || hold->root.type == bfd_link_hash_defweak)
1256 && (hold->elf_link_hash_flags
1257 & ELF_LINK_HASH_DEF_DYNAMIC) != 0
1258 && ((hold->root.u.def.section->owner->flags & DYNAMIC)
1259 != 0))
1260 {
1261 /* Change the hash table entry to undefined, so
1262 that _bfd_generic_link_add_one_symbol will do
1263 the right thing. */
1264 hold->root.type = bfd_link_hash_undefined;
1265 hold->root.u.undef.abfd =
1266 hold->root.u.def.section->owner;
1267 hold->verinfo.vertree = NULL;
1268 hold = NULL;
1269 }
1270
1271 /* If we are looking at a shared object, and we have
1272 already seen this symbol defined elsewhere, then
1273 don't try to define it again. */
1274 if (hold != NULL
1275 && dynamic
1276 && (hold->root.type == bfd_link_hash_defined
1277 || hold->root.type == bfd_link_hash_defweak
1278 || hold->root.type == bfd_link_hash_indirect
1279 || (hold->root.type == bfd_link_hash_common
1280 && (bind == STB_WEAK
1281 || ELF_ST_TYPE (sym.st_info) == STT_FUNC))))
1282 {
1283 /* Don't add an indirect symbol. */
1284 }
1285 else
1286 {
1287 struct elf_link_hash_entry *hi;
1288
1289 hi = NULL;
1290 if (! (_bfd_generic_link_add_one_symbol
1291 (info, abfd, shortname, BSF_INDIRECT,
1292 bfd_ind_section_ptr, (bfd_vma) 0, name, false,
1293 collect, (struct bfd_link_hash_entry **) &hi)))
1294 goto error_return;
1295
1296 /* If there is a duplicate definition somewhere,
1297 then HI may not point to an indirect symbol.
1298 We will have reported an error to the user in
1299 that case. */
1300
1301 if (hi->root.type == bfd_link_hash_indirect)
1302 {
1303 hi->elf_link_hash_flags &= ~ ELF_LINK_NON_ELF;
1304
1305 /* If the symbol became indirect, then we
1306 assume that we have not seen a definition
1307 before. */
1308 BFD_ASSERT ((hi->elf_link_hash_flags
1309 & (ELF_LINK_HASH_DEF_DYNAMIC
1310 | ELF_LINK_HASH_DEF_REGULAR))
1311 == 0);
1312
1313 /* Copy down any references that we may have
1314 already seen to the symbol which just
1315 became indirect. */
1316 h->elf_link_hash_flags |=
1317 (hi->elf_link_hash_flags
1318 & (ELF_LINK_HASH_REF_DYNAMIC
1319 | ELF_LINK_HASH_REF_REGULAR));
1320
1321 /* Copy over the global table offset entry.
1322 This may have been already set up by a
1323 check_relocs routine. */
1324 if (h->got_offset == (bfd_vma) -1)
1325 {
1326 h->got_offset = hi->got_offset;
1327 hi->got_offset = (bfd_vma) -1;
1328 }
1329 BFD_ASSERT (hi->got_offset == (bfd_vma) -1);
1330
1331 if (h->dynindx == -1)
1332 {
1333 h->dynindx = hi->dynindx;
1334 h->dynstr_index = hi->dynstr_index;
1335 hi->dynindx = -1;
1336 hi->dynstr_index = 0;
1337 }
1338 BFD_ASSERT (hi->dynindx == -1);
1339
1340 /* FIXME: There may be other information to
1341 copy over for particular targets. */
1342
1343 /* See if the new flags lead us to realize
1344 that the symbol must be dynamic. */
1345 if (! dynsym)
1346 {
1347 if (! dynamic)
1348 {
1349 if (info->shared
1350 || ((hi->elf_link_hash_flags
1351 & ELF_LINK_HASH_REF_DYNAMIC)
1352 != 0))
1353 dynsym = true;
1354 }
1355 else
1356 {
1357 if ((hi->elf_link_hash_flags
1358 & ELF_LINK_HASH_REF_REGULAR) != 0)
1359 dynsym = true;
1360 }
1361 }
1362 }
1363 }
1364 }
1365 }
1366
1367 if (dynsym && h->dynindx == -1)
1368 {
1369 if (! _bfd_elf_link_record_dynamic_symbol (info, h))
1370 goto error_return;
1371 if (h->weakdef != NULL
1372 && ! new_weakdef
1373 && h->weakdef->dynindx == -1)
1374 {
1375 if (! _bfd_elf_link_record_dynamic_symbol (info,
1376 h->weakdef))
1377 goto error_return;
1378 }
1379 }
1380 }
1381 }
1382
1383 /* Now set the weakdefs field correctly for all the weak defined
1384 symbols we found. The only way to do this is to search all the
1385 symbols. Since we only need the information for non functions in
1386 dynamic objects, that's the only time we actually put anything on
1387 the list WEAKS. We need this information so that if a regular
1388 object refers to a symbol defined weakly in a dynamic object, the
1389 real symbol in the dynamic object is also put in the dynamic
1390 symbols; we also must arrange for both symbols to point to the
1391 same memory location. We could handle the general case of symbol
1392 aliasing, but a general symbol alias can only be generated in
1393 assembler code, handling it correctly would be very time
1394 consuming, and other ELF linkers don't handle general aliasing
1395 either. */
1396 while (weaks != NULL)
1397 {
1398 struct elf_link_hash_entry *hlook;
1399 asection *slook;
1400 bfd_vma vlook;
1401 struct elf_link_hash_entry **hpp;
1402 struct elf_link_hash_entry **hppend;
1403
1404 hlook = weaks;
1405 weaks = hlook->weakdef;
1406 hlook->weakdef = NULL;
1407
1408 BFD_ASSERT (hlook->root.type == bfd_link_hash_defined
1409 || hlook->root.type == bfd_link_hash_defweak
1410 || hlook->root.type == bfd_link_hash_common
1411 || hlook->root.type == bfd_link_hash_indirect);
1412 slook = hlook->root.u.def.section;
1413 vlook = hlook->root.u.def.value;
1414
1415 hpp = elf_sym_hashes (abfd);
1416 hppend = hpp + extsymcount;
1417 for (; hpp < hppend; hpp++)
1418 {
1419 struct elf_link_hash_entry *h;
1420
1421 h = *hpp;
1422 if (h != NULL && h != hlook
1423 && h->root.type == bfd_link_hash_defined
1424 && h->root.u.def.section == slook
1425 && h->root.u.def.value == vlook)
1426 {
1427 hlook->weakdef = h;
1428
1429 /* If the weak definition is in the list of dynamic
1430 symbols, make sure the real definition is put there
1431 as well. */
1432 if (hlook->dynindx != -1
1433 && h->dynindx == -1)
1434 {
1435 if (! _bfd_elf_link_record_dynamic_symbol (info, h))
1436 goto error_return;
1437 }
1438
1439 /* If the real definition is in the list of dynamic
1440 symbols, make sure the weak definition is put there
1441 as well. If we don't do this, then the dynamic
1442 loader might not merge the entries for the real
1443 definition and the weak definition. */
1444 if (h->dynindx != -1
1445 && hlook->dynindx == -1)
1446 {
1447 if (! _bfd_elf_link_record_dynamic_symbol (info, hlook))
1448 goto error_return;
1449 }
1450
1451 break;
1452 }
1453 }
1454 }
1455
1456 if (buf != NULL)
1457 {
1458 free (buf);
1459 buf = NULL;
1460 }
1461
1462 if (extversym != NULL)
1463 {
1464 free (extversym);
1465 extversym = NULL;
1466 }
1467
1468 /* If this object is the same format as the output object, and it is
1469 not a shared library, then let the backend look through the
1470 relocs.
1471
1472 This is required to build global offset table entries and to
1473 arrange for dynamic relocs. It is not required for the
1474 particular common case of linking non PIC code, even when linking
1475 against shared libraries, but unfortunately there is no way of
1476 knowing whether an object file has been compiled PIC or not.
1477 Looking through the relocs is not particularly time consuming.
1478 The problem is that we must either (1) keep the relocs in memory,
1479 which causes the linker to require additional runtime memory or
1480 (2) read the relocs twice from the input file, which wastes time.
1481 This would be a good case for using mmap.
1482
1483 I have no idea how to handle linking PIC code into a file of a
1484 different format. It probably can't be done. */
1485 check_relocs = get_elf_backend_data (abfd)->check_relocs;
1486 if (! dynamic
1487 && abfd->xvec == info->hash->creator
1488 && check_relocs != NULL)
1489 {
1490 asection *o;
1491
1492 for (o = abfd->sections; o != NULL; o = o->next)
1493 {
1494 Elf_Internal_Rela *internal_relocs;
1495 boolean ok;
1496
1497 if ((o->flags & SEC_RELOC) == 0
1498 || o->reloc_count == 0
1499 || ((info->strip == strip_all || info->strip == strip_debugger)
1500 && (o->flags & SEC_DEBUGGING) != 0))
1501 continue;
1502
1503 internal_relocs = (NAME(_bfd_elf,link_read_relocs)
1504 (abfd, o, (PTR) NULL,
1505 (Elf_Internal_Rela *) NULL,
1506 info->keep_memory));
1507 if (internal_relocs == NULL)
1508 goto error_return;
1509
1510 ok = (*check_relocs) (abfd, info, o, internal_relocs);
1511
1512 if (! info->keep_memory)
1513 free (internal_relocs);
1514
1515 if (! ok)
1516 goto error_return;
1517 }
1518 }
1519
1520 /* If this is a non-traditional, non-relocateable link, try to
1521 optimize the handling of the .stab/.stabstr sections. */
1522 if (! dynamic
1523 && ! info->relocateable
1524 && ! info->traditional_format
1525 && info->hash->creator->flavour == bfd_target_elf_flavour
1526 && (info->strip != strip_all && info->strip != strip_debugger))
1527 {
1528 asection *stab, *stabstr;
1529
1530 stab = bfd_get_section_by_name (abfd, ".stab");
1531 if (stab != NULL)
1532 {
1533 stabstr = bfd_get_section_by_name (abfd, ".stabstr");
1534
1535 if (stabstr != NULL)
1536 {
1537 struct bfd_elf_section_data *secdata;
1538
1539 secdata = elf_section_data (stab);
1540 if (! _bfd_link_section_stabs (abfd,
1541 &elf_hash_table (info)->stab_info,
1542 stab, stabstr,
1543 &secdata->stab_info))
1544 goto error_return;
1545 }
1546 }
1547 }
1548
1549 return true;
1550
1551 error_return:
1552 if (buf != NULL)
1553 free (buf);
1554 if (dynbuf != NULL)
1555 free (dynbuf);
1556 if (dynver != NULL)
1557 free (dynver);
1558 if (extversym != NULL)
1559 free (extversym);
1560 return false;
1561 }
1562
1563 /* Create some sections which will be filled in with dynamic linking
1564 information. ABFD is an input file which requires dynamic sections
1565 to be created. The dynamic sections take up virtual memory space
1566 when the final executable is run, so we need to create them before
1567 addresses are assigned to the output sections. We work out the
1568 actual contents and size of these sections later. */
1569
1570 boolean
1571 elf_link_create_dynamic_sections (abfd, info)
1572 bfd *abfd;
1573 struct bfd_link_info *info;
1574 {
1575 flagword flags;
1576 register asection *s;
1577 struct elf_link_hash_entry *h;
1578 struct elf_backend_data *bed;
1579
1580 if (elf_hash_table (info)->dynamic_sections_created)
1581 return true;
1582
1583 /* Make sure that all dynamic sections use the same input BFD. */
1584 if (elf_hash_table (info)->dynobj == NULL)
1585 elf_hash_table (info)->dynobj = abfd;
1586 else
1587 abfd = elf_hash_table (info)->dynobj;
1588
1589 /* Note that we set the SEC_IN_MEMORY flag for all of these
1590 sections. */
1591 flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS
1592 | SEC_IN_MEMORY | SEC_LINKER_CREATED);
1593
1594 /* A dynamically linked executable has a .interp section, but a
1595 shared library does not. */
1596 if (! info->shared)
1597 {
1598 s = bfd_make_section (abfd, ".interp");
1599 if (s == NULL
1600 || ! bfd_set_section_flags (abfd, s, flags | SEC_READONLY))
1601 return false;
1602 }
1603
1604 /* Create sections to hold version informations. These are removed
1605 if they are not needed. */
1606 s = bfd_make_section (abfd, ".gnu.version_d");
1607 if (s == NULL
1608 || ! bfd_set_section_flags (abfd, s, flags | SEC_READONLY)
1609 || ! bfd_set_section_alignment (abfd, s, 2))
1610 return false;
1611
1612 s = bfd_make_section (abfd, ".gnu.version");
1613 if (s == NULL
1614 || ! bfd_set_section_flags (abfd, s, flags | SEC_READONLY)
1615 || ! bfd_set_section_alignment (abfd, s, 1))
1616 return false;
1617
1618 s = bfd_make_section (abfd, ".gnu.version_r");
1619 if (s == NULL
1620 || ! bfd_set_section_flags (abfd, s, flags | SEC_READONLY)
1621 || ! bfd_set_section_alignment (abfd, s, 2))
1622 return false;
1623
1624 s = bfd_make_section (abfd, ".dynsym");
1625 if (s == NULL
1626 || ! bfd_set_section_flags (abfd, s, flags | SEC_READONLY)
1627 || ! bfd_set_section_alignment (abfd, s, LOG_FILE_ALIGN))
1628 return false;
1629
1630 s = bfd_make_section (abfd, ".dynstr");
1631 if (s == NULL
1632 || ! bfd_set_section_flags (abfd, s, flags | SEC_READONLY))
1633 return false;
1634
1635 /* Create a strtab to hold the dynamic symbol names. */
1636 if (elf_hash_table (info)->dynstr == NULL)
1637 {
1638 elf_hash_table (info)->dynstr = elf_stringtab_init ();
1639 if (elf_hash_table (info)->dynstr == NULL)
1640 return false;
1641 }
1642
1643 s = bfd_make_section (abfd, ".dynamic");
1644 if (s == NULL
1645 || ! bfd_set_section_flags (abfd, s, flags)
1646 || ! bfd_set_section_alignment (abfd, s, LOG_FILE_ALIGN))
1647 return false;
1648
1649 /* The special symbol _DYNAMIC is always set to the start of the
1650 .dynamic section. This call occurs before we have processed the
1651 symbols for any dynamic object, so we don't have to worry about
1652 overriding a dynamic definition. We could set _DYNAMIC in a
1653 linker script, but we only want to define it if we are, in fact,
1654 creating a .dynamic section. We don't want to define it if there
1655 is no .dynamic section, since on some ELF platforms the start up
1656 code examines it to decide how to initialize the process. */
1657 h = NULL;
1658 if (! (_bfd_generic_link_add_one_symbol
1659 (info, abfd, "_DYNAMIC", BSF_GLOBAL, s, (bfd_vma) 0,
1660 (const char *) NULL, false, get_elf_backend_data (abfd)->collect,
1661 (struct bfd_link_hash_entry **) &h)))
1662 return false;
1663 h->elf_link_hash_flags |= ELF_LINK_HASH_DEF_REGULAR;
1664 h->type = STT_OBJECT;
1665
1666 if (info->shared
1667 && ! _bfd_elf_link_record_dynamic_symbol (info, h))
1668 return false;
1669
1670 s = bfd_make_section (abfd, ".hash");
1671 if (s == NULL
1672 || ! bfd_set_section_flags (abfd, s, flags | SEC_READONLY)
1673 || ! bfd_set_section_alignment (abfd, s, LOG_FILE_ALIGN))
1674 return false;
1675
1676 /* Let the backend create the rest of the sections. This lets the
1677 backend set the right flags. The backend will normally create
1678 the .got and .plt sections. */
1679 bed = get_elf_backend_data (abfd);
1680 if (! (*bed->elf_backend_create_dynamic_sections) (abfd, info))
1681 return false;
1682
1683 elf_hash_table (info)->dynamic_sections_created = true;
1684
1685 return true;
1686 }
1687
1688 /* Add an entry to the .dynamic table. */
1689
1690 boolean
1691 elf_add_dynamic_entry (info, tag, val)
1692 struct bfd_link_info *info;
1693 bfd_vma tag;
1694 bfd_vma val;
1695 {
1696 Elf_Internal_Dyn dyn;
1697 bfd *dynobj;
1698 asection *s;
1699 size_t newsize;
1700 bfd_byte *newcontents;
1701
1702 dynobj = elf_hash_table (info)->dynobj;
1703
1704 s = bfd_get_section_by_name (dynobj, ".dynamic");
1705 BFD_ASSERT (s != NULL);
1706
1707 newsize = s->_raw_size + sizeof (Elf_External_Dyn);
1708 newcontents = (bfd_byte *) bfd_realloc (s->contents, newsize);
1709 if (newcontents == NULL)
1710 return false;
1711
1712 dyn.d_tag = tag;
1713 dyn.d_un.d_val = val;
1714 elf_swap_dyn_out (dynobj, &dyn,
1715 (Elf_External_Dyn *) (newcontents + s->_raw_size));
1716
1717 s->_raw_size = newsize;
1718 s->contents = newcontents;
1719
1720 return true;
1721 }
1722 \f
1723
1724 /* Read and swap the relocs for a section. They may have been cached.
1725 If the EXTERNAL_RELOCS and INTERNAL_RELOCS arguments are not NULL,
1726 they are used as buffers to read into. They are known to be large
1727 enough. If the INTERNAL_RELOCS relocs argument is NULL, the return
1728 value is allocated using either malloc or bfd_alloc, according to
1729 the KEEP_MEMORY argument. */
1730
1731 Elf_Internal_Rela *
1732 NAME(_bfd_elf,link_read_relocs) (abfd, o, external_relocs, internal_relocs,
1733 keep_memory)
1734 bfd *abfd;
1735 asection *o;
1736 PTR external_relocs;
1737 Elf_Internal_Rela *internal_relocs;
1738 boolean keep_memory;
1739 {
1740 Elf_Internal_Shdr *rel_hdr;
1741 PTR alloc1 = NULL;
1742 Elf_Internal_Rela *alloc2 = NULL;
1743
1744 if (elf_section_data (o)->relocs != NULL)
1745 return elf_section_data (o)->relocs;
1746
1747 if (o->reloc_count == 0)
1748 return NULL;
1749
1750 rel_hdr = &elf_section_data (o)->rel_hdr;
1751
1752 if (internal_relocs == NULL)
1753 {
1754 size_t size;
1755
1756 size = o->reloc_count * sizeof (Elf_Internal_Rela);
1757 if (keep_memory)
1758 internal_relocs = (Elf_Internal_Rela *) bfd_alloc (abfd, size);
1759 else
1760 internal_relocs = alloc2 = (Elf_Internal_Rela *) bfd_malloc (size);
1761 if (internal_relocs == NULL)
1762 goto error_return;
1763 }
1764
1765 if (external_relocs == NULL)
1766 {
1767 alloc1 = (PTR) bfd_malloc ((size_t) rel_hdr->sh_size);
1768 if (alloc1 == NULL)
1769 goto error_return;
1770 external_relocs = alloc1;
1771 }
1772
1773 if ((bfd_seek (abfd, rel_hdr->sh_offset, SEEK_SET) != 0)
1774 || (bfd_read (external_relocs, 1, rel_hdr->sh_size, abfd)
1775 != rel_hdr->sh_size))
1776 goto error_return;
1777
1778 /* Swap in the relocs. For convenience, we always produce an
1779 Elf_Internal_Rela array; if the relocs are Rel, we set the addend
1780 to 0. */
1781 if (rel_hdr->sh_entsize == sizeof (Elf_External_Rel))
1782 {
1783 Elf_External_Rel *erel;
1784 Elf_External_Rel *erelend;
1785 Elf_Internal_Rela *irela;
1786
1787 erel = (Elf_External_Rel *) external_relocs;
1788 erelend = erel + o->reloc_count;
1789 irela = internal_relocs;
1790 for (; erel < erelend; erel++, irela++)
1791 {
1792 Elf_Internal_Rel irel;
1793
1794 elf_swap_reloc_in (abfd, erel, &irel);
1795 irela->r_offset = irel.r_offset;
1796 irela->r_info = irel.r_info;
1797 irela->r_addend = 0;
1798 }
1799 }
1800 else
1801 {
1802 Elf_External_Rela *erela;
1803 Elf_External_Rela *erelaend;
1804 Elf_Internal_Rela *irela;
1805
1806 BFD_ASSERT (rel_hdr->sh_entsize == sizeof (Elf_External_Rela));
1807
1808 erela = (Elf_External_Rela *) external_relocs;
1809 erelaend = erela + o->reloc_count;
1810 irela = internal_relocs;
1811 for (; erela < erelaend; erela++, irela++)
1812 elf_swap_reloca_in (abfd, erela, irela);
1813 }
1814
1815 /* Cache the results for next time, if we can. */
1816 if (keep_memory)
1817 elf_section_data (o)->relocs = internal_relocs;
1818
1819 if (alloc1 != NULL)
1820 free (alloc1);
1821
1822 /* Don't free alloc2, since if it was allocated we are passing it
1823 back (under the name of internal_relocs). */
1824
1825 return internal_relocs;
1826
1827 error_return:
1828 if (alloc1 != NULL)
1829 free (alloc1);
1830 if (alloc2 != NULL)
1831 free (alloc2);
1832 return NULL;
1833 }
1834 \f
1835
1836 /* Record an assignment to a symbol made by a linker script. We need
1837 this in case some dynamic object refers to this symbol. */
1838
1839 /*ARGSUSED*/
1840 boolean
1841 NAME(bfd_elf,record_link_assignment) (output_bfd, info, name, provide)
1842 bfd *output_bfd;
1843 struct bfd_link_info *info;
1844 const char *name;
1845 boolean provide;
1846 {
1847 struct elf_link_hash_entry *h;
1848
1849 if (info->hash->creator->flavour != bfd_target_elf_flavour)
1850 return true;
1851
1852 h = elf_link_hash_lookup (elf_hash_table (info), name, true, true, false);
1853 if (h == NULL)
1854 return false;
1855
1856 if (h->root.type == bfd_link_hash_new)
1857 h->elf_link_hash_flags &=~ ELF_LINK_NON_ELF;
1858
1859 /* If this symbol is being provided by the linker script, and it is
1860 currently defined by a dynamic object, but not by a regular
1861 object, then mark it as undefined so that the generic linker will
1862 force the correct value. */
1863 if (provide
1864 && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) != 0
1865 && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0)
1866 h->root.type = bfd_link_hash_undefined;
1867
1868 h->elf_link_hash_flags |= ELF_LINK_HASH_DEF_REGULAR;
1869 h->type = STT_OBJECT;
1870
1871 if (((h->elf_link_hash_flags & (ELF_LINK_HASH_DEF_DYNAMIC
1872 | ELF_LINK_HASH_REF_DYNAMIC)) != 0
1873 || info->shared)
1874 && h->dynindx == -1)
1875 {
1876 if (! _bfd_elf_link_record_dynamic_symbol (info, h))
1877 return false;
1878
1879 /* If this is a weak defined symbol, and we know a corresponding
1880 real symbol from the same dynamic object, make sure the real
1881 symbol is also made into a dynamic symbol. */
1882 if (h->weakdef != NULL
1883 && h->weakdef->dynindx == -1)
1884 {
1885 if (! _bfd_elf_link_record_dynamic_symbol (info, h->weakdef))
1886 return false;
1887 }
1888 }
1889
1890 return true;
1891 }
1892 \f
1893 /* This structure is used to pass information to
1894 elf_link_assign_sym_version. */
1895
1896 struct elf_assign_sym_version_info
1897 {
1898 /* Output BFD. */
1899 bfd *output_bfd;
1900 /* General link information. */
1901 struct bfd_link_info *info;
1902 /* Version tree. */
1903 struct bfd_elf_version_tree *verdefs;
1904 /* Whether we are exporting all dynamic symbols. */
1905 boolean export_dynamic;
1906 /* Whether we removed any symbols from the dynamic symbol table. */
1907 boolean removed_dynamic;
1908 /* Whether we had a failure. */
1909 boolean failed;
1910 };
1911
1912 /* This structure is used to pass information to
1913 elf_link_find_version_dependencies. */
1914
1915 struct elf_find_verdep_info
1916 {
1917 /* Output BFD. */
1918 bfd *output_bfd;
1919 /* General link information. */
1920 struct bfd_link_info *info;
1921 /* The number of dependencies. */
1922 unsigned int vers;
1923 /* Whether we had a failure. */
1924 boolean failed;
1925 };
1926
1927 /* Array used to determine the number of hash table buckets to use
1928 based on the number of symbols there are. If there are fewer than
1929 3 symbols we use 1 bucket, fewer than 17 symbols we use 3 buckets,
1930 fewer than 37 we use 17 buckets, and so forth. We never use more
1931 than 32771 buckets. */
1932
1933 static const size_t elf_buckets[] =
1934 {
1935 1, 3, 17, 37, 67, 97, 131, 197, 263, 521, 1031, 2053, 4099, 8209,
1936 16411, 32771, 0
1937 };
1938
1939 /* Set up the sizes and contents of the ELF dynamic sections. This is
1940 called by the ELF linker emulation before_allocation routine. We
1941 must set the sizes of the sections before the linker sets the
1942 addresses of the various sections. */
1943
1944 boolean
1945 NAME(bfd_elf,size_dynamic_sections) (output_bfd, soname, rpath,
1946 export_dynamic, filter_shlib,
1947 auxiliary_filters, info, sinterpptr,
1948 verdefs)
1949 bfd *output_bfd;
1950 const char *soname;
1951 const char *rpath;
1952 boolean export_dynamic;
1953 const char *filter_shlib;
1954 const char * const *auxiliary_filters;
1955 struct bfd_link_info *info;
1956 asection **sinterpptr;
1957 struct bfd_elf_version_tree *verdefs;
1958 {
1959 bfd_size_type soname_indx;
1960 bfd *dynobj;
1961 struct elf_backend_data *bed;
1962 bfd_size_type old_dynsymcount;
1963
1964 *sinterpptr = NULL;
1965
1966 soname_indx = -1;
1967
1968 if (info->hash->creator->flavour != bfd_target_elf_flavour)
1969 return true;
1970
1971 /* The backend may have to create some sections regardless of whether
1972 we're dynamic or not. */
1973 bed = get_elf_backend_data (output_bfd);
1974 if (bed->elf_backend_always_size_sections
1975 && ! (*bed->elf_backend_always_size_sections) (output_bfd, info))
1976 return false;
1977
1978 dynobj = elf_hash_table (info)->dynobj;
1979
1980 /* If there were no dynamic objects in the link, there is nothing to
1981 do here. */
1982 if (dynobj == NULL)
1983 return true;
1984
1985 /* If we are supposed to export all symbols into the dynamic symbol
1986 table (this is not the normal case), then do so. */
1987 if (export_dynamic)
1988 {
1989 struct elf_info_failed eif;
1990
1991 eif.failed = false;
1992 eif.info = info;
1993 elf_link_hash_traverse (elf_hash_table (info), elf_export_symbol,
1994 (PTR) &eif);
1995 if (eif.failed)
1996 return false;
1997 }
1998
1999 if (elf_hash_table (info)->dynamic_sections_created)
2000 {
2001 struct elf_info_failed eif;
2002 struct elf_link_hash_entry *h;
2003 bfd_size_type strsize;
2004
2005 *sinterpptr = bfd_get_section_by_name (dynobj, ".interp");
2006 BFD_ASSERT (*sinterpptr != NULL || info->shared);
2007
2008 if (soname != NULL)
2009 {
2010 soname_indx = _bfd_stringtab_add (elf_hash_table (info)->dynstr,
2011 soname, true, true);
2012 if (soname_indx == (bfd_size_type) -1
2013 || ! elf_add_dynamic_entry (info, DT_SONAME, soname_indx))
2014 return false;
2015 }
2016
2017 if (info->symbolic)
2018 {
2019 if (! elf_add_dynamic_entry (info, DT_SYMBOLIC, 0))
2020 return false;
2021 }
2022
2023 if (rpath != NULL)
2024 {
2025 bfd_size_type indx;
2026
2027 indx = _bfd_stringtab_add (elf_hash_table (info)->dynstr, rpath,
2028 true, true);
2029 if (indx == (bfd_size_type) -1
2030 || ! elf_add_dynamic_entry (info, DT_RPATH, indx))
2031 return false;
2032 }
2033
2034 if (filter_shlib != NULL)
2035 {
2036 bfd_size_type indx;
2037
2038 indx = _bfd_stringtab_add (elf_hash_table (info)->dynstr,
2039 filter_shlib, true, true);
2040 if (indx == (bfd_size_type) -1
2041 || ! elf_add_dynamic_entry (info, DT_FILTER, indx))
2042 return false;
2043 }
2044
2045 if (auxiliary_filters != NULL)
2046 {
2047 const char * const *p;
2048
2049 for (p = auxiliary_filters; *p != NULL; p++)
2050 {
2051 bfd_size_type indx;
2052
2053 indx = _bfd_stringtab_add (elf_hash_table (info)->dynstr,
2054 *p, true, true);
2055 if (indx == (bfd_size_type) -1
2056 || ! elf_add_dynamic_entry (info, DT_AUXILIARY, indx))
2057 return false;
2058 }
2059 }
2060
2061 /* Find all symbols which were defined in a dynamic object and make
2062 the backend pick a reasonable value for them. */
2063 eif.failed = false;
2064 eif.info = info;
2065 elf_link_hash_traverse (elf_hash_table (info),
2066 elf_adjust_dynamic_symbol,
2067 (PTR) &eif);
2068 if (eif.failed)
2069 return false;
2070
2071 /* Add some entries to the .dynamic section. We fill in some of the
2072 values later, in elf_bfd_final_link, but we must add the entries
2073 now so that we know the final size of the .dynamic section. */
2074 h = elf_link_hash_lookup (elf_hash_table (info), "_init", false,
2075 false, false);
2076 if (h != NULL
2077 && (h->elf_link_hash_flags & (ELF_LINK_HASH_REF_REGULAR
2078 | ELF_LINK_HASH_DEF_REGULAR)) != 0)
2079 {
2080 if (! elf_add_dynamic_entry (info, DT_INIT, 0))
2081 return false;
2082 }
2083 h = elf_link_hash_lookup (elf_hash_table (info), "_fini", false,
2084 false, false);
2085 if (h != NULL
2086 && (h->elf_link_hash_flags & (ELF_LINK_HASH_REF_REGULAR
2087 | ELF_LINK_HASH_DEF_REGULAR)) != 0)
2088 {
2089 if (! elf_add_dynamic_entry (info, DT_FINI, 0))
2090 return false;
2091 }
2092 strsize = _bfd_stringtab_size (elf_hash_table (info)->dynstr);
2093 if (! elf_add_dynamic_entry (info, DT_HASH, 0)
2094 || ! elf_add_dynamic_entry (info, DT_STRTAB, 0)
2095 || ! elf_add_dynamic_entry (info, DT_SYMTAB, 0)
2096 || ! elf_add_dynamic_entry (info, DT_STRSZ, strsize)
2097 || ! elf_add_dynamic_entry (info, DT_SYMENT,
2098 sizeof (Elf_External_Sym)))
2099 return false;
2100 }
2101
2102 /* The backend must work out the sizes of all the other dynamic
2103 sections. */
2104 old_dynsymcount = elf_hash_table (info)->dynsymcount;
2105 if (! (*bed->elf_backend_size_dynamic_sections) (output_bfd, info))
2106 return false;
2107
2108 if (elf_hash_table (info)->dynamic_sections_created)
2109 {
2110 size_t dynsymcount;
2111 asection *s;
2112 size_t i;
2113 size_t bucketcount = 0;
2114 Elf_Internal_Sym isym;
2115 struct elf_assign_sym_version_info sinfo;
2116
2117 /* Set up the version definition section. */
2118 s = bfd_get_section_by_name (dynobj, ".gnu.version_d");
2119 BFD_ASSERT (s != NULL);
2120
2121 /* Attach all the symbols to their version information. This
2122 may cause some symbols to be unexported. */
2123 sinfo.output_bfd = output_bfd;
2124 sinfo.info = info;
2125 sinfo.verdefs = verdefs;
2126 sinfo.export_dynamic = export_dynamic;
2127 sinfo.removed_dynamic = false;
2128 sinfo.failed = false;
2129
2130 elf_link_hash_traverse (elf_hash_table (info),
2131 elf_link_assign_sym_version,
2132 (PTR) &sinfo);
2133 if (sinfo.failed)
2134 return false;
2135
2136 /* We may have created additional version definitions if we are
2137 just linking a regular application. */
2138 verdefs = sinfo.verdefs;
2139
2140 if (verdefs == NULL)
2141 {
2142 asection **spp;
2143
2144 /* Don't include this section in the output file. */
2145 for (spp = &output_bfd->sections;
2146 *spp != s->output_section;
2147 spp = &(*spp)->next)
2148 ;
2149 *spp = s->output_section->next;
2150 --output_bfd->section_count;
2151 }
2152 else
2153 {
2154 unsigned int cdefs;
2155 bfd_size_type size;
2156 struct bfd_elf_version_tree *t;
2157 bfd_byte *p;
2158 Elf_Internal_Verdef def;
2159 Elf_Internal_Verdaux defaux;
2160
2161 if (sinfo.removed_dynamic)
2162 {
2163 /* Some dynamic symbols were changed to be local
2164 symbols. In this case, we renumber all of the
2165 dynamic symbols, so that we don't have a hole. If
2166 the backend changed dynsymcount, then assume that the
2167 new symbols are at the start. This is the case on
2168 the MIPS. FIXME: The names of the removed symbols
2169 will still be in the dynamic string table, wasting
2170 space. */
2171 elf_hash_table (info)->dynsymcount =
2172 1 + (elf_hash_table (info)->dynsymcount - old_dynsymcount);
2173 elf_link_hash_traverse (elf_hash_table (info),
2174 elf_link_renumber_dynsyms,
2175 (PTR) info);
2176 }
2177
2178 cdefs = 0;
2179 size = 0;
2180
2181 /* Make space for the base version. */
2182 size += sizeof (Elf_External_Verdef);
2183 size += sizeof (Elf_External_Verdaux);
2184 ++cdefs;
2185
2186 for (t = verdefs; t != NULL; t = t->next)
2187 {
2188 struct bfd_elf_version_deps *n;
2189
2190 size += sizeof (Elf_External_Verdef);
2191 size += sizeof (Elf_External_Verdaux);
2192 ++cdefs;
2193
2194 for (n = t->deps; n != NULL; n = n->next)
2195 size += sizeof (Elf_External_Verdaux);
2196 }
2197
2198 s->_raw_size = size;
2199 s->contents = (bfd_byte *) bfd_alloc (output_bfd, s->_raw_size);
2200 if (s->contents == NULL && s->_raw_size != 0)
2201 return false;
2202
2203 /* Fill in the version definition section. */
2204
2205 p = s->contents;
2206
2207 def.vd_version = VER_DEF_CURRENT;
2208 def.vd_flags = VER_FLG_BASE;
2209 def.vd_ndx = 1;
2210 def.vd_cnt = 1;
2211 def.vd_aux = sizeof (Elf_External_Verdef);
2212 def.vd_next = (sizeof (Elf_External_Verdef)
2213 + sizeof (Elf_External_Verdaux));
2214
2215 if (soname_indx != -1)
2216 {
2217 def.vd_hash = bfd_elf_hash ((const unsigned char *) soname);
2218 defaux.vda_name = soname_indx;
2219 }
2220 else
2221 {
2222 const char *name;
2223 bfd_size_type indx;
2224
2225 name = output_bfd->filename;
2226 def.vd_hash = bfd_elf_hash ((const unsigned char *) name);
2227 indx = _bfd_stringtab_add (elf_hash_table (info)->dynstr,
2228 name, true, false);
2229 if (indx == (bfd_size_type) -1)
2230 return false;
2231 defaux.vda_name = indx;
2232 }
2233 defaux.vda_next = 0;
2234
2235 _bfd_elf_swap_verdef_out (output_bfd, &def,
2236 (Elf_External_Verdef *)p);
2237 p += sizeof (Elf_External_Verdef);
2238 _bfd_elf_swap_verdaux_out (output_bfd, &defaux,
2239 (Elf_External_Verdaux *) p);
2240 p += sizeof (Elf_External_Verdaux);
2241
2242 for (t = verdefs; t != NULL; t = t->next)
2243 {
2244 unsigned int cdeps;
2245 struct bfd_elf_version_deps *n;
2246 struct elf_link_hash_entry *h;
2247
2248 cdeps = 0;
2249 for (n = t->deps; n != NULL; n = n->next)
2250 ++cdeps;
2251
2252 /* Add a symbol representing this version. */
2253 h = NULL;
2254 if (! (_bfd_generic_link_add_one_symbol
2255 (info, dynobj, t->name, BSF_GLOBAL, bfd_abs_section_ptr,
2256 (bfd_vma) 0, (const char *) NULL, false,
2257 get_elf_backend_data (dynobj)->collect,
2258 (struct bfd_link_hash_entry **) &h)))
2259 return false;
2260 h->elf_link_hash_flags &= ~ ELF_LINK_NON_ELF;
2261 h->elf_link_hash_flags |= ELF_LINK_HASH_DEF_REGULAR;
2262 h->type = STT_OBJECT;
2263 h->verinfo.vertree = t;
2264
2265 if (! _bfd_elf_link_record_dynamic_symbol (info, h))
2266 return false;
2267
2268 def.vd_version = VER_DEF_CURRENT;
2269 def.vd_flags = 0;
2270 if (t->globals == NULL && t->locals == NULL && ! t->used)
2271 def.vd_flags |= VER_FLG_WEAK;
2272 def.vd_ndx = t->vernum + 1;
2273 def.vd_cnt = cdeps + 1;
2274 def.vd_hash = bfd_elf_hash ((const unsigned char *) t->name);
2275 def.vd_aux = sizeof (Elf_External_Verdef);
2276 if (t->next != NULL)
2277 def.vd_next = (sizeof (Elf_External_Verdef)
2278 + (cdeps + 1) * sizeof (Elf_External_Verdaux));
2279 else
2280 def.vd_next = 0;
2281
2282 _bfd_elf_swap_verdef_out (output_bfd, &def,
2283 (Elf_External_Verdef *) p);
2284 p += sizeof (Elf_External_Verdef);
2285
2286 defaux.vda_name = h->dynstr_index;
2287 if (t->deps == NULL)
2288 defaux.vda_next = 0;
2289 else
2290 defaux.vda_next = sizeof (Elf_External_Verdaux);
2291 t->name_indx = defaux.vda_name;
2292
2293 _bfd_elf_swap_verdaux_out (output_bfd, &defaux,
2294 (Elf_External_Verdaux *) p);
2295 p += sizeof (Elf_External_Verdaux);
2296
2297 for (n = t->deps; n != NULL; n = n->next)
2298 {
2299 defaux.vda_name = n->version_needed->name_indx;
2300 if (n->next == NULL)
2301 defaux.vda_next = 0;
2302 else
2303 defaux.vda_next = sizeof (Elf_External_Verdaux);
2304
2305 _bfd_elf_swap_verdaux_out (output_bfd, &defaux,
2306 (Elf_External_Verdaux *) p);
2307 p += sizeof (Elf_External_Verdaux);
2308 }
2309 }
2310
2311 if (! elf_add_dynamic_entry (info, DT_VERDEF, 0)
2312 || ! elf_add_dynamic_entry (info, DT_VERDEFNUM, cdefs))
2313 return false;
2314
2315 elf_tdata (output_bfd)->cverdefs = cdefs;
2316 }
2317
2318 /* Work out the size of the version reference section. */
2319
2320 s = bfd_get_section_by_name (dynobj, ".gnu.version_r");
2321 BFD_ASSERT (s != NULL);
2322 {
2323 struct elf_find_verdep_info sinfo;
2324
2325 sinfo.output_bfd = output_bfd;
2326 sinfo.info = info;
2327 sinfo.vers = elf_tdata (output_bfd)->cverdefs;
2328 if (sinfo.vers == 0)
2329 sinfo.vers = 1;
2330 sinfo.failed = false;
2331
2332 elf_link_hash_traverse (elf_hash_table (info),
2333 elf_link_find_version_dependencies,
2334 (PTR) &sinfo);
2335
2336 if (elf_tdata (output_bfd)->verref == NULL)
2337 {
2338 asection **spp;
2339
2340 /* We don't have any version definitions, so we can just
2341 remove the section. */
2342
2343 for (spp = &output_bfd->sections;
2344 *spp != s->output_section;
2345 spp = &(*spp)->next)
2346 ;
2347 *spp = s->output_section->next;
2348 --output_bfd->section_count;
2349 }
2350 else
2351 {
2352 Elf_Internal_Verneed *t;
2353 unsigned int size;
2354 unsigned int crefs;
2355 bfd_byte *p;
2356
2357 /* Build the version definition section. */
2358 size = 0;
2359 crefs = 0;
2360 for (t = elf_tdata (output_bfd)->verref;
2361 t != NULL;
2362 t = t->vn_nextref)
2363 {
2364 Elf_Internal_Vernaux *a;
2365
2366 size += sizeof (Elf_External_Verneed);
2367 ++crefs;
2368 for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr)
2369 size += sizeof (Elf_External_Vernaux);
2370 }
2371
2372 s->_raw_size = size;
2373 s->contents = (bfd_byte *) bfd_alloc (output_bfd, size);
2374 if (s->contents == NULL)
2375 return false;
2376
2377 p = s->contents;
2378 for (t = elf_tdata (output_bfd)->verref;
2379 t != NULL;
2380 t = t->vn_nextref)
2381 {
2382 unsigned int caux;
2383 Elf_Internal_Vernaux *a;
2384 bfd_size_type indx;
2385
2386 caux = 0;
2387 for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr)
2388 ++caux;
2389
2390 t->vn_version = VER_NEED_CURRENT;
2391 t->vn_cnt = caux;
2392 indx = _bfd_stringtab_add (elf_hash_table (info)->dynstr,
2393 t->vn_bfd->filename, true, false);
2394 if (indx == (bfd_size_type) -1)
2395 return false;
2396 t->vn_file = indx;
2397 t->vn_aux = sizeof (Elf_External_Verneed);
2398 if (t->vn_nextref == NULL)
2399 t->vn_next = 0;
2400 else
2401 t->vn_next = (sizeof (Elf_External_Verneed)
2402 + caux * sizeof (Elf_External_Vernaux));
2403
2404 _bfd_elf_swap_verneed_out (output_bfd, t,
2405 (Elf_External_Verneed *) p);
2406 p += sizeof (Elf_External_Verneed);
2407
2408 for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr)
2409 {
2410 a->vna_hash = bfd_elf_hash ((const unsigned char *)
2411 a->vna_nodename);
2412 indx = _bfd_stringtab_add (elf_hash_table (info)->dynstr,
2413 a->vna_nodename, true, false);
2414 if (indx == (bfd_size_type) -1)
2415 return false;
2416 a->vna_name = indx;
2417 if (a->vna_nextptr == NULL)
2418 a->vna_next = 0;
2419 else
2420 a->vna_next = sizeof (Elf_External_Vernaux);
2421
2422 _bfd_elf_swap_vernaux_out (output_bfd, a,
2423 (Elf_External_Vernaux *) p);
2424 p += sizeof (Elf_External_Vernaux);
2425 }
2426 }
2427
2428 if (! elf_add_dynamic_entry (info, DT_VERNEED, 0)
2429 || ! elf_add_dynamic_entry (info, DT_VERNEEDNUM, crefs))
2430 return false;
2431
2432 elf_tdata (output_bfd)->cverrefs = crefs;
2433 }
2434 }
2435
2436 dynsymcount = elf_hash_table (info)->dynsymcount;
2437
2438 /* Work out the size of the symbol version section. */
2439 s = bfd_get_section_by_name (dynobj, ".gnu.version");
2440 BFD_ASSERT (s != NULL);
2441 if (dynsymcount == 0
2442 || (verdefs == NULL && elf_tdata (output_bfd)->verref == NULL))
2443 {
2444 asection **spp;
2445
2446 /* We don't need any symbol versions; just discard the
2447 section. */
2448 for (spp = &output_bfd->sections;
2449 *spp != s->output_section;
2450 spp = &(*spp)->next)
2451 ;
2452 *spp = s->output_section->next;
2453 --output_bfd->section_count;
2454 }
2455 else
2456 {
2457 s->_raw_size = dynsymcount * sizeof (Elf_External_Versym);
2458 s->contents = (bfd_byte *) bfd_zalloc (output_bfd, s->_raw_size);
2459 if (s->contents == NULL)
2460 return false;
2461
2462 if (! elf_add_dynamic_entry (info, DT_VERSYM, 0))
2463 return false;
2464 }
2465
2466 /* Set the size of the .dynsym and .hash sections. We counted
2467 the number of dynamic symbols in elf_link_add_object_symbols.
2468 We will build the contents of .dynsym and .hash when we build
2469 the final symbol table, because until then we do not know the
2470 correct value to give the symbols. We built the .dynstr
2471 section as we went along in elf_link_add_object_symbols. */
2472 s = bfd_get_section_by_name (dynobj, ".dynsym");
2473 BFD_ASSERT (s != NULL);
2474 s->_raw_size = dynsymcount * sizeof (Elf_External_Sym);
2475 s->contents = (bfd_byte *) bfd_alloc (output_bfd, s->_raw_size);
2476 if (s->contents == NULL && s->_raw_size != 0)
2477 return false;
2478
2479 /* The first entry in .dynsym is a dummy symbol. */
2480 isym.st_value = 0;
2481 isym.st_size = 0;
2482 isym.st_name = 0;
2483 isym.st_info = 0;
2484 isym.st_other = 0;
2485 isym.st_shndx = 0;
2486 elf_swap_symbol_out (output_bfd, &isym,
2487 (PTR) (Elf_External_Sym *) s->contents);
2488
2489 for (i = 0; elf_buckets[i] != 0; i++)
2490 {
2491 bucketcount = elf_buckets[i];
2492 if (dynsymcount < elf_buckets[i + 1])
2493 break;
2494 }
2495
2496 s = bfd_get_section_by_name (dynobj, ".hash");
2497 BFD_ASSERT (s != NULL);
2498 s->_raw_size = (2 + bucketcount + dynsymcount) * (ARCH_SIZE / 8);
2499 s->contents = (bfd_byte *) bfd_alloc (output_bfd, s->_raw_size);
2500 if (s->contents == NULL)
2501 return false;
2502 memset (s->contents, 0, (size_t) s->_raw_size);
2503
2504 put_word (output_bfd, bucketcount, s->contents);
2505 put_word (output_bfd, dynsymcount, s->contents + (ARCH_SIZE / 8));
2506
2507 elf_hash_table (info)->bucketcount = bucketcount;
2508
2509 s = bfd_get_section_by_name (dynobj, ".dynstr");
2510 BFD_ASSERT (s != NULL);
2511 s->_raw_size = _bfd_stringtab_size (elf_hash_table (info)->dynstr);
2512
2513 if (! elf_add_dynamic_entry (info, DT_NULL, 0))
2514 return false;
2515 }
2516
2517 return true;
2518 }
2519 \f
2520 /* Make the backend pick a good value for a dynamic symbol. This is
2521 called via elf_link_hash_traverse, and also calls itself
2522 recursively. */
2523
2524 static boolean
2525 elf_adjust_dynamic_symbol (h, data)
2526 struct elf_link_hash_entry *h;
2527 PTR data;
2528 {
2529 struct elf_info_failed *eif = (struct elf_info_failed *) data;
2530 bfd *dynobj;
2531 struct elf_backend_data *bed;
2532
2533 /* Ignore indirect symbols. These are added by the versioning code. */
2534 if (h->root.type == bfd_link_hash_indirect)
2535 return true;
2536
2537 /* If this symbol was mentioned in a non-ELF file, try to set
2538 DEF_REGULAR and REF_REGULAR correctly. This is the only way to
2539 permit a non-ELF file to correctly refer to a symbol defined in
2540 an ELF dynamic object. */
2541 if ((h->elf_link_hash_flags & ELF_LINK_NON_ELF) != 0)
2542 {
2543 if (h->root.type != bfd_link_hash_defined
2544 && h->root.type != bfd_link_hash_defweak)
2545 h->elf_link_hash_flags |= ELF_LINK_HASH_REF_REGULAR;
2546 else
2547 {
2548 if (h->root.u.def.section->owner != NULL
2549 && (bfd_get_flavour (h->root.u.def.section->owner)
2550 == bfd_target_elf_flavour))
2551 h->elf_link_hash_flags |= ELF_LINK_HASH_REF_REGULAR;
2552 else
2553 h->elf_link_hash_flags |= ELF_LINK_HASH_DEF_REGULAR;
2554 }
2555
2556 if ((h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) != 0
2557 || (h->elf_link_hash_flags & ELF_LINK_HASH_REF_DYNAMIC) != 0)
2558 {
2559 if (! _bfd_elf_link_record_dynamic_symbol (eif->info, h))
2560 {
2561 eif->failed = true;
2562 return false;
2563 }
2564 }
2565 }
2566
2567 /* If this is a final link, and the symbol was defined as a common
2568 symbol in a regular object file, and there was no definition in
2569 any dynamic object, then the linker will have allocated space for
2570 the symbol in a common section but the ELF_LINK_HASH_DEF_REGULAR
2571 flag will not have been set. */
2572 if (h->root.type == bfd_link_hash_defined
2573 && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0
2574 && (h->elf_link_hash_flags & ELF_LINK_HASH_REF_REGULAR) != 0
2575 && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) == 0
2576 && (h->root.u.def.section->owner->flags & DYNAMIC) == 0)
2577 h->elf_link_hash_flags |= ELF_LINK_HASH_DEF_REGULAR;
2578
2579 /* If -Bsymbolic was used (which means to bind references to global
2580 symbols to the definition within the shared object), and this
2581 symbol was defined in a regular object, then it actually doesn't
2582 need a PLT entry. */
2583 if ((h->elf_link_hash_flags & ELF_LINK_HASH_NEEDS_PLT) != 0
2584 && eif->info->shared
2585 && eif->info->symbolic
2586 && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) != 0)
2587 h->elf_link_hash_flags &=~ ELF_LINK_HASH_NEEDS_PLT;
2588
2589 /* If this symbol does not require a PLT entry, and it is not
2590 defined by a dynamic object, or is not referenced by a regular
2591 object, ignore it. We do have to handle a weak defined symbol,
2592 even if no regular object refers to it, if we decided to add it
2593 to the dynamic symbol table. FIXME: Do we normally need to worry
2594 about symbols which are defined by one dynamic object and
2595 referenced by another one? */
2596 if ((h->elf_link_hash_flags & ELF_LINK_HASH_NEEDS_PLT) == 0
2597 && ((h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) != 0
2598 || (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) == 0
2599 || ((h->elf_link_hash_flags & ELF_LINK_HASH_REF_REGULAR) == 0
2600 && (h->weakdef == NULL || h->weakdef->dynindx == -1))))
2601 return true;
2602
2603 /* If we've already adjusted this symbol, don't do it again. This
2604 can happen via a recursive call. */
2605 if ((h->elf_link_hash_flags & ELF_LINK_HASH_DYNAMIC_ADJUSTED) != 0)
2606 return true;
2607
2608 /* Don't look at this symbol again. Note that we must set this
2609 after checking the above conditions, because we may look at a
2610 symbol once, decide not to do anything, and then get called
2611 recursively later after REF_REGULAR is set below. */
2612 h->elf_link_hash_flags |= ELF_LINK_HASH_DYNAMIC_ADJUSTED;
2613
2614 /* If this is a weak definition, and we know a real definition, and
2615 the real symbol is not itself defined by a regular object file,
2616 then get a good value for the real definition. We handle the
2617 real symbol first, for the convenience of the backend routine.
2618
2619 Note that there is a confusing case here. If the real definition
2620 is defined by a regular object file, we don't get the real symbol
2621 from the dynamic object, but we do get the weak symbol. If the
2622 processor backend uses a COPY reloc, then if some routine in the
2623 dynamic object changes the real symbol, we will not see that
2624 change in the corresponding weak symbol. This is the way other
2625 ELF linkers work as well, and seems to be a result of the shared
2626 library model.
2627
2628 I will clarify this issue. Most SVR4 shared libraries define the
2629 variable _timezone and define timezone as a weak synonym. The
2630 tzset call changes _timezone. If you write
2631 extern int timezone;
2632 int _timezone = 5;
2633 int main () { tzset (); printf ("%d %d\n", timezone, _timezone); }
2634 you might expect that, since timezone is a synonym for _timezone,
2635 the same number will print both times. However, if the processor
2636 backend uses a COPY reloc, then actually timezone will be copied
2637 into your process image, and, since you define _timezone
2638 yourself, _timezone will not. Thus timezone and _timezone will
2639 wind up at different memory locations. The tzset call will set
2640 _timezone, leaving timezone unchanged. */
2641
2642 if (h->weakdef != NULL)
2643 {
2644 struct elf_link_hash_entry *weakdef;
2645
2646 BFD_ASSERT (h->root.type == bfd_link_hash_defined
2647 || h->root.type == bfd_link_hash_defweak);
2648 weakdef = h->weakdef;
2649 BFD_ASSERT (weakdef->root.type == bfd_link_hash_defined
2650 || weakdef->root.type == bfd_link_hash_defweak);
2651 BFD_ASSERT (weakdef->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC);
2652 if ((weakdef->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) != 0)
2653 {
2654 /* This symbol is defined by a regular object file, so we
2655 will not do anything special. Clear weakdef for the
2656 convenience of the processor backend. */
2657 h->weakdef = NULL;
2658 }
2659 else
2660 {
2661 /* There is an implicit reference by a regular object file
2662 via the weak symbol. */
2663 weakdef->elf_link_hash_flags |= ELF_LINK_HASH_REF_REGULAR;
2664 if (! elf_adjust_dynamic_symbol (weakdef, (PTR) eif))
2665 return false;
2666 }
2667 }
2668
2669 dynobj = elf_hash_table (eif->info)->dynobj;
2670 bed = get_elf_backend_data (dynobj);
2671 if (! (*bed->elf_backend_adjust_dynamic_symbol) (eif->info, h))
2672 {
2673 eif->failed = true;
2674 return false;
2675 }
2676
2677 return true;
2678 }
2679 \f
2680 /* This routine is used to export all defined symbols into the dynamic
2681 symbol table. It is called via elf_link_hash_traverse. */
2682
2683 static boolean
2684 elf_export_symbol (h, data)
2685 struct elf_link_hash_entry *h;
2686 PTR data;
2687 {
2688 struct elf_info_failed *eif = (struct elf_info_failed *) data;
2689
2690 /* Ignore indirect symbols. These are added by the versioning code. */
2691 if (h->root.type == bfd_link_hash_indirect)
2692 return true;
2693
2694 if (h->dynindx == -1
2695 && (h->elf_link_hash_flags
2696 & (ELF_LINK_HASH_DEF_REGULAR | ELF_LINK_HASH_REF_REGULAR)) != 0)
2697 {
2698 if (! _bfd_elf_link_record_dynamic_symbol (eif->info, h))
2699 {
2700 eif->failed = true;
2701 return false;
2702 }
2703 }
2704
2705 return true;
2706 }
2707 \f
2708 /* Look through the symbols which are defined in other shared
2709 libraries and referenced here. Update the list of version
2710 dependencies. This will be put into the .gnu.version_r section.
2711 This function is called via elf_link_hash_traverse. */
2712
2713 static boolean
2714 elf_link_find_version_dependencies (h, data)
2715 struct elf_link_hash_entry *h;
2716 PTR data;
2717 {
2718 struct elf_find_verdep_info *rinfo = (struct elf_find_verdep_info *) data;
2719 Elf_Internal_Verneed *t;
2720 Elf_Internal_Vernaux *a;
2721
2722 /* We only care about symbols defined in shared objects with version
2723 information. */
2724 if ((h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) == 0
2725 || (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) != 0
2726 || h->dynindx == -1
2727 || h->verinfo.verdef == NULL)
2728 return true;
2729
2730 /* See if we already know about this version. */
2731 for (t = elf_tdata (rinfo->output_bfd)->verref; t != NULL; t = t->vn_nextref)
2732 {
2733 if (t->vn_bfd == h->verinfo.verdef->vd_bfd)
2734 continue;
2735
2736 for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr)
2737 if (a->vna_nodename == h->verinfo.verdef->vd_nodename)
2738 return true;
2739
2740 break;
2741 }
2742
2743 /* This is a new version. Add it to tree we are building. */
2744
2745 if (t == NULL)
2746 {
2747 t = (Elf_Internal_Verneed *) bfd_zalloc (rinfo->output_bfd, sizeof *t);
2748 if (t == NULL)
2749 {
2750 rinfo->failed = true;
2751 return false;
2752 }
2753
2754 t->vn_bfd = h->verinfo.verdef->vd_bfd;
2755 t->vn_nextref = elf_tdata (rinfo->output_bfd)->verref;
2756 elf_tdata (rinfo->output_bfd)->verref = t;
2757 }
2758
2759 a = (Elf_Internal_Vernaux *) bfd_zalloc (rinfo->output_bfd, sizeof *a);
2760
2761 /* Note that we are copying a string pointer here, and testing it
2762 above. If bfd_elf_string_from_elf_section is ever changed to
2763 discard the string data when low in memory, this will have to be
2764 fixed. */
2765 a->vna_nodename = h->verinfo.verdef->vd_nodename;
2766
2767 a->vna_flags = h->verinfo.verdef->vd_flags;
2768 a->vna_nextptr = t->vn_auxptr;
2769
2770 h->verinfo.verdef->vd_exp_refno = rinfo->vers;
2771 ++rinfo->vers;
2772
2773 a->vna_other = h->verinfo.verdef->vd_exp_refno + 1;
2774
2775 t->vn_auxptr = a;
2776
2777 return true;
2778 }
2779
2780 /* Figure out appropriate versions for all the symbols. We may not
2781 have the version number script until we have read all of the input
2782 files, so until that point we don't know which symbols should be
2783 local. This function is called via elf_link_hash_traverse. */
2784
2785 static boolean
2786 elf_link_assign_sym_version (h, data)
2787 struct elf_link_hash_entry *h;
2788 PTR data;
2789 {
2790 struct elf_assign_sym_version_info *sinfo =
2791 (struct elf_assign_sym_version_info *) data;
2792 struct bfd_link_info *info = sinfo->info;
2793 char *p;
2794
2795 /* We only need version numbers for symbols defined in regular
2796 objects. */
2797 if ((h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0)
2798 return true;
2799
2800 p = strchr (h->root.root.string, ELF_VER_CHR);
2801 if (p != NULL && h->verinfo.vertree == NULL)
2802 {
2803 struct bfd_elf_version_tree *t;
2804 boolean hidden;
2805
2806 hidden = true;
2807
2808 /* There are two consecutive ELF_VER_CHR characters if this is
2809 not a hidden symbol. */
2810 ++p;
2811 if (*p == ELF_VER_CHR)
2812 {
2813 hidden = false;
2814 ++p;
2815 }
2816
2817 /* If there is no version string, we can just return out. */
2818 if (*p == '\0')
2819 {
2820 if (hidden)
2821 h->elf_link_hash_flags |= ELF_LINK_HIDDEN;
2822 return true;
2823 }
2824
2825 /* Look for the version. If we find it, it is no longer weak. */
2826 for (t = sinfo->verdefs; t != NULL; t = t->next)
2827 {
2828 if (strcmp (t->name, p) == 0)
2829 {
2830 h->verinfo.vertree = t;
2831 t->used = true;
2832
2833 /* See if there is anything to force this symbol to
2834 local scope. */
2835 if (t->locals != NULL)
2836 {
2837 int len;
2838 char *alc;
2839 struct bfd_elf_version_expr *d;
2840
2841 len = p - h->root.root.string;
2842 alc = bfd_alloc (sinfo->output_bfd, len);
2843 if (alc == NULL)
2844 return false;
2845 strncpy (alc, h->root.root.string, len - 1);
2846 alc[len - 1] = '\0';
2847 if (alc[len - 2] == ELF_VER_CHR)
2848 alc[len - 2] = '\0';
2849
2850 for (d = t->locals; d != NULL; d = d->next)
2851 {
2852 if ((d->match[0] == '*' && d->match[1] == '\0')
2853 || fnmatch (d->match, alc, 0) == 0)
2854 {
2855 if (h->dynindx != -1
2856 && info->shared
2857 && ! sinfo->export_dynamic
2858 && (h->elf_link_hash_flags
2859 & ELF_LINK_HASH_NEEDS_PLT) == 0)
2860 {
2861 sinfo->removed_dynamic = true;
2862 h->elf_link_hash_flags |= ELF_LINK_FORCED_LOCAL;
2863 h->dynindx = -1;
2864 /* FIXME: The name of the symbol has
2865 already been recorded in the dynamic
2866 string table section. */
2867 }
2868
2869 break;
2870 }
2871 }
2872
2873 bfd_release (sinfo->output_bfd, alc);
2874 }
2875
2876 break;
2877 }
2878 }
2879
2880 /* If we are building an application, we need to create a
2881 version node for this version. */
2882 if (t == NULL && ! info->shared)
2883 {
2884 struct bfd_elf_version_tree **pp;
2885 int version_index;
2886
2887 /* If we aren't going to export this symbol, we don't need
2888 to worry about it. */
2889 if (h->dynindx == -1)
2890 return true;
2891
2892 t = ((struct bfd_elf_version_tree *)
2893 bfd_alloc (sinfo->output_bfd, sizeof *t));
2894 if (t == NULL)
2895 {
2896 sinfo->failed = true;
2897 return false;
2898 }
2899
2900 t->next = NULL;
2901 t->name = p;
2902 t->globals = NULL;
2903 t->locals = NULL;
2904 t->deps = NULL;
2905 t->name_indx = (unsigned int) -1;
2906 t->used = true;
2907
2908 version_index = 1;
2909 for (pp = &sinfo->verdefs; *pp != NULL; pp = &(*pp)->next)
2910 ++version_index;
2911 t->vernum = version_index;
2912
2913 *pp = t;
2914
2915 h->verinfo.vertree = t;
2916 }
2917 else if (t == NULL)
2918 {
2919 /* We could not find the version for a symbol when
2920 generating a shared archive. Return an error. */
2921 (*_bfd_error_handler)
2922 ("%s: undefined version name %s",
2923 bfd_get_filename (sinfo->output_bfd), h->root.root.string);
2924 bfd_set_error (bfd_error_bad_value);
2925 sinfo->failed = true;
2926 return false;
2927 }
2928
2929 if (hidden)
2930 h->elf_link_hash_flags |= ELF_LINK_HIDDEN;
2931 }
2932
2933 /* If we don't have a version for this symbol, see if we can find
2934 something. */
2935 if (h->verinfo.vertree == NULL && sinfo->verdefs != NULL)
2936 {
2937 struct bfd_elf_version_tree *t;
2938 struct bfd_elf_version_tree *deflt;
2939 struct bfd_elf_version_expr *d;
2940
2941 /* See if can find what version this symbol is in. If the
2942 symbol is supposed to eb local, then don't actually register
2943 it. */
2944 deflt = NULL;
2945 for (t = sinfo->verdefs; t != NULL; t = t->next)
2946 {
2947 if (t->globals != NULL)
2948 {
2949 for (d = t->globals; d != NULL; d = d->next)
2950 {
2951 if (fnmatch (d->match, h->root.root.string, 0) == 0)
2952 {
2953 h->verinfo.vertree = t;
2954 break;
2955 }
2956 }
2957
2958 if (d != NULL)
2959 break;
2960 }
2961
2962 if (t->locals != NULL)
2963 {
2964 for (d = t->locals; d != NULL; d = d->next)
2965 {
2966 if (d->match[0] == '*' && d->match[1] == '\0')
2967 deflt = t;
2968 else if (fnmatch (d->match, h->root.root.string, 0) == 0)
2969 {
2970 h->verinfo.vertree = t;
2971 if (h->dynindx != -1
2972 && info->shared
2973 && ! sinfo->export_dynamic
2974 && (h->elf_link_hash_flags
2975 & ELF_LINK_HASH_NEEDS_PLT) == 0)
2976 {
2977 sinfo->removed_dynamic = true;
2978 h->elf_link_hash_flags |= ELF_LINK_FORCED_LOCAL;
2979 h->dynindx = -1;
2980 /* FIXME: The name of the symbol has already
2981 been recorded in the dynamic string table
2982 section. */
2983 }
2984 break;
2985 }
2986 }
2987
2988 if (d != NULL)
2989 break;
2990 }
2991 }
2992
2993 if (deflt != NULL && h->verinfo.vertree == NULL)
2994 {
2995 h->verinfo.vertree = deflt;
2996 if (h->dynindx != -1
2997 && info->shared
2998 && ! sinfo->export_dynamic
2999 && (h->elf_link_hash_flags & ELF_LINK_HASH_NEEDS_PLT) == 0)
3000 {
3001 sinfo->removed_dynamic = true;
3002 h->elf_link_hash_flags |= ELF_LINK_FORCED_LOCAL;
3003 h->dynindx = -1;
3004 /* FIXME: The name of the symbol has already been
3005 recorded in the dynamic string table section. */
3006 }
3007 }
3008 }
3009
3010 return true;
3011 }
3012
3013 /* This function is used to renumber the dynamic symbols, if some of
3014 them are removed because they are marked as local. This is called
3015 via elf_link_hash_traverse. */
3016
3017 static boolean
3018 elf_link_renumber_dynsyms (h, data)
3019 struct elf_link_hash_entry *h;
3020 PTR data;
3021 {
3022 struct bfd_link_info *info = (struct bfd_link_info *) data;
3023
3024 if (h->dynindx != -1)
3025 {
3026 h->dynindx = elf_hash_table (info)->dynsymcount;
3027 ++elf_hash_table (info)->dynsymcount;
3028 }
3029
3030 return true;
3031 }
3032 \f
3033 /* Final phase of ELF linker. */
3034
3035 /* A structure we use to avoid passing large numbers of arguments. */
3036
3037 struct elf_final_link_info
3038 {
3039 /* General link information. */
3040 struct bfd_link_info *info;
3041 /* Output BFD. */
3042 bfd *output_bfd;
3043 /* Symbol string table. */
3044 struct bfd_strtab_hash *symstrtab;
3045 /* .dynsym section. */
3046 asection *dynsym_sec;
3047 /* .hash section. */
3048 asection *hash_sec;
3049 /* symbol version section (.gnu.version). */
3050 asection *symver_sec;
3051 /* Buffer large enough to hold contents of any section. */
3052 bfd_byte *contents;
3053 /* Buffer large enough to hold external relocs of any section. */
3054 PTR external_relocs;
3055 /* Buffer large enough to hold internal relocs of any section. */
3056 Elf_Internal_Rela *internal_relocs;
3057 /* Buffer large enough to hold external local symbols of any input
3058 BFD. */
3059 Elf_External_Sym *external_syms;
3060 /* Buffer large enough to hold internal local symbols of any input
3061 BFD. */
3062 Elf_Internal_Sym *internal_syms;
3063 /* Array large enough to hold a symbol index for each local symbol
3064 of any input BFD. */
3065 long *indices;
3066 /* Array large enough to hold a section pointer for each local
3067 symbol of any input BFD. */
3068 asection **sections;
3069 /* Buffer to hold swapped out symbols. */
3070 Elf_External_Sym *symbuf;
3071 /* Number of swapped out symbols in buffer. */
3072 size_t symbuf_count;
3073 /* Number of symbols which fit in symbuf. */
3074 size_t symbuf_size;
3075 };
3076
3077 static boolean elf_link_output_sym
3078 PARAMS ((struct elf_final_link_info *, const char *,
3079 Elf_Internal_Sym *, asection *));
3080 static boolean elf_link_flush_output_syms
3081 PARAMS ((struct elf_final_link_info *));
3082 static boolean elf_link_output_extsym
3083 PARAMS ((struct elf_link_hash_entry *, PTR));
3084 static boolean elf_link_input_bfd
3085 PARAMS ((struct elf_final_link_info *, bfd *));
3086 static boolean elf_reloc_link_order
3087 PARAMS ((bfd *, struct bfd_link_info *, asection *,
3088 struct bfd_link_order *));
3089
3090 /* This struct is used to pass information to elf_link_output_extsym. */
3091
3092 struct elf_outext_info
3093 {
3094 boolean failed;
3095 boolean localsyms;
3096 struct elf_final_link_info *finfo;
3097 };
3098
3099 /* Do the final step of an ELF link. */
3100
3101 boolean
3102 elf_bfd_final_link (abfd, info)
3103 bfd *abfd;
3104 struct bfd_link_info *info;
3105 {
3106 boolean dynamic;
3107 bfd *dynobj;
3108 struct elf_final_link_info finfo;
3109 register asection *o;
3110 register struct bfd_link_order *p;
3111 register bfd *sub;
3112 size_t max_contents_size;
3113 size_t max_external_reloc_size;
3114 size_t max_internal_reloc_count;
3115 size_t max_sym_count;
3116 file_ptr off;
3117 Elf_Internal_Sym elfsym;
3118 unsigned int i;
3119 Elf_Internal_Shdr *symtab_hdr;
3120 Elf_Internal_Shdr *symstrtab_hdr;
3121 struct elf_backend_data *bed = get_elf_backend_data (abfd);
3122 struct elf_outext_info eoinfo;
3123
3124 if (info->shared)
3125 abfd->flags |= DYNAMIC;
3126
3127 dynamic = elf_hash_table (info)->dynamic_sections_created;
3128 dynobj = elf_hash_table (info)->dynobj;
3129
3130 finfo.info = info;
3131 finfo.output_bfd = abfd;
3132 finfo.symstrtab = elf_stringtab_init ();
3133 if (finfo.symstrtab == NULL)
3134 return false;
3135
3136 if (! dynamic)
3137 {
3138 finfo.dynsym_sec = NULL;
3139 finfo.hash_sec = NULL;
3140 finfo.symver_sec = NULL;
3141 }
3142 else
3143 {
3144 finfo.dynsym_sec = bfd_get_section_by_name (dynobj, ".dynsym");
3145 finfo.hash_sec = bfd_get_section_by_name (dynobj, ".hash");
3146 BFD_ASSERT (finfo.dynsym_sec != NULL && finfo.hash_sec != NULL);
3147 finfo.symver_sec = bfd_get_section_by_name (dynobj, ".gnu.version");
3148 /* Note that it is OK if symver_sec is NULL. */
3149 }
3150
3151 finfo.contents = NULL;
3152 finfo.external_relocs = NULL;
3153 finfo.internal_relocs = NULL;
3154 finfo.external_syms = NULL;
3155 finfo.internal_syms = NULL;
3156 finfo.indices = NULL;
3157 finfo.sections = NULL;
3158 finfo.symbuf = NULL;
3159 finfo.symbuf_count = 0;
3160
3161 /* Count up the number of relocations we will output for each output
3162 section, so that we know the sizes of the reloc sections. We
3163 also figure out some maximum sizes. */
3164 max_contents_size = 0;
3165 max_external_reloc_size = 0;
3166 max_internal_reloc_count = 0;
3167 max_sym_count = 0;
3168 for (o = abfd->sections; o != (asection *) NULL; o = o->next)
3169 {
3170 o->reloc_count = 0;
3171
3172 for (p = o->link_order_head; p != NULL; p = p->next)
3173 {
3174 if (p->type == bfd_section_reloc_link_order
3175 || p->type == bfd_symbol_reloc_link_order)
3176 ++o->reloc_count;
3177 else if (p->type == bfd_indirect_link_order)
3178 {
3179 asection *sec;
3180
3181 sec = p->u.indirect.section;
3182
3183 /* Mark all sections which are to be included in the
3184 link. This will normally be every section. We need
3185 to do this so that we can identify any sections which
3186 the linker has decided to not include. */
3187 sec->linker_mark = true;
3188
3189 if (info->relocateable)
3190 o->reloc_count += sec->reloc_count;
3191
3192 if (sec->_raw_size > max_contents_size)
3193 max_contents_size = sec->_raw_size;
3194 if (sec->_cooked_size > max_contents_size)
3195 max_contents_size = sec->_cooked_size;
3196
3197 /* We are interested in just local symbols, not all
3198 symbols. */
3199 if (bfd_get_flavour (sec->owner) == bfd_target_elf_flavour
3200 && (sec->owner->flags & DYNAMIC) == 0)
3201 {
3202 size_t sym_count;
3203
3204 if (elf_bad_symtab (sec->owner))
3205 sym_count = (elf_tdata (sec->owner)->symtab_hdr.sh_size
3206 / sizeof (Elf_External_Sym));
3207 else
3208 sym_count = elf_tdata (sec->owner)->symtab_hdr.sh_info;
3209
3210 if (sym_count > max_sym_count)
3211 max_sym_count = sym_count;
3212
3213 if ((sec->flags & SEC_RELOC) != 0)
3214 {
3215 size_t ext_size;
3216
3217 ext_size = elf_section_data (sec)->rel_hdr.sh_size;
3218 if (ext_size > max_external_reloc_size)
3219 max_external_reloc_size = ext_size;
3220 if (sec->reloc_count > max_internal_reloc_count)
3221 max_internal_reloc_count = sec->reloc_count;
3222 }
3223 }
3224 }
3225 }
3226
3227 if (o->reloc_count > 0)
3228 o->flags |= SEC_RELOC;
3229 else
3230 {
3231 /* Explicitly clear the SEC_RELOC flag. The linker tends to
3232 set it (this is probably a bug) and if it is set
3233 assign_section_numbers will create a reloc section. */
3234 o->flags &=~ SEC_RELOC;
3235 }
3236
3237 /* If the SEC_ALLOC flag is not set, force the section VMA to
3238 zero. This is done in elf_fake_sections as well, but forcing
3239 the VMA to 0 here will ensure that relocs against these
3240 sections are handled correctly. */
3241 if ((o->flags & SEC_ALLOC) == 0
3242 && ! o->user_set_vma)
3243 o->vma = 0;
3244 }
3245
3246 /* Figure out the file positions for everything but the symbol table
3247 and the relocs. We set symcount to force assign_section_numbers
3248 to create a symbol table. */
3249 abfd->symcount = info->strip == strip_all ? 0 : 1;
3250 BFD_ASSERT (! abfd->output_has_begun);
3251 if (! _bfd_elf_compute_section_file_positions (abfd, info))
3252 goto error_return;
3253
3254 /* That created the reloc sections. Set their sizes, and assign
3255 them file positions, and allocate some buffers. */
3256 for (o = abfd->sections; o != NULL; o = o->next)
3257 {
3258 if ((o->flags & SEC_RELOC) != 0)
3259 {
3260 Elf_Internal_Shdr *rel_hdr;
3261 register struct elf_link_hash_entry **p, **pend;
3262
3263 rel_hdr = &elf_section_data (o)->rel_hdr;
3264
3265 rel_hdr->sh_size = rel_hdr->sh_entsize * o->reloc_count;
3266
3267 /* The contents field must last into write_object_contents,
3268 so we allocate it with bfd_alloc rather than malloc. */
3269 rel_hdr->contents = (PTR) bfd_alloc (abfd, rel_hdr->sh_size);
3270 if (rel_hdr->contents == NULL && rel_hdr->sh_size != 0)
3271 goto error_return;
3272
3273 p = ((struct elf_link_hash_entry **)
3274 bfd_malloc (o->reloc_count
3275 * sizeof (struct elf_link_hash_entry *)));
3276 if (p == NULL && o->reloc_count != 0)
3277 goto error_return;
3278 elf_section_data (o)->rel_hashes = p;
3279 pend = p + o->reloc_count;
3280 for (; p < pend; p++)
3281 *p = NULL;
3282
3283 /* Use the reloc_count field as an index when outputting the
3284 relocs. */
3285 o->reloc_count = 0;
3286 }
3287 }
3288
3289 _bfd_elf_assign_file_positions_for_relocs (abfd);
3290
3291 /* We have now assigned file positions for all the sections except
3292 .symtab and .strtab. We start the .symtab section at the current
3293 file position, and write directly to it. We build the .strtab
3294 section in memory. */
3295 abfd->symcount = 0;
3296 symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
3297 /* sh_name is set in prep_headers. */
3298 symtab_hdr->sh_type = SHT_SYMTAB;
3299 symtab_hdr->sh_flags = 0;
3300 symtab_hdr->sh_addr = 0;
3301 symtab_hdr->sh_size = 0;
3302 symtab_hdr->sh_entsize = sizeof (Elf_External_Sym);
3303 /* sh_link is set in assign_section_numbers. */
3304 /* sh_info is set below. */
3305 /* sh_offset is set just below. */
3306 symtab_hdr->sh_addralign = 4; /* FIXME: system dependent? */
3307
3308 off = elf_tdata (abfd)->next_file_pos;
3309 off = _bfd_elf_assign_file_position_for_section (symtab_hdr, off, true);
3310
3311 /* Note that at this point elf_tdata (abfd)->next_file_pos is
3312 incorrect. We do not yet know the size of the .symtab section.
3313 We correct next_file_pos below, after we do know the size. */
3314
3315 /* Allocate a buffer to hold swapped out symbols. This is to avoid
3316 continuously seeking to the right position in the file. */
3317 if (! info->keep_memory || max_sym_count < 20)
3318 finfo.symbuf_size = 20;
3319 else
3320 finfo.symbuf_size = max_sym_count;
3321 finfo.symbuf = ((Elf_External_Sym *)
3322 bfd_malloc (finfo.symbuf_size * sizeof (Elf_External_Sym)));
3323 if (finfo.symbuf == NULL)
3324 goto error_return;
3325
3326 /* Start writing out the symbol table. The first symbol is always a
3327 dummy symbol. */
3328 if (info->strip != strip_all || info->relocateable)
3329 {
3330 elfsym.st_value = 0;
3331 elfsym.st_size = 0;
3332 elfsym.st_info = 0;
3333 elfsym.st_other = 0;
3334 elfsym.st_shndx = SHN_UNDEF;
3335 if (! elf_link_output_sym (&finfo, (const char *) NULL,
3336 &elfsym, bfd_und_section_ptr))
3337 goto error_return;
3338 }
3339
3340 #if 0
3341 /* Some standard ELF linkers do this, but we don't because it causes
3342 bootstrap comparison failures. */
3343 /* Output a file symbol for the output file as the second symbol.
3344 We output this even if we are discarding local symbols, although
3345 I'm not sure if this is correct. */
3346 elfsym.st_value = 0;
3347 elfsym.st_size = 0;
3348 elfsym.st_info = ELF_ST_INFO (STB_LOCAL, STT_FILE);
3349 elfsym.st_other = 0;
3350 elfsym.st_shndx = SHN_ABS;
3351 if (! elf_link_output_sym (&finfo, bfd_get_filename (abfd),
3352 &elfsym, bfd_abs_section_ptr))
3353 goto error_return;
3354 #endif
3355
3356 /* Output a symbol for each section. We output these even if we are
3357 discarding local symbols, since they are used for relocs. These
3358 symbols have no names. We store the index of each one in the
3359 index field of the section, so that we can find it again when
3360 outputting relocs. */
3361 if (info->strip != strip_all || info->relocateable)
3362 {
3363 elfsym.st_size = 0;
3364 elfsym.st_info = ELF_ST_INFO (STB_LOCAL, STT_SECTION);
3365 elfsym.st_other = 0;
3366 for (i = 1; i < elf_elfheader (abfd)->e_shnum; i++)
3367 {
3368 o = section_from_elf_index (abfd, i);
3369 if (o != NULL)
3370 o->target_index = abfd->symcount;
3371 elfsym.st_shndx = i;
3372 if (info->relocateable || o == NULL)
3373 elfsym.st_value = 0;
3374 else
3375 elfsym.st_value = o->vma;
3376 if (! elf_link_output_sym (&finfo, (const char *) NULL,
3377 &elfsym, o))
3378 goto error_return;
3379 }
3380 }
3381
3382 /* Allocate some memory to hold information read in from the input
3383 files. */
3384 finfo.contents = (bfd_byte *) bfd_malloc (max_contents_size);
3385 finfo.external_relocs = (PTR) bfd_malloc (max_external_reloc_size);
3386 finfo.internal_relocs = ((Elf_Internal_Rela *)
3387 bfd_malloc (max_internal_reloc_count
3388 * sizeof (Elf_Internal_Rela)));
3389 finfo.external_syms = ((Elf_External_Sym *)
3390 bfd_malloc (max_sym_count
3391 * sizeof (Elf_External_Sym)));
3392 finfo.internal_syms = ((Elf_Internal_Sym *)
3393 bfd_malloc (max_sym_count
3394 * sizeof (Elf_Internal_Sym)));
3395 finfo.indices = (long *) bfd_malloc (max_sym_count * sizeof (long));
3396 finfo.sections = ((asection **)
3397 bfd_malloc (max_sym_count * sizeof (asection *)));
3398 if ((finfo.contents == NULL && max_contents_size != 0)
3399 || (finfo.external_relocs == NULL && max_external_reloc_size != 0)
3400 || (finfo.internal_relocs == NULL && max_internal_reloc_count != 0)
3401 || (finfo.external_syms == NULL && max_sym_count != 0)
3402 || (finfo.internal_syms == NULL && max_sym_count != 0)
3403 || (finfo.indices == NULL && max_sym_count != 0)
3404 || (finfo.sections == NULL && max_sym_count != 0))
3405 goto error_return;
3406
3407 /* Since ELF permits relocations to be against local symbols, we
3408 must have the local symbols available when we do the relocations.
3409 Since we would rather only read the local symbols once, and we
3410 would rather not keep them in memory, we handle all the
3411 relocations for a single input file at the same time.
3412
3413 Unfortunately, there is no way to know the total number of local
3414 symbols until we have seen all of them, and the local symbol
3415 indices precede the global symbol indices. This means that when
3416 we are generating relocateable output, and we see a reloc against
3417 a global symbol, we can not know the symbol index until we have
3418 finished examining all the local symbols to see which ones we are
3419 going to output. To deal with this, we keep the relocations in
3420 memory, and don't output them until the end of the link. This is
3421 an unfortunate waste of memory, but I don't see a good way around
3422 it. Fortunately, it only happens when performing a relocateable
3423 link, which is not the common case. FIXME: If keep_memory is set
3424 we could write the relocs out and then read them again; I don't
3425 know how bad the memory loss will be. */
3426
3427 for (sub = info->input_bfds; sub != NULL; sub = sub->next)
3428 sub->output_has_begun = false;
3429 for (o = abfd->sections; o != NULL; o = o->next)
3430 {
3431 for (p = o->link_order_head; p != NULL; p = p->next)
3432 {
3433 if (p->type == bfd_indirect_link_order
3434 && (bfd_get_flavour (p->u.indirect.section->owner)
3435 == bfd_target_elf_flavour))
3436 {
3437 sub = p->u.indirect.section->owner;
3438 if (! sub->output_has_begun)
3439 {
3440 if (! elf_link_input_bfd (&finfo, sub))
3441 goto error_return;
3442 sub->output_has_begun = true;
3443 }
3444 }
3445 else if (p->type == bfd_section_reloc_link_order
3446 || p->type == bfd_symbol_reloc_link_order)
3447 {
3448 if (! elf_reloc_link_order (abfd, info, o, p))
3449 goto error_return;
3450 }
3451 else
3452 {
3453 if (! _bfd_default_link_order (abfd, info, o, p))
3454 goto error_return;
3455 }
3456 }
3457 }
3458
3459 /* That wrote out all the local symbols. Finish up the symbol table
3460 with the global symbols. */
3461
3462 if (info->strip != strip_all && info->shared)
3463 {
3464 /* Output any global symbols that got converted to local in a
3465 version script. We do this in a separate step since ELF
3466 requires all local symbols to appear prior to any global
3467 symbols. FIXME: We should only do this if some global
3468 symbols were, in fact, converted to become local. FIXME:
3469 Will this work correctly with the Irix 5 linker? */
3470 eoinfo.failed = false;
3471 eoinfo.finfo = &finfo;
3472 eoinfo.localsyms = true;
3473 elf_link_hash_traverse (elf_hash_table (info), elf_link_output_extsym,
3474 (PTR) &eoinfo);
3475 if (eoinfo.failed)
3476 return false;
3477 }
3478
3479 /* The sh_info field records the index of the first non local
3480 symbol. */
3481 symtab_hdr->sh_info = abfd->symcount;
3482 if (dynamic)
3483 elf_section_data (finfo.dynsym_sec->output_section)->this_hdr.sh_info = 1;
3484
3485 /* We get the global symbols from the hash table. */
3486 eoinfo.failed = false;
3487 eoinfo.localsyms = false;
3488 eoinfo.finfo = &finfo;
3489 elf_link_hash_traverse (elf_hash_table (info), elf_link_output_extsym,
3490 (PTR) &eoinfo);
3491 if (eoinfo.failed)
3492 return false;
3493
3494 /* Flush all symbols to the file. */
3495 if (! elf_link_flush_output_syms (&finfo))
3496 return false;
3497
3498 /* Now we know the size of the symtab section. */
3499 off += symtab_hdr->sh_size;
3500
3501 /* Finish up and write out the symbol string table (.strtab)
3502 section. */
3503 symstrtab_hdr = &elf_tdata (abfd)->strtab_hdr;
3504 /* sh_name was set in prep_headers. */
3505 symstrtab_hdr->sh_type = SHT_STRTAB;
3506 symstrtab_hdr->sh_flags = 0;
3507 symstrtab_hdr->sh_addr = 0;
3508 symstrtab_hdr->sh_size = _bfd_stringtab_size (finfo.symstrtab);
3509 symstrtab_hdr->sh_entsize = 0;
3510 symstrtab_hdr->sh_link = 0;
3511 symstrtab_hdr->sh_info = 0;
3512 /* sh_offset is set just below. */
3513 symstrtab_hdr->sh_addralign = 1;
3514
3515 off = _bfd_elf_assign_file_position_for_section (symstrtab_hdr, off, true);
3516 elf_tdata (abfd)->next_file_pos = off;
3517
3518 if (abfd->symcount > 0)
3519 {
3520 if (bfd_seek (abfd, symstrtab_hdr->sh_offset, SEEK_SET) != 0
3521 || ! _bfd_stringtab_emit (abfd, finfo.symstrtab))
3522 return false;
3523 }
3524
3525 /* Adjust the relocs to have the correct symbol indices. */
3526 for (o = abfd->sections; o != NULL; o = o->next)
3527 {
3528 struct elf_link_hash_entry **rel_hash;
3529 Elf_Internal_Shdr *rel_hdr;
3530
3531 if ((o->flags & SEC_RELOC) == 0)
3532 continue;
3533
3534 rel_hash = elf_section_data (o)->rel_hashes;
3535 rel_hdr = &elf_section_data (o)->rel_hdr;
3536 for (i = 0; i < o->reloc_count; i++, rel_hash++)
3537 {
3538 if (*rel_hash == NULL)
3539 continue;
3540
3541 BFD_ASSERT ((*rel_hash)->indx >= 0);
3542
3543 if (rel_hdr->sh_entsize == sizeof (Elf_External_Rel))
3544 {
3545 Elf_External_Rel *erel;
3546 Elf_Internal_Rel irel;
3547
3548 erel = (Elf_External_Rel *) rel_hdr->contents + i;
3549 elf_swap_reloc_in (abfd, erel, &irel);
3550 irel.r_info = ELF_R_INFO ((*rel_hash)->indx,
3551 ELF_R_TYPE (irel.r_info));
3552 elf_swap_reloc_out (abfd, &irel, erel);
3553 }
3554 else
3555 {
3556 Elf_External_Rela *erela;
3557 Elf_Internal_Rela irela;
3558
3559 BFD_ASSERT (rel_hdr->sh_entsize
3560 == sizeof (Elf_External_Rela));
3561
3562 erela = (Elf_External_Rela *) rel_hdr->contents + i;
3563 elf_swap_reloca_in (abfd, erela, &irela);
3564 irela.r_info = ELF_R_INFO ((*rel_hash)->indx,
3565 ELF_R_TYPE (irela.r_info));
3566 elf_swap_reloca_out (abfd, &irela, erela);
3567 }
3568 }
3569
3570 /* Set the reloc_count field to 0 to prevent write_relocs from
3571 trying to swap the relocs out itself. */
3572 o->reloc_count = 0;
3573 }
3574
3575 /* If we are linking against a dynamic object, or generating a
3576 shared library, finish up the dynamic linking information. */
3577 if (dynamic)
3578 {
3579 Elf_External_Dyn *dyncon, *dynconend;
3580
3581 /* Fix up .dynamic entries. */
3582 o = bfd_get_section_by_name (dynobj, ".dynamic");
3583 BFD_ASSERT (o != NULL);
3584
3585 dyncon = (Elf_External_Dyn *) o->contents;
3586 dynconend = (Elf_External_Dyn *) (o->contents + o->_raw_size);
3587 for (; dyncon < dynconend; dyncon++)
3588 {
3589 Elf_Internal_Dyn dyn;
3590 const char *name;
3591 unsigned int type;
3592
3593 elf_swap_dyn_in (dynobj, dyncon, &dyn);
3594
3595 switch (dyn.d_tag)
3596 {
3597 default:
3598 break;
3599
3600 /* SVR4 linkers seem to set DT_INIT and DT_FINI based on
3601 magic _init and _fini symbols. This is pretty ugly,
3602 but we are compatible. */
3603 case DT_INIT:
3604 name = "_init";
3605 goto get_sym;
3606 case DT_FINI:
3607 name = "_fini";
3608 get_sym:
3609 {
3610 struct elf_link_hash_entry *h;
3611
3612 h = elf_link_hash_lookup (elf_hash_table (info), name,
3613 false, false, true);
3614 if (h != NULL
3615 && (h->root.type == bfd_link_hash_defined
3616 || h->root.type == bfd_link_hash_defweak))
3617 {
3618 dyn.d_un.d_val = h->root.u.def.value;
3619 o = h->root.u.def.section;
3620 if (o->output_section != NULL)
3621 dyn.d_un.d_val += (o->output_section->vma
3622 + o->output_offset);
3623 else
3624 {
3625 /* The symbol is imported from another shared
3626 library and does not apply to this one. */
3627 dyn.d_un.d_val = 0;
3628 }
3629
3630 elf_swap_dyn_out (dynobj, &dyn, dyncon);
3631 }
3632 }
3633 break;
3634
3635 case DT_HASH:
3636 name = ".hash";
3637 goto get_vma;
3638 case DT_STRTAB:
3639 name = ".dynstr";
3640 goto get_vma;
3641 case DT_SYMTAB:
3642 name = ".dynsym";
3643 goto get_vma;
3644 case DT_VERDEF:
3645 name = ".gnu.version_d";
3646 goto get_vma;
3647 case DT_VERNEED:
3648 name = ".gnu.version_r";
3649 goto get_vma;
3650 case DT_VERSYM:
3651 name = ".gnu.version";
3652 get_vma:
3653 o = bfd_get_section_by_name (abfd, name);
3654 BFD_ASSERT (o != NULL);
3655 dyn.d_un.d_ptr = o->vma;
3656 elf_swap_dyn_out (dynobj, &dyn, dyncon);
3657 break;
3658
3659 case DT_REL:
3660 case DT_RELA:
3661 case DT_RELSZ:
3662 case DT_RELASZ:
3663 if (dyn.d_tag == DT_REL || dyn.d_tag == DT_RELSZ)
3664 type = SHT_REL;
3665 else
3666 type = SHT_RELA;
3667 dyn.d_un.d_val = 0;
3668 for (i = 1; i < elf_elfheader (abfd)->e_shnum; i++)
3669 {
3670 Elf_Internal_Shdr *hdr;
3671
3672 hdr = elf_elfsections (abfd)[i];
3673 if (hdr->sh_type == type
3674 && (hdr->sh_flags & SHF_ALLOC) != 0)
3675 {
3676 if (dyn.d_tag == DT_RELSZ || dyn.d_tag == DT_RELASZ)
3677 dyn.d_un.d_val += hdr->sh_size;
3678 else
3679 {
3680 if (dyn.d_un.d_val == 0
3681 || hdr->sh_addr < dyn.d_un.d_val)
3682 dyn.d_un.d_val = hdr->sh_addr;
3683 }
3684 }
3685 }
3686 elf_swap_dyn_out (dynobj, &dyn, dyncon);
3687 break;
3688 }
3689 }
3690 }
3691
3692 /* If we have created any dynamic sections, then output them. */
3693 if (dynobj != NULL)
3694 {
3695 if (! (*bed->elf_backend_finish_dynamic_sections) (abfd, info))
3696 goto error_return;
3697
3698 for (o = dynobj->sections; o != NULL; o = o->next)
3699 {
3700 if ((o->flags & SEC_HAS_CONTENTS) == 0
3701 || o->_raw_size == 0)
3702 continue;
3703 if ((o->flags & SEC_LINKER_CREATED) == 0)
3704 {
3705 /* At this point, we are only interested in sections
3706 created by elf_link_create_dynamic_sections. */
3707 continue;
3708 }
3709 if ((elf_section_data (o->output_section)->this_hdr.sh_type
3710 != SHT_STRTAB)
3711 || strcmp (bfd_get_section_name (abfd, o), ".dynstr") != 0)
3712 {
3713 if (! bfd_set_section_contents (abfd, o->output_section,
3714 o->contents, o->output_offset,
3715 o->_raw_size))
3716 goto error_return;
3717 }
3718 else
3719 {
3720 file_ptr off;
3721
3722 /* The contents of the .dynstr section are actually in a
3723 stringtab. */
3724 off = elf_section_data (o->output_section)->this_hdr.sh_offset;
3725 if (bfd_seek (abfd, off, SEEK_SET) != 0
3726 || ! _bfd_stringtab_emit (abfd,
3727 elf_hash_table (info)->dynstr))
3728 goto error_return;
3729 }
3730 }
3731 }
3732
3733 /* If we have optimized stabs strings, output them. */
3734 if (elf_hash_table (info)->stab_info != NULL)
3735 {
3736 if (! _bfd_write_stab_strings (abfd, &elf_hash_table (info)->stab_info))
3737 goto error_return;
3738 }
3739
3740 if (finfo.symstrtab != NULL)
3741 _bfd_stringtab_free (finfo.symstrtab);
3742 if (finfo.contents != NULL)
3743 free (finfo.contents);
3744 if (finfo.external_relocs != NULL)
3745 free (finfo.external_relocs);
3746 if (finfo.internal_relocs != NULL)
3747 free (finfo.internal_relocs);
3748 if (finfo.external_syms != NULL)
3749 free (finfo.external_syms);
3750 if (finfo.internal_syms != NULL)
3751 free (finfo.internal_syms);
3752 if (finfo.indices != NULL)
3753 free (finfo.indices);
3754 if (finfo.sections != NULL)
3755 free (finfo.sections);
3756 if (finfo.symbuf != NULL)
3757 free (finfo.symbuf);
3758 for (o = abfd->sections; o != NULL; o = o->next)
3759 {
3760 if ((o->flags & SEC_RELOC) != 0
3761 && elf_section_data (o)->rel_hashes != NULL)
3762 free (elf_section_data (o)->rel_hashes);
3763 }
3764
3765 elf_tdata (abfd)->linker = true;
3766
3767 return true;
3768
3769 error_return:
3770 if (finfo.symstrtab != NULL)
3771 _bfd_stringtab_free (finfo.symstrtab);
3772 if (finfo.contents != NULL)
3773 free (finfo.contents);
3774 if (finfo.external_relocs != NULL)
3775 free (finfo.external_relocs);
3776 if (finfo.internal_relocs != NULL)
3777 free (finfo.internal_relocs);
3778 if (finfo.external_syms != NULL)
3779 free (finfo.external_syms);
3780 if (finfo.internal_syms != NULL)
3781 free (finfo.internal_syms);
3782 if (finfo.indices != NULL)
3783 free (finfo.indices);
3784 if (finfo.sections != NULL)
3785 free (finfo.sections);
3786 if (finfo.symbuf != NULL)
3787 free (finfo.symbuf);
3788 for (o = abfd->sections; o != NULL; o = o->next)
3789 {
3790 if ((o->flags & SEC_RELOC) != 0
3791 && elf_section_data (o)->rel_hashes != NULL)
3792 free (elf_section_data (o)->rel_hashes);
3793 }
3794
3795 return false;
3796 }
3797
3798 /* Add a symbol to the output symbol table. */
3799
3800 static boolean
3801 elf_link_output_sym (finfo, name, elfsym, input_sec)
3802 struct elf_final_link_info *finfo;
3803 const char *name;
3804 Elf_Internal_Sym *elfsym;
3805 asection *input_sec;
3806 {
3807 boolean (*output_symbol_hook) PARAMS ((bfd *,
3808 struct bfd_link_info *info,
3809 const char *,
3810 Elf_Internal_Sym *,
3811 asection *));
3812
3813 output_symbol_hook = get_elf_backend_data (finfo->output_bfd)->
3814 elf_backend_link_output_symbol_hook;
3815 if (output_symbol_hook != NULL)
3816 {
3817 if (! ((*output_symbol_hook)
3818 (finfo->output_bfd, finfo->info, name, elfsym, input_sec)))
3819 return false;
3820 }
3821
3822 if (name == (const char *) NULL || *name == '\0')
3823 elfsym->st_name = 0;
3824 else
3825 {
3826 elfsym->st_name = (unsigned long) _bfd_stringtab_add (finfo->symstrtab,
3827 name, true,
3828 false);
3829 if (elfsym->st_name == (unsigned long) -1)
3830 return false;
3831 }
3832
3833 if (finfo->symbuf_count >= finfo->symbuf_size)
3834 {
3835 if (! elf_link_flush_output_syms (finfo))
3836 return false;
3837 }
3838
3839 elf_swap_symbol_out (finfo->output_bfd, elfsym,
3840 (PTR) (finfo->symbuf + finfo->symbuf_count));
3841 ++finfo->symbuf_count;
3842
3843 ++finfo->output_bfd->symcount;
3844
3845 return true;
3846 }
3847
3848 /* Flush the output symbols to the file. */
3849
3850 static boolean
3851 elf_link_flush_output_syms (finfo)
3852 struct elf_final_link_info *finfo;
3853 {
3854 if (finfo->symbuf_count > 0)
3855 {
3856 Elf_Internal_Shdr *symtab;
3857
3858 symtab = &elf_tdata (finfo->output_bfd)->symtab_hdr;
3859
3860 if (bfd_seek (finfo->output_bfd, symtab->sh_offset + symtab->sh_size,
3861 SEEK_SET) != 0
3862 || (bfd_write ((PTR) finfo->symbuf, finfo->symbuf_count,
3863 sizeof (Elf_External_Sym), finfo->output_bfd)
3864 != finfo->symbuf_count * sizeof (Elf_External_Sym)))
3865 return false;
3866
3867 symtab->sh_size += finfo->symbuf_count * sizeof (Elf_External_Sym);
3868
3869 finfo->symbuf_count = 0;
3870 }
3871
3872 return true;
3873 }
3874
3875 /* Add an external symbol to the symbol table. This is called from
3876 the hash table traversal routine. When generating a shared object,
3877 we go through the symbol table twice. The first time we output
3878 anything that might have been forced to local scope in a version
3879 script. The second time we output the symbols that are still
3880 global symbols. */
3881
3882 static boolean
3883 elf_link_output_extsym (h, data)
3884 struct elf_link_hash_entry *h;
3885 PTR data;
3886 {
3887 struct elf_outext_info *eoinfo = (struct elf_outext_info *) data;
3888 struct elf_final_link_info *finfo = eoinfo->finfo;
3889 boolean strip;
3890 Elf_Internal_Sym sym;
3891 asection *input_sec;
3892
3893 /* Decide whether to output this symbol in this pass. */
3894 if (eoinfo->localsyms)
3895 {
3896 if ((h->elf_link_hash_flags & ELF_LINK_FORCED_LOCAL) == 0)
3897 return true;
3898 }
3899 else
3900 {
3901 if ((h->elf_link_hash_flags & ELF_LINK_FORCED_LOCAL) != 0)
3902 return true;
3903 }
3904
3905 /* If we are not creating a shared library, and this symbol is
3906 referenced by a shared library but is not defined anywhere, then
3907 warn that it is undefined. If we do not do this, the runtime
3908 linker will complain that the symbol is undefined when the
3909 program is run. We don't have to worry about symbols that are
3910 referenced by regular files, because we will already have issued
3911 warnings for them. */
3912 if (! finfo->info->relocateable
3913 && ! finfo->info->shared
3914 && h->root.type == bfd_link_hash_undefined
3915 && (h->elf_link_hash_flags & ELF_LINK_HASH_REF_DYNAMIC) != 0
3916 && (h->elf_link_hash_flags & ELF_LINK_HASH_REF_REGULAR) == 0)
3917 {
3918 if (! ((*finfo->info->callbacks->undefined_symbol)
3919 (finfo->info, h->root.root.string, h->root.u.undef.abfd,
3920 (asection *) NULL, 0)))
3921 {
3922 eoinfo->failed = true;
3923 return false;
3924 }
3925 }
3926
3927 /* We don't want to output symbols that have never been mentioned by
3928 a regular file, or that we have been told to strip. However, if
3929 h->indx is set to -2, the symbol is used by a reloc and we must
3930 output it. */
3931 if (h->indx == -2)
3932 strip = false;
3933 else if (((h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) != 0
3934 || (h->elf_link_hash_flags & ELF_LINK_HASH_REF_DYNAMIC) != 0)
3935 && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0
3936 && (h->elf_link_hash_flags & ELF_LINK_HASH_REF_REGULAR) == 0)
3937 strip = true;
3938 else if (finfo->info->strip == strip_all
3939 || (finfo->info->strip == strip_some
3940 && bfd_hash_lookup (finfo->info->keep_hash,
3941 h->root.root.string,
3942 false, false) == NULL))
3943 strip = true;
3944 else
3945 strip = false;
3946
3947 /* If we're stripping it, and it's not a dynamic symbol, there's
3948 nothing else to do. */
3949 if (strip && h->dynindx == -1)
3950 return true;
3951
3952 sym.st_value = 0;
3953 sym.st_size = h->size;
3954 sym.st_other = h->other;
3955 if ((h->elf_link_hash_flags & ELF_LINK_FORCED_LOCAL) != 0)
3956 sym.st_info = ELF_ST_INFO (STB_LOCAL, h->type);
3957 else if (h->root.type == bfd_link_hash_undefweak
3958 || h->root.type == bfd_link_hash_defweak)
3959 sym.st_info = ELF_ST_INFO (STB_WEAK, h->type);
3960 else
3961 sym.st_info = ELF_ST_INFO (STB_GLOBAL, h->type);
3962
3963 switch (h->root.type)
3964 {
3965 default:
3966 case bfd_link_hash_new:
3967 abort ();
3968 return false;
3969
3970 case bfd_link_hash_undefined:
3971 input_sec = bfd_und_section_ptr;
3972 sym.st_shndx = SHN_UNDEF;
3973 break;
3974
3975 case bfd_link_hash_undefweak:
3976 input_sec = bfd_und_section_ptr;
3977 sym.st_shndx = SHN_UNDEF;
3978 break;
3979
3980 case bfd_link_hash_defined:
3981 case bfd_link_hash_defweak:
3982 {
3983 input_sec = h->root.u.def.section;
3984 if (input_sec->output_section != NULL)
3985 {
3986 sym.st_shndx =
3987 _bfd_elf_section_from_bfd_section (finfo->output_bfd,
3988 input_sec->output_section);
3989 if (sym.st_shndx == (unsigned short) -1)
3990 {
3991 eoinfo->failed = true;
3992 return false;
3993 }
3994
3995 /* ELF symbols in relocateable files are section relative,
3996 but in nonrelocateable files they are virtual
3997 addresses. */
3998 sym.st_value = h->root.u.def.value + input_sec->output_offset;
3999 if (! finfo->info->relocateable)
4000 sym.st_value += input_sec->output_section->vma;
4001 }
4002 else
4003 {
4004 BFD_ASSERT (input_sec->owner == NULL
4005 || (input_sec->owner->flags & DYNAMIC) != 0);
4006 sym.st_shndx = SHN_UNDEF;
4007 input_sec = bfd_und_section_ptr;
4008 }
4009 }
4010 break;
4011
4012 case bfd_link_hash_common:
4013 input_sec = bfd_com_section_ptr;
4014 sym.st_shndx = SHN_COMMON;
4015 sym.st_value = 1 << h->root.u.c.p->alignment_power;
4016 break;
4017
4018 case bfd_link_hash_indirect:
4019 /* These symbols are created by symbol versioning. They point
4020 to the decorated version of the name. For example, if the
4021 symbol foo@@GNU_1.2 is the default, which should be used when
4022 foo is used with no version, then we add an indirect symbol
4023 foo which points to foo@@GNU_1.2. We ignore these symbols,
4024 since the indirected symbol is already in the hash table. If
4025 the indirect symbol is non-ELF, fall through and output it. */
4026 if ((h->elf_link_hash_flags & ELF_LINK_NON_ELF) == 0)
4027 return true;
4028
4029 /* Fall through. */
4030 case bfd_link_hash_warning:
4031 /* We can't represent these symbols in ELF, although a warning
4032 symbol may have come from a .gnu.warning.SYMBOL section. We
4033 just put the target symbol in the hash table. If the target
4034 symbol does not really exist, don't do anything. */
4035 if (h->root.u.i.link->type == bfd_link_hash_new)
4036 return true;
4037 return (elf_link_output_extsym
4038 ((struct elf_link_hash_entry *) h->root.u.i.link, data));
4039 }
4040
4041 /* If this symbol should be put in the .dynsym section, then put it
4042 there now. We have already know the symbol index. We also fill
4043 in the entry in the .hash section. */
4044 if (h->dynindx != -1
4045 && elf_hash_table (finfo->info)->dynamic_sections_created)
4046 {
4047 struct elf_backend_data *bed;
4048 char *p, *copy;
4049 const char *name;
4050 size_t bucketcount;
4051 size_t bucket;
4052 bfd_byte *bucketpos;
4053 bfd_vma chain;
4054
4055 sym.st_name = h->dynstr_index;
4056
4057 /* Give the processor backend a chance to tweak the symbol
4058 value, and also to finish up anything that needs to be done
4059 for this symbol. */
4060 bed = get_elf_backend_data (finfo->output_bfd);
4061 if (! ((*bed->elf_backend_finish_dynamic_symbol)
4062 (finfo->output_bfd, finfo->info, h, &sym)))
4063 {
4064 eoinfo->failed = true;
4065 return false;
4066 }
4067
4068 elf_swap_symbol_out (finfo->output_bfd, &sym,
4069 (PTR) (((Elf_External_Sym *)
4070 finfo->dynsym_sec->contents)
4071 + h->dynindx));
4072
4073 /* We didn't include the version string in the dynamic string
4074 table, so we must not consider it in the hash table. */
4075 name = h->root.root.string;
4076 p = strchr (name, ELF_VER_CHR);
4077 if (p == NULL)
4078 copy = NULL;
4079 else
4080 {
4081 copy = bfd_alloc (finfo->output_bfd, p - name + 1);
4082 strncpy (copy, name, p - name);
4083 copy[p - name] = '\0';
4084 name = copy;
4085 }
4086
4087 bucketcount = elf_hash_table (finfo->info)->bucketcount;
4088 bucket = bfd_elf_hash ((const unsigned char *) name) % bucketcount;
4089 bucketpos = ((bfd_byte *) finfo->hash_sec->contents
4090 + (bucket + 2) * (ARCH_SIZE / 8));
4091 chain = get_word (finfo->output_bfd, bucketpos);
4092 put_word (finfo->output_bfd, h->dynindx, bucketpos);
4093 put_word (finfo->output_bfd, chain,
4094 ((bfd_byte *) finfo->hash_sec->contents
4095 + (bucketcount + 2 + h->dynindx) * (ARCH_SIZE / 8)));
4096
4097 if (copy != NULL)
4098 bfd_release (finfo->output_bfd, copy);
4099
4100 if (finfo->symver_sec != NULL && finfo->symver_sec->contents != NULL)
4101 {
4102 Elf_Internal_Versym iversym;
4103
4104 if ((h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0)
4105 {
4106 if (h->verinfo.verdef == NULL)
4107 iversym.vs_vers = 0;
4108 else
4109 iversym.vs_vers = h->verinfo.verdef->vd_exp_refno + 1;
4110 }
4111 else
4112 {
4113 if (h->verinfo.vertree == NULL)
4114 iversym.vs_vers = 1;
4115 else
4116 iversym.vs_vers = h->verinfo.vertree->vernum + 1;
4117 }
4118
4119 if ((h->elf_link_hash_flags & ELF_LINK_HIDDEN) != 0)
4120 iversym.vs_vers |= VERSYM_HIDDEN;
4121
4122 _bfd_elf_swap_versym_out (finfo->output_bfd, &iversym,
4123 (((Elf_External_Versym *)
4124 finfo->symver_sec->contents)
4125 + h->dynindx));
4126 }
4127 }
4128
4129 /* If we're stripping it, then it was just a dynamic symbol, and
4130 there's nothing else to do. */
4131 if (strip)
4132 return true;
4133
4134 h->indx = finfo->output_bfd->symcount;
4135
4136 if (! elf_link_output_sym (finfo, h->root.root.string, &sym, input_sec))
4137 {
4138 eoinfo->failed = true;
4139 return false;
4140 }
4141
4142 return true;
4143 }
4144
4145 /* Link an input file into the linker output file. This function
4146 handles all the sections and relocations of the input file at once.
4147 This is so that we only have to read the local symbols once, and
4148 don't have to keep them in memory. */
4149
4150 static boolean
4151 elf_link_input_bfd (finfo, input_bfd)
4152 struct elf_final_link_info *finfo;
4153 bfd *input_bfd;
4154 {
4155 boolean (*relocate_section) PARAMS ((bfd *, struct bfd_link_info *,
4156 bfd *, asection *, bfd_byte *,
4157 Elf_Internal_Rela *,
4158 Elf_Internal_Sym *, asection **));
4159 bfd *output_bfd;
4160 Elf_Internal_Shdr *symtab_hdr;
4161 size_t locsymcount;
4162 size_t extsymoff;
4163 Elf_External_Sym *external_syms;
4164 Elf_External_Sym *esym;
4165 Elf_External_Sym *esymend;
4166 Elf_Internal_Sym *isym;
4167 long *pindex;
4168 asection **ppsection;
4169 asection *o;
4170
4171 output_bfd = finfo->output_bfd;
4172 relocate_section =
4173 get_elf_backend_data (output_bfd)->elf_backend_relocate_section;
4174
4175 /* If this is a dynamic object, we don't want to do anything here:
4176 we don't want the local symbols, and we don't want the section
4177 contents. */
4178 if ((input_bfd->flags & DYNAMIC) != 0)
4179 return true;
4180
4181 symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
4182 if (elf_bad_symtab (input_bfd))
4183 {
4184 locsymcount = symtab_hdr->sh_size / sizeof (Elf_External_Sym);
4185 extsymoff = 0;
4186 }
4187 else
4188 {
4189 locsymcount = symtab_hdr->sh_info;
4190 extsymoff = symtab_hdr->sh_info;
4191 }
4192
4193 /* Read the local symbols. */
4194 if (symtab_hdr->contents != NULL)
4195 external_syms = (Elf_External_Sym *) symtab_hdr->contents;
4196 else if (locsymcount == 0)
4197 external_syms = NULL;
4198 else
4199 {
4200 external_syms = finfo->external_syms;
4201 if (bfd_seek (input_bfd, symtab_hdr->sh_offset, SEEK_SET) != 0
4202 || (bfd_read (external_syms, sizeof (Elf_External_Sym),
4203 locsymcount, input_bfd)
4204 != locsymcount * sizeof (Elf_External_Sym)))
4205 return false;
4206 }
4207
4208 /* Swap in the local symbols and write out the ones which we know
4209 are going into the output file. */
4210 esym = external_syms;
4211 esymend = esym + locsymcount;
4212 isym = finfo->internal_syms;
4213 pindex = finfo->indices;
4214 ppsection = finfo->sections;
4215 for (; esym < esymend; esym++, isym++, pindex++, ppsection++)
4216 {
4217 asection *isec;
4218 const char *name;
4219 Elf_Internal_Sym osym;
4220
4221 elf_swap_symbol_in (input_bfd, esym, isym);
4222 *pindex = -1;
4223
4224 if (elf_bad_symtab (input_bfd))
4225 {
4226 if (ELF_ST_BIND (isym->st_info) != STB_LOCAL)
4227 {
4228 *ppsection = NULL;
4229 continue;
4230 }
4231 }
4232
4233 if (isym->st_shndx == SHN_UNDEF)
4234 isec = bfd_und_section_ptr;
4235 else if (isym->st_shndx > 0 && isym->st_shndx < SHN_LORESERVE)
4236 isec = section_from_elf_index (input_bfd, isym->st_shndx);
4237 else if (isym->st_shndx == SHN_ABS)
4238 isec = bfd_abs_section_ptr;
4239 else if (isym->st_shndx == SHN_COMMON)
4240 isec = bfd_com_section_ptr;
4241 else
4242 {
4243 /* Who knows? */
4244 isec = NULL;
4245 }
4246
4247 *ppsection = isec;
4248
4249 /* Don't output the first, undefined, symbol. */
4250 if (esym == external_syms)
4251 continue;
4252
4253 /* If we are stripping all symbols, we don't want to output this
4254 one. */
4255 if (finfo->info->strip == strip_all)
4256 continue;
4257
4258 /* We never output section symbols. Instead, we use the section
4259 symbol of the corresponding section in the output file. */
4260 if (ELF_ST_TYPE (isym->st_info) == STT_SECTION)
4261 continue;
4262
4263 /* If we are discarding all local symbols, we don't want to
4264 output this one. If we are generating a relocateable output
4265 file, then some of the local symbols may be required by
4266 relocs; we output them below as we discover that they are
4267 needed. */
4268 if (finfo->info->discard == discard_all)
4269 continue;
4270
4271 /* If this symbol is defined in a section which we are
4272 discarding, we don't need to keep it, but note that
4273 linker_mark is only reliable for sections that have contents.
4274 For the benefit of the MIPS ELF linker, we check SEC_EXCLUDE
4275 as well as linker_mark. */
4276 if (isym->st_shndx > 0
4277 && isym->st_shndx < SHN_LORESERVE
4278 && isec != NULL
4279 && ((! isec->linker_mark && (isec->flags & SEC_HAS_CONTENTS) != 0)
4280 || (! finfo->info->relocateable
4281 && (isec->flags & SEC_EXCLUDE) != 0)))
4282 continue;
4283
4284 /* Get the name of the symbol. */
4285 name = bfd_elf_string_from_elf_section (input_bfd, symtab_hdr->sh_link,
4286 isym->st_name);
4287 if (name == NULL)
4288 return false;
4289
4290 /* See if we are discarding symbols with this name. */
4291 if ((finfo->info->strip == strip_some
4292 && (bfd_hash_lookup (finfo->info->keep_hash, name, false, false)
4293 == NULL))
4294 || (finfo->info->discard == discard_l
4295 && bfd_is_local_label_name (input_bfd, name)))
4296 continue;
4297
4298 /* If we get here, we are going to output this symbol. */
4299
4300 osym = *isym;
4301
4302 /* Adjust the section index for the output file. */
4303 osym.st_shndx = _bfd_elf_section_from_bfd_section (output_bfd,
4304 isec->output_section);
4305 if (osym.st_shndx == (unsigned short) -1)
4306 return false;
4307
4308 *pindex = output_bfd->symcount;
4309
4310 /* ELF symbols in relocateable files are section relative, but
4311 in executable files they are virtual addresses. Note that
4312 this code assumes that all ELF sections have an associated
4313 BFD section with a reasonable value for output_offset; below
4314 we assume that they also have a reasonable value for
4315 output_section. Any special sections must be set up to meet
4316 these requirements. */
4317 osym.st_value += isec->output_offset;
4318 if (! finfo->info->relocateable)
4319 osym.st_value += isec->output_section->vma;
4320
4321 if (! elf_link_output_sym (finfo, name, &osym, isec))
4322 return false;
4323 }
4324
4325 /* Relocate the contents of each section. */
4326 for (o = input_bfd->sections; o != NULL; o = o->next)
4327 {
4328 bfd_byte *contents;
4329
4330 if (! o->linker_mark)
4331 {
4332 /* This section was omitted from the link. */
4333 continue;
4334 }
4335
4336 if ((o->flags & SEC_HAS_CONTENTS) == 0
4337 || (o->_raw_size == 0 && (o->flags & SEC_RELOC) == 0))
4338 continue;
4339
4340 if ((o->flags & SEC_LINKER_CREATED) != 0)
4341 {
4342 /* Section was created by elf_link_create_dynamic_sections
4343 or somesuch. */
4344 continue;
4345 }
4346
4347 /* Get the contents of the section. They have been cached by a
4348 relaxation routine. Note that o is a section in an input
4349 file, so the contents field will not have been set by any of
4350 the routines which work on output files. */
4351 if (elf_section_data (o)->this_hdr.contents != NULL)
4352 contents = elf_section_data (o)->this_hdr.contents;
4353 else
4354 {
4355 contents = finfo->contents;
4356 if (! bfd_get_section_contents (input_bfd, o, contents,
4357 (file_ptr) 0, o->_raw_size))
4358 return false;
4359 }
4360
4361 if ((o->flags & SEC_RELOC) != 0)
4362 {
4363 Elf_Internal_Rela *internal_relocs;
4364
4365 /* Get the swapped relocs. */
4366 internal_relocs = (NAME(_bfd_elf,link_read_relocs)
4367 (input_bfd, o, finfo->external_relocs,
4368 finfo->internal_relocs, false));
4369 if (internal_relocs == NULL
4370 && o->reloc_count > 0)
4371 return false;
4372
4373 /* Relocate the section by invoking a back end routine.
4374
4375 The back end routine is responsible for adjusting the
4376 section contents as necessary, and (if using Rela relocs
4377 and generating a relocateable output file) adjusting the
4378 reloc addend as necessary.
4379
4380 The back end routine does not have to worry about setting
4381 the reloc address or the reloc symbol index.
4382
4383 The back end routine is given a pointer to the swapped in
4384 internal symbols, and can access the hash table entries
4385 for the external symbols via elf_sym_hashes (input_bfd).
4386
4387 When generating relocateable output, the back end routine
4388 must handle STB_LOCAL/STT_SECTION symbols specially. The
4389 output symbol is going to be a section symbol
4390 corresponding to the output section, which will require
4391 the addend to be adjusted. */
4392
4393 if (! (*relocate_section) (output_bfd, finfo->info,
4394 input_bfd, o, contents,
4395 internal_relocs,
4396 finfo->internal_syms,
4397 finfo->sections))
4398 return false;
4399
4400 if (finfo->info->relocateable)
4401 {
4402 Elf_Internal_Rela *irela;
4403 Elf_Internal_Rela *irelaend;
4404 struct elf_link_hash_entry **rel_hash;
4405 Elf_Internal_Shdr *input_rel_hdr;
4406 Elf_Internal_Shdr *output_rel_hdr;
4407
4408 /* Adjust the reloc addresses and symbol indices. */
4409
4410 irela = internal_relocs;
4411 irelaend = irela + o->reloc_count;
4412 rel_hash = (elf_section_data (o->output_section)->rel_hashes
4413 + o->output_section->reloc_count);
4414 for (; irela < irelaend; irela++, rel_hash++)
4415 {
4416 unsigned long r_symndx;
4417 Elf_Internal_Sym *isym;
4418 asection *sec;
4419
4420 irela->r_offset += o->output_offset;
4421
4422 r_symndx = ELF_R_SYM (irela->r_info);
4423
4424 if (r_symndx == 0)
4425 continue;
4426
4427 if (r_symndx >= locsymcount
4428 || (elf_bad_symtab (input_bfd)
4429 && finfo->sections[r_symndx] == NULL))
4430 {
4431 long indx;
4432
4433 /* This is a reloc against a global symbol. We
4434 have not yet output all the local symbols, so
4435 we do not know the symbol index of any global
4436 symbol. We set the rel_hash entry for this
4437 reloc to point to the global hash table entry
4438 for this symbol. The symbol index is then
4439 set at the end of elf_bfd_final_link. */
4440 indx = r_symndx - extsymoff;
4441 *rel_hash = elf_sym_hashes (input_bfd)[indx];
4442
4443 /* Setting the index to -2 tells
4444 elf_link_output_extsym that this symbol is
4445 used by a reloc. */
4446 BFD_ASSERT ((*rel_hash)->indx < 0);
4447 (*rel_hash)->indx = -2;
4448
4449 continue;
4450 }
4451
4452 /* This is a reloc against a local symbol. */
4453
4454 *rel_hash = NULL;
4455 isym = finfo->internal_syms + r_symndx;
4456 sec = finfo->sections[r_symndx];
4457 if (ELF_ST_TYPE (isym->st_info) == STT_SECTION)
4458 {
4459 /* I suppose the backend ought to fill in the
4460 section of any STT_SECTION symbol against a
4461 processor specific section. If we have
4462 discarded a section, the output_section will
4463 be the absolute section. */
4464 if (sec != NULL
4465 && (bfd_is_abs_section (sec)
4466 || (sec->output_section != NULL
4467 && bfd_is_abs_section (sec->output_section))))
4468 r_symndx = 0;
4469 else if (sec == NULL || sec->owner == NULL)
4470 {
4471 bfd_set_error (bfd_error_bad_value);
4472 return false;
4473 }
4474 else
4475 {
4476 r_symndx = sec->output_section->target_index;
4477 BFD_ASSERT (r_symndx != 0);
4478 }
4479 }
4480 else
4481 {
4482 if (finfo->indices[r_symndx] == -1)
4483 {
4484 unsigned long link;
4485 const char *name;
4486 asection *osec;
4487
4488 if (finfo->info->strip == strip_all)
4489 {
4490 /* You can't do ld -r -s. */
4491 bfd_set_error (bfd_error_invalid_operation);
4492 return false;
4493 }
4494
4495 /* This symbol was skipped earlier, but
4496 since it is needed by a reloc, we
4497 must output it now. */
4498 link = symtab_hdr->sh_link;
4499 name = bfd_elf_string_from_elf_section (input_bfd,
4500 link,
4501 isym->st_name);
4502 if (name == NULL)
4503 return false;
4504
4505 osec = sec->output_section;
4506 isym->st_shndx =
4507 _bfd_elf_section_from_bfd_section (output_bfd,
4508 osec);
4509 if (isym->st_shndx == (unsigned short) -1)
4510 return false;
4511
4512 isym->st_value += sec->output_offset;
4513 if (! finfo->info->relocateable)
4514 isym->st_value += osec->vma;
4515
4516 finfo->indices[r_symndx] = output_bfd->symcount;
4517
4518 if (! elf_link_output_sym (finfo, name, isym, sec))
4519 return false;
4520 }
4521
4522 r_symndx = finfo->indices[r_symndx];
4523 }
4524
4525 irela->r_info = ELF_R_INFO (r_symndx,
4526 ELF_R_TYPE (irela->r_info));
4527 }
4528
4529 /* Swap out the relocs. */
4530 input_rel_hdr = &elf_section_data (o)->rel_hdr;
4531 output_rel_hdr = &elf_section_data (o->output_section)->rel_hdr;
4532 BFD_ASSERT (output_rel_hdr->sh_entsize
4533 == input_rel_hdr->sh_entsize);
4534 irela = internal_relocs;
4535 irelaend = irela + o->reloc_count;
4536 if (input_rel_hdr->sh_entsize == sizeof (Elf_External_Rel))
4537 {
4538 Elf_External_Rel *erel;
4539
4540 erel = ((Elf_External_Rel *) output_rel_hdr->contents
4541 + o->output_section->reloc_count);
4542 for (; irela < irelaend; irela++, erel++)
4543 {
4544 Elf_Internal_Rel irel;
4545
4546 irel.r_offset = irela->r_offset;
4547 irel.r_info = irela->r_info;
4548 BFD_ASSERT (irela->r_addend == 0);
4549 elf_swap_reloc_out (output_bfd, &irel, erel);
4550 }
4551 }
4552 else
4553 {
4554 Elf_External_Rela *erela;
4555
4556 BFD_ASSERT (input_rel_hdr->sh_entsize
4557 == sizeof (Elf_External_Rela));
4558 erela = ((Elf_External_Rela *) output_rel_hdr->contents
4559 + o->output_section->reloc_count);
4560 for (; irela < irelaend; irela++, erela++)
4561 elf_swap_reloca_out (output_bfd, irela, erela);
4562 }
4563
4564 o->output_section->reloc_count += o->reloc_count;
4565 }
4566 }
4567
4568 /* Write out the modified section contents. */
4569 if (elf_section_data (o)->stab_info == NULL)
4570 {
4571 if (! bfd_set_section_contents (output_bfd, o->output_section,
4572 contents, o->output_offset,
4573 (o->_cooked_size != 0
4574 ? o->_cooked_size
4575 : o->_raw_size)))
4576 return false;
4577 }
4578 else
4579 {
4580 if (! (_bfd_write_section_stabs
4581 (output_bfd, &elf_hash_table (finfo->info)->stab_info,
4582 o, &elf_section_data (o)->stab_info, contents)))
4583 return false;
4584 }
4585 }
4586
4587 return true;
4588 }
4589
4590 /* Generate a reloc when linking an ELF file. This is a reloc
4591 requested by the linker, and does come from any input file. This
4592 is used to build constructor and destructor tables when linking
4593 with -Ur. */
4594
4595 static boolean
4596 elf_reloc_link_order (output_bfd, info, output_section, link_order)
4597 bfd *output_bfd;
4598 struct bfd_link_info *info;
4599 asection *output_section;
4600 struct bfd_link_order *link_order;
4601 {
4602 reloc_howto_type *howto;
4603 long indx;
4604 bfd_vma offset;
4605 bfd_vma addend;
4606 struct elf_link_hash_entry **rel_hash_ptr;
4607 Elf_Internal_Shdr *rel_hdr;
4608
4609 howto = bfd_reloc_type_lookup (output_bfd, link_order->u.reloc.p->reloc);
4610 if (howto == NULL)
4611 {
4612 bfd_set_error (bfd_error_bad_value);
4613 return false;
4614 }
4615
4616 addend = link_order->u.reloc.p->addend;
4617
4618 /* Figure out the symbol index. */
4619 rel_hash_ptr = (elf_section_data (output_section)->rel_hashes
4620 + output_section->reloc_count);
4621 if (link_order->type == bfd_section_reloc_link_order)
4622 {
4623 indx = link_order->u.reloc.p->u.section->target_index;
4624 BFD_ASSERT (indx != 0);
4625 *rel_hash_ptr = NULL;
4626 }
4627 else
4628 {
4629 struct elf_link_hash_entry *h;
4630
4631 /* Treat a reloc against a defined symbol as though it were
4632 actually against the section. */
4633 h = ((struct elf_link_hash_entry *)
4634 bfd_wrapped_link_hash_lookup (output_bfd, info,
4635 link_order->u.reloc.p->u.name,
4636 false, false, true));
4637 if (h != NULL
4638 && (h->root.type == bfd_link_hash_defined
4639 || h->root.type == bfd_link_hash_defweak))
4640 {
4641 asection *section;
4642
4643 section = h->root.u.def.section;
4644 indx = section->output_section->target_index;
4645 *rel_hash_ptr = NULL;
4646 /* It seems that we ought to add the symbol value to the
4647 addend here, but in practice it has already been added
4648 because it was passed to constructor_callback. */
4649 addend += section->output_section->vma + section->output_offset;
4650 }
4651 else if (h != NULL)
4652 {
4653 /* Setting the index to -2 tells elf_link_output_extsym that
4654 this symbol is used by a reloc. */
4655 h->indx = -2;
4656 *rel_hash_ptr = h;
4657 indx = 0;
4658 }
4659 else
4660 {
4661 if (! ((*info->callbacks->unattached_reloc)
4662 (info, link_order->u.reloc.p->u.name, (bfd *) NULL,
4663 (asection *) NULL, (bfd_vma) 0)))
4664 return false;
4665 indx = 0;
4666 }
4667 }
4668
4669 /* If this is an inplace reloc, we must write the addend into the
4670 object file. */
4671 if (howto->partial_inplace && addend != 0)
4672 {
4673 bfd_size_type size;
4674 bfd_reloc_status_type rstat;
4675 bfd_byte *buf;
4676 boolean ok;
4677
4678 size = bfd_get_reloc_size (howto);
4679 buf = (bfd_byte *) bfd_zmalloc (size);
4680 if (buf == (bfd_byte *) NULL)
4681 return false;
4682 rstat = _bfd_relocate_contents (howto, output_bfd, addend, buf);
4683 switch (rstat)
4684 {
4685 case bfd_reloc_ok:
4686 break;
4687 default:
4688 case bfd_reloc_outofrange:
4689 abort ();
4690 case bfd_reloc_overflow:
4691 if (! ((*info->callbacks->reloc_overflow)
4692 (info,
4693 (link_order->type == bfd_section_reloc_link_order
4694 ? bfd_section_name (output_bfd,
4695 link_order->u.reloc.p->u.section)
4696 : link_order->u.reloc.p->u.name),
4697 howto->name, addend, (bfd *) NULL, (asection *) NULL,
4698 (bfd_vma) 0)))
4699 {
4700 free (buf);
4701 return false;
4702 }
4703 break;
4704 }
4705 ok = bfd_set_section_contents (output_bfd, output_section, (PTR) buf,
4706 (file_ptr) link_order->offset, size);
4707 free (buf);
4708 if (! ok)
4709 return false;
4710 }
4711
4712 /* The address of a reloc is relative to the section in a
4713 relocateable file, and is a virtual address in an executable
4714 file. */
4715 offset = link_order->offset;
4716 if (! info->relocateable)
4717 offset += output_section->vma;
4718
4719 rel_hdr = &elf_section_data (output_section)->rel_hdr;
4720
4721 if (rel_hdr->sh_type == SHT_REL)
4722 {
4723 Elf_Internal_Rel irel;
4724 Elf_External_Rel *erel;
4725
4726 irel.r_offset = offset;
4727 irel.r_info = ELF_R_INFO (indx, howto->type);
4728 erel = ((Elf_External_Rel *) rel_hdr->contents
4729 + output_section->reloc_count);
4730 elf_swap_reloc_out (output_bfd, &irel, erel);
4731 }
4732 else
4733 {
4734 Elf_Internal_Rela irela;
4735 Elf_External_Rela *erela;
4736
4737 irela.r_offset = offset;
4738 irela.r_info = ELF_R_INFO (indx, howto->type);
4739 irela.r_addend = addend;
4740 erela = ((Elf_External_Rela *) rel_hdr->contents
4741 + output_section->reloc_count);
4742 elf_swap_reloca_out (output_bfd, &irela, erela);
4743 }
4744
4745 ++output_section->reloc_count;
4746
4747 return true;
4748 }
4749
4750 \f
4751 /* Allocate a pointer to live in a linker created section. */
4752
4753 boolean
4754 elf_create_pointer_linker_section (abfd, info, lsect, h, rel)
4755 bfd *abfd;
4756 struct bfd_link_info *info;
4757 elf_linker_section_t *lsect;
4758 struct elf_link_hash_entry *h;
4759 const Elf_Internal_Rela *rel;
4760 {
4761 elf_linker_section_pointers_t **ptr_linker_section_ptr = NULL;
4762 elf_linker_section_pointers_t *linker_section_ptr;
4763 unsigned long r_symndx = ELF_R_SYM (rel->r_info);;
4764
4765 BFD_ASSERT (lsect != NULL);
4766
4767 /* Is this a global symbol? */
4768 if (h != NULL)
4769 {
4770 /* Has this symbol already been allocated, if so, our work is done */
4771 if (_bfd_elf_find_pointer_linker_section (h->linker_section_pointer,
4772 rel->r_addend,
4773 lsect->which))
4774 return true;
4775
4776 ptr_linker_section_ptr = &h->linker_section_pointer;
4777 /* Make sure this symbol is output as a dynamic symbol. */
4778 if (h->dynindx == -1)
4779 {
4780 if (! elf_link_record_dynamic_symbol (info, h))
4781 return false;
4782 }
4783
4784 if (lsect->rel_section)
4785 lsect->rel_section->_raw_size += sizeof (Elf_External_Rela);
4786 }
4787
4788 else /* Allocation of a pointer to a local symbol */
4789 {
4790 elf_linker_section_pointers_t **ptr = elf_local_ptr_offsets (abfd);
4791
4792 /* Allocate a table to hold the local symbols if first time */
4793 if (!ptr)
4794 {
4795 int num_symbols = elf_tdata (abfd)->symtab_hdr.sh_info;
4796 register unsigned int i;
4797
4798 ptr = (elf_linker_section_pointers_t **)
4799 bfd_alloc (abfd, num_symbols * sizeof (elf_linker_section_pointers_t *));
4800
4801 if (!ptr)
4802 return false;
4803
4804 elf_local_ptr_offsets (abfd) = ptr;
4805 for (i = 0; i < num_symbols; i++)
4806 ptr[i] = (elf_linker_section_pointers_t *)0;
4807 }
4808
4809 /* Has this symbol already been allocated, if so, our work is done */
4810 if (_bfd_elf_find_pointer_linker_section (ptr[r_symndx],
4811 rel->r_addend,
4812 lsect->which))
4813 return true;
4814
4815 ptr_linker_section_ptr = &ptr[r_symndx];
4816
4817 if (info->shared)
4818 {
4819 /* If we are generating a shared object, we need to
4820 output a R_<xxx>_RELATIVE reloc so that the
4821 dynamic linker can adjust this GOT entry. */
4822 BFD_ASSERT (lsect->rel_section != NULL);
4823 lsect->rel_section->_raw_size += sizeof (Elf_External_Rela);
4824 }
4825 }
4826
4827 /* Allocate space for a pointer in the linker section, and allocate a new pointer record
4828 from internal memory. */
4829 BFD_ASSERT (ptr_linker_section_ptr != NULL);
4830 linker_section_ptr = (elf_linker_section_pointers_t *)
4831 bfd_alloc (abfd, sizeof (elf_linker_section_pointers_t));
4832
4833 if (!linker_section_ptr)
4834 return false;
4835
4836 linker_section_ptr->next = *ptr_linker_section_ptr;
4837 linker_section_ptr->addend = rel->r_addend;
4838 linker_section_ptr->which = lsect->which;
4839 linker_section_ptr->written_address_p = false;
4840 *ptr_linker_section_ptr = linker_section_ptr;
4841
4842 #if 0
4843 if (lsect->hole_size && lsect->hole_offset < lsect->max_hole_offset)
4844 {
4845 linker_section_ptr->offset = lsect->section->_raw_size - lsect->hole_size + (ARCH_SIZE / 8);
4846 lsect->hole_offset += ARCH_SIZE / 8;
4847 lsect->sym_offset += ARCH_SIZE / 8;
4848 if (lsect->sym_hash) /* Bump up symbol value if needed */
4849 {
4850 lsect->sym_hash->root.u.def.value += ARCH_SIZE / 8;
4851 #ifdef DEBUG
4852 fprintf (stderr, "Bump up %s by %ld, current value = %ld\n",
4853 lsect->sym_hash->root.root.string,
4854 (long)ARCH_SIZE / 8,
4855 (long)lsect->sym_hash->root.u.def.value);
4856 #endif
4857 }
4858 }
4859 else
4860 #endif
4861 linker_section_ptr->offset = lsect->section->_raw_size;
4862
4863 lsect->section->_raw_size += ARCH_SIZE / 8;
4864
4865 #ifdef DEBUG
4866 fprintf (stderr, "Create pointer in linker section %s, offset = %ld, section size = %ld\n",
4867 lsect->name, (long)linker_section_ptr->offset, (long)lsect->section->_raw_size);
4868 #endif
4869
4870 return true;
4871 }
4872
4873 \f
4874 #if ARCH_SIZE==64
4875 #define bfd_put_ptr(BFD,VAL,ADDR) bfd_put_64 (BFD, VAL, ADDR)
4876 #endif
4877 #if ARCH_SIZE==32
4878 #define bfd_put_ptr(BFD,VAL,ADDR) bfd_put_32 (BFD, VAL, ADDR)
4879 #endif
4880
4881 /* Fill in the address for a pointer generated in alinker section. */
4882
4883 bfd_vma
4884 elf_finish_pointer_linker_section (output_bfd, input_bfd, info, lsect, h, relocation, rel, relative_reloc)
4885 bfd *output_bfd;
4886 bfd *input_bfd;
4887 struct bfd_link_info *info;
4888 elf_linker_section_t *lsect;
4889 struct elf_link_hash_entry *h;
4890 bfd_vma relocation;
4891 const Elf_Internal_Rela *rel;
4892 int relative_reloc;
4893 {
4894 elf_linker_section_pointers_t *linker_section_ptr;
4895
4896 BFD_ASSERT (lsect != NULL);
4897
4898 if (h != NULL) /* global symbol */
4899 {
4900 linker_section_ptr = _bfd_elf_find_pointer_linker_section (h->linker_section_pointer,
4901 rel->r_addend,
4902 lsect->which);
4903
4904 BFD_ASSERT (linker_section_ptr != NULL);
4905
4906 if (! elf_hash_table (info)->dynamic_sections_created
4907 || (info->shared
4908 && info->symbolic
4909 && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR)))
4910 {
4911 /* This is actually a static link, or it is a
4912 -Bsymbolic link and the symbol is defined
4913 locally. We must initialize this entry in the
4914 global section.
4915
4916 When doing a dynamic link, we create a .rela.<xxx>
4917 relocation entry to initialize the value. This
4918 is done in the finish_dynamic_symbol routine. */
4919 if (!linker_section_ptr->written_address_p)
4920 {
4921 linker_section_ptr->written_address_p = true;
4922 bfd_put_ptr (output_bfd, relocation + linker_section_ptr->addend,
4923 lsect->section->contents + linker_section_ptr->offset);
4924 }
4925 }
4926 }
4927 else /* local symbol */
4928 {
4929 unsigned long r_symndx = ELF_R_SYM (rel->r_info);
4930 BFD_ASSERT (elf_local_ptr_offsets (input_bfd) != NULL);
4931 BFD_ASSERT (elf_local_ptr_offsets (input_bfd)[r_symndx] != NULL);
4932 linker_section_ptr = _bfd_elf_find_pointer_linker_section (elf_local_ptr_offsets (input_bfd)[r_symndx],
4933 rel->r_addend,
4934 lsect->which);
4935
4936 BFD_ASSERT (linker_section_ptr != NULL);
4937
4938 /* Write out pointer if it hasn't been rewritten out before */
4939 if (!linker_section_ptr->written_address_p)
4940 {
4941 linker_section_ptr->written_address_p = true;
4942 bfd_put_ptr (output_bfd, relocation + linker_section_ptr->addend,
4943 lsect->section->contents + linker_section_ptr->offset);
4944
4945 if (info->shared)
4946 {
4947 asection *srel = lsect->rel_section;
4948 Elf_Internal_Rela outrel;
4949
4950 /* We need to generate a relative reloc for the dynamic linker. */
4951 if (!srel)
4952 lsect->rel_section = srel = bfd_get_section_by_name (elf_hash_table (info)->dynobj,
4953 lsect->rel_name);
4954
4955 BFD_ASSERT (srel != NULL);
4956
4957 outrel.r_offset = (lsect->section->output_section->vma
4958 + lsect->section->output_offset
4959 + linker_section_ptr->offset);
4960 outrel.r_info = ELF_R_INFO (0, relative_reloc);
4961 outrel.r_addend = 0;
4962 elf_swap_reloca_out (output_bfd, &outrel,
4963 (((Elf_External_Rela *)
4964 lsect->section->contents)
4965 + lsect->section->reloc_count));
4966 ++lsect->section->reloc_count;
4967 }
4968 }
4969 }
4970
4971 relocation = (lsect->section->output_offset
4972 + linker_section_ptr->offset
4973 - lsect->hole_offset
4974 - lsect->sym_offset);
4975
4976 #ifdef DEBUG
4977 fprintf (stderr, "Finish pointer in linker section %s, offset = %ld (0x%lx)\n",
4978 lsect->name, (long)relocation, (long)relocation);
4979 #endif
4980
4981 /* Subtract out the addend, because it will get added back in by the normal
4982 processing. */
4983 return relocation - linker_section_ptr->addend;
4984 }