Fix typo; some progress in ppcbug support
[binutils-gdb.git] / bfd / elflink.h
1 /* ELF linker support.
2 Copyright 1995 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 Elf_Internal_Rela *elf_link_read_relocs
27 PARAMS ((bfd *, asection *, PTR, Elf_Internal_Rela *, boolean));
28 static boolean elf_export_symbol
29 PARAMS ((struct elf_link_hash_entry *, PTR));
30 static boolean elf_adjust_dynamic_symbol
31 PARAMS ((struct elf_link_hash_entry *, PTR));
32
33 /* This struct is used to pass information to routines called via
34 elf_link_hash_traverse which must return failure. */
35
36 struct elf_info_failed
37 {
38 boolean failed;
39 struct bfd_link_info *info;
40 };
41
42 /* Given an ELF BFD, add symbols to the global hash table as
43 appropriate. */
44
45 boolean
46 elf_bfd_link_add_symbols (abfd, info)
47 bfd *abfd;
48 struct bfd_link_info *info;
49 {
50 switch (bfd_get_format (abfd))
51 {
52 case bfd_object:
53 return elf_link_add_object_symbols (abfd, info);
54 case bfd_archive:
55 return elf_link_add_archive_symbols (abfd, info);
56 default:
57 bfd_set_error (bfd_error_wrong_format);
58 return false;
59 }
60 }
61
62 /* Add symbols from an ELF archive file to the linker hash table. We
63 don't use _bfd_generic_link_add_archive_symbols because of a
64 problem which arises on UnixWare. The UnixWare libc.so is an
65 archive which includes an entry libc.so.1 which defines a bunch of
66 symbols. The libc.so archive also includes a number of other
67 object files, which also define symbols, some of which are the same
68 as those defined in libc.so.1. Correct linking requires that we
69 consider each object file in turn, and include it if it defines any
70 symbols we need. _bfd_generic_link_add_archive_symbols does not do
71 this; it looks through the list of undefined symbols, and includes
72 any object file which defines them. When this algorithm is used on
73 UnixWare, it winds up pulling in libc.so.1 early and defining a
74 bunch of symbols. This means that some of the other objects in the
75 archive are not included in the link, which is incorrect since they
76 precede libc.so.1 in the archive.
77
78 Fortunately, ELF archive handling is simpler than that done by
79 _bfd_generic_link_add_archive_symbols, which has to allow for a.out
80 oddities. In ELF, if we find a symbol in the archive map, and the
81 symbol is currently undefined, we know that we must pull in that
82 object file.
83
84 Unfortunately, we do have to make multiple passes over the symbol
85 table until nothing further is resolved. */
86
87 static boolean
88 elf_link_add_archive_symbols (abfd, info)
89 bfd *abfd;
90 struct bfd_link_info *info;
91 {
92 symindex c;
93 boolean *defined = NULL;
94 boolean *included = NULL;
95 carsym *symdefs;
96 boolean loop;
97
98 if (! bfd_has_map (abfd))
99 {
100 /* An empty archive is a special case. */
101 if (bfd_openr_next_archived_file (abfd, (bfd *) NULL) == NULL)
102 return true;
103 bfd_set_error (bfd_error_no_armap);
104 return false;
105 }
106
107 /* Keep track of all symbols we know to be already defined, and all
108 files we know to be already included. This is to speed up the
109 second and subsequent passes. */
110 c = bfd_ardata (abfd)->symdef_count;
111 if (c == 0)
112 return true;
113 defined = (boolean *) bfd_malloc (c * sizeof (boolean));
114 included = (boolean *) bfd_malloc (c * sizeof (boolean));
115 if (defined == (boolean *) NULL || included == (boolean *) NULL)
116 goto error_return;
117 memset (defined, 0, c * sizeof (boolean));
118 memset (included, 0, c * sizeof (boolean));
119
120 symdefs = bfd_ardata (abfd)->symdefs;
121
122 do
123 {
124 file_ptr last;
125 symindex i;
126 carsym *symdef;
127 carsym *symdefend;
128
129 loop = false;
130 last = -1;
131
132 symdef = symdefs;
133 symdefend = symdef + c;
134 for (i = 0; symdef < symdefend; symdef++, i++)
135 {
136 struct elf_link_hash_entry *h;
137 bfd *element;
138 struct bfd_link_hash_entry *undefs_tail;
139 symindex mark;
140
141 if (defined[i] || included[i])
142 continue;
143 if (symdef->file_offset == last)
144 {
145 included[i] = true;
146 continue;
147 }
148
149 h = elf_link_hash_lookup (elf_hash_table (info), symdef->name,
150 false, false, false);
151 if (h == (struct elf_link_hash_entry *) NULL)
152 continue;
153 if (h->root.type != bfd_link_hash_undefined)
154 {
155 if (h->root.type != bfd_link_hash_undefweak)
156 defined[i] = true;
157 continue;
158 }
159
160 /* We need to include this archive member. */
161
162 element = _bfd_get_elt_at_filepos (abfd, symdef->file_offset);
163 if (element == (bfd *) NULL)
164 goto error_return;
165
166 if (! bfd_check_format (element, bfd_object))
167 goto error_return;
168
169 /* Doublecheck that we have not included this object
170 already--it should be impossible, but there may be
171 something wrong with the archive. */
172 if (element->archive_pass != 0)
173 {
174 bfd_set_error (bfd_error_bad_value);
175 goto error_return;
176 }
177 element->archive_pass = 1;
178
179 undefs_tail = info->hash->undefs_tail;
180
181 if (! (*info->callbacks->add_archive_element) (info, element,
182 symdef->name))
183 goto error_return;
184 if (! elf_link_add_object_symbols (element, info))
185 goto error_return;
186
187 /* If there are any new undefined symbols, we need to make
188 another pass through the archive in order to see whether
189 they can be defined. FIXME: This isn't perfect, because
190 common symbols wind up on undefs_tail and because an
191 undefined symbol which is defined later on in this pass
192 does not require another pass. This isn't a bug, but it
193 does make the code less efficient than it could be. */
194 if (undefs_tail != info->hash->undefs_tail)
195 loop = true;
196
197 /* Look backward to mark all symbols from this object file
198 which we have already seen in this pass. */
199 mark = i;
200 do
201 {
202 included[mark] = true;
203 if (mark == 0)
204 break;
205 --mark;
206 }
207 while (symdefs[mark].file_offset == symdef->file_offset);
208
209 /* We mark subsequent symbols from this object file as we go
210 on through the loop. */
211 last = symdef->file_offset;
212 }
213 }
214 while (loop);
215
216 free (defined);
217 free (included);
218
219 return true;
220
221 error_return:
222 if (defined != (boolean *) NULL)
223 free (defined);
224 if (included != (boolean *) NULL)
225 free (included);
226 return false;
227 }
228
229 /* Add symbols from an ELF object file to the linker hash table. */
230
231 static boolean
232 elf_link_add_object_symbols (abfd, info)
233 bfd *abfd;
234 struct bfd_link_info *info;
235 {
236 boolean (*add_symbol_hook) PARAMS ((bfd *, struct bfd_link_info *,
237 const Elf_Internal_Sym *,
238 const char **, flagword *,
239 asection **, bfd_vma *));
240 boolean (*check_relocs) PARAMS ((bfd *, struct bfd_link_info *,
241 asection *, const Elf_Internal_Rela *));
242 boolean collect;
243 Elf_Internal_Shdr *hdr;
244 size_t symcount;
245 size_t extsymcount;
246 size_t extsymoff;
247 Elf_External_Sym *buf = NULL;
248 struct elf_link_hash_entry **sym_hash;
249 boolean dynamic;
250 Elf_External_Dyn *dynbuf = NULL;
251 struct elf_link_hash_entry *weaks;
252 Elf_External_Sym *esym;
253 Elf_External_Sym *esymend;
254
255 add_symbol_hook = get_elf_backend_data (abfd)->elf_add_symbol_hook;
256 collect = get_elf_backend_data (abfd)->collect;
257
258 /* As a GNU extension, any input sections which are named
259 .gnu.warning.SYMBOL are treated as warning symbols for the given
260 symbol. This differs from .gnu.warning sections, which generate
261 warnings when they are included in an output file. */
262 if (! info->shared)
263 {
264 asection *s;
265
266 for (s = abfd->sections; s != NULL; s = s->next)
267 {
268 const char *name;
269
270 name = bfd_get_section_name (abfd, s);
271 if (strncmp (name, ".gnu.warning.", sizeof ".gnu.warning." - 1) == 0)
272 {
273 char *msg;
274 bfd_size_type sz;
275
276 sz = bfd_section_size (abfd, s);
277 msg = (char *) bfd_alloc (abfd, sz);
278 if (msg == NULL)
279 goto error_return;
280
281 if (! bfd_get_section_contents (abfd, s, msg, (file_ptr) 0, sz))
282 goto error_return;
283
284 if (! (_bfd_generic_link_add_one_symbol
285 (info, abfd,
286 name + sizeof ".gnu.warning." - 1,
287 BSF_WARNING, s, (bfd_vma) 0, msg, false, collect,
288 (struct bfd_link_hash_entry **) NULL)))
289 goto error_return;
290
291 if (! info->relocateable)
292 {
293 /* Clobber the section size so that the warning does
294 not get copied into the output file. */
295 s->_raw_size = 0;
296 }
297 }
298 }
299 }
300
301 /* A stripped shared library might only have a dynamic symbol table,
302 not a regular symbol table. In that case we can still go ahead
303 and link using the dynamic symbol table. */
304 if (elf_onesymtab (abfd) == 0
305 && elf_dynsymtab (abfd) != 0)
306 {
307 elf_onesymtab (abfd) = elf_dynsymtab (abfd);
308 elf_tdata (abfd)->symtab_hdr = elf_tdata (abfd)->dynsymtab_hdr;
309 }
310
311 hdr = &elf_tdata (abfd)->symtab_hdr;
312 symcount = hdr->sh_size / sizeof (Elf_External_Sym);
313
314 /* The sh_info field of the symtab header tells us where the
315 external symbols start. We don't care about the local symbols at
316 this point. */
317 if (elf_bad_symtab (abfd))
318 {
319 extsymcount = symcount;
320 extsymoff = 0;
321 }
322 else
323 {
324 extsymcount = symcount - hdr->sh_info;
325 extsymoff = hdr->sh_info;
326 }
327
328 buf = ((Elf_External_Sym *)
329 bfd_malloc (extsymcount * sizeof (Elf_External_Sym)));
330 if (buf == NULL && extsymcount != 0)
331 goto error_return;
332
333 /* We store a pointer to the hash table entry for each external
334 symbol. */
335 sym_hash = ((struct elf_link_hash_entry **)
336 bfd_alloc (abfd,
337 extsymcount * sizeof (struct elf_link_hash_entry *)));
338 if (sym_hash == NULL)
339 goto error_return;
340 elf_sym_hashes (abfd) = sym_hash;
341
342 if (elf_elfheader (abfd)->e_type != ET_DYN)
343 {
344 dynamic = false;
345
346 /* If we are creating a shared library, create all the dynamic
347 sections immediately. We need to attach them to something,
348 so we attach them to this BFD, provided it is the right
349 format. FIXME: If there are no input BFD's of the same
350 format as the output, we can't make a shared library. */
351 if (info->shared
352 && ! elf_hash_table (info)->dynamic_sections_created
353 && abfd->xvec == info->hash->creator)
354 {
355 if (! elf_link_create_dynamic_sections (abfd, info))
356 goto error_return;
357 }
358 }
359 else
360 {
361 asection *s;
362 boolean add_needed;
363 const char *name;
364 bfd_size_type oldsize;
365 bfd_size_type strindex;
366
367 dynamic = true;
368
369 /* You can't use -r against a dynamic object. Also, there's no
370 hope of using a dynamic object which does not exactly match
371 the format of the output file. */
372 if (info->relocateable
373 || info->hash->creator != abfd->xvec)
374 {
375 bfd_set_error (bfd_error_invalid_operation);
376 goto error_return;
377 }
378
379 /* Find the name to use in a DT_NEEDED entry that refers to this
380 object. If the object has a DT_SONAME entry, we use it.
381 Otherwise, if the generic linker stuck something in
382 elf_dt_needed_name, we use that. Otherwise, we just use the
383 file name. If the generic linker put a null string into
384 elf_dt_needed_name, we don't make a DT_NEEDED entry at all,
385 even if there is a DT_SONAME entry. */
386 add_needed = true;
387 name = bfd_get_filename (abfd);
388 if (elf_dt_needed_name (abfd) != NULL)
389 {
390 name = elf_dt_needed_name (abfd);
391 if (*name == '\0')
392 add_needed = false;
393 }
394 s = bfd_get_section_by_name (abfd, ".dynamic");
395 if (s != NULL)
396 {
397 Elf_External_Dyn *extdyn;
398 Elf_External_Dyn *extdynend;
399 int elfsec;
400 unsigned long link;
401
402 dynbuf = (Elf_External_Dyn *) bfd_malloc ((size_t) s->_raw_size);
403 if (dynbuf == NULL)
404 goto error_return;
405
406 if (! bfd_get_section_contents (abfd, s, (PTR) dynbuf,
407 (file_ptr) 0, s->_raw_size))
408 goto error_return;
409
410 elfsec = _bfd_elf_section_from_bfd_section (abfd, s);
411 if (elfsec == -1)
412 goto error_return;
413 link = elf_elfsections (abfd)[elfsec]->sh_link;
414
415 extdyn = dynbuf;
416 extdynend = extdyn + s->_raw_size / sizeof (Elf_External_Dyn);
417 for (; extdyn < extdynend; extdyn++)
418 {
419 Elf_Internal_Dyn dyn;
420
421 elf_swap_dyn_in (abfd, extdyn, &dyn);
422 if (add_needed && dyn.d_tag == DT_SONAME)
423 {
424 name = bfd_elf_string_from_elf_section (abfd, link,
425 dyn.d_un.d_val);
426 if (name == NULL)
427 goto error_return;
428 }
429 if (dyn.d_tag == DT_NEEDED)
430 {
431 struct bfd_link_needed_list *n, **pn;
432 char *fnm, *anm;
433
434 n = ((struct bfd_link_needed_list *)
435 bfd_alloc (abfd, sizeof (struct bfd_link_needed_list)));
436 fnm = bfd_elf_string_from_elf_section (abfd, link,
437 dyn.d_un.d_val);
438 if (n == NULL || fnm == NULL)
439 goto error_return;
440 anm = bfd_alloc (abfd, strlen (fnm) + 1);
441 if (anm == NULL)
442 goto error_return;
443 strcpy (anm, fnm);
444 n->name = anm;
445 n->by = abfd;
446 n->next = NULL;
447 for (pn = &elf_hash_table (info)->needed;
448 *pn != NULL;
449 pn = &(*pn)->next)
450 ;
451 *pn = n;
452 }
453 }
454
455 free (dynbuf);
456 dynbuf = NULL;
457 }
458
459 /* We do not want to include any of the sections in a dynamic
460 object in the output file. We hack by simply clobbering the
461 list of sections in the BFD. This could be handled more
462 cleanly by, say, a new section flag; the existing
463 SEC_NEVER_LOAD flag is not the one we want, because that one
464 still implies that the section takes up space in the output
465 file. */
466 abfd->sections = NULL;
467
468 /* If this is the first dynamic object found in the link, create
469 the special sections required for dynamic linking. */
470 if (! elf_hash_table (info)->dynamic_sections_created)
471 {
472 if (! elf_link_create_dynamic_sections (abfd, info))
473 goto error_return;
474 }
475
476 if (add_needed)
477 {
478 /* Add a DT_NEEDED entry for this dynamic object. */
479 oldsize = _bfd_stringtab_size (elf_hash_table (info)->dynstr);
480 strindex = _bfd_stringtab_add (elf_hash_table (info)->dynstr, name,
481 true, false);
482 if (strindex == (bfd_size_type) -1)
483 goto error_return;
484
485 if (oldsize == _bfd_stringtab_size (elf_hash_table (info)->dynstr))
486 {
487 asection *sdyn;
488 Elf_External_Dyn *dyncon, *dynconend;
489
490 /* The hash table size did not change, which means that
491 the dynamic object name was already entered. If we
492 have already included this dynamic object in the
493 link, just ignore it. There is no reason to include
494 a particular dynamic object more than once. */
495 sdyn = bfd_get_section_by_name (elf_hash_table (info)->dynobj,
496 ".dynamic");
497 BFD_ASSERT (sdyn != NULL);
498
499 dyncon = (Elf_External_Dyn *) sdyn->contents;
500 dynconend = (Elf_External_Dyn *) (sdyn->contents +
501 sdyn->_raw_size);
502 for (; dyncon < dynconend; dyncon++)
503 {
504 Elf_Internal_Dyn dyn;
505
506 elf_swap_dyn_in (elf_hash_table (info)->dynobj, dyncon,
507 &dyn);
508 if (dyn.d_tag == DT_NEEDED
509 && dyn.d_un.d_val == strindex)
510 {
511 if (buf != NULL)
512 free (buf);
513 return true;
514 }
515 }
516 }
517
518 if (! elf_add_dynamic_entry (info, DT_NEEDED, strindex))
519 goto error_return;
520 }
521 }
522
523 if (bfd_seek (abfd,
524 hdr->sh_offset + extsymoff * sizeof (Elf_External_Sym),
525 SEEK_SET) != 0
526 || (bfd_read ((PTR) buf, sizeof (Elf_External_Sym), extsymcount, abfd)
527 != extsymcount * sizeof (Elf_External_Sym)))
528 goto error_return;
529
530 weaks = NULL;
531
532 esymend = buf + extsymcount;
533 for (esym = buf; esym < esymend; esym++, sym_hash++)
534 {
535 Elf_Internal_Sym sym;
536 int bind;
537 bfd_vma value;
538 asection *sec;
539 flagword flags;
540 const char *name;
541 struct elf_link_hash_entry *h;
542 boolean definition;
543 boolean size_change_ok, type_change_ok;
544 boolean new_weakdef;
545
546 elf_swap_symbol_in (abfd, esym, &sym);
547
548 flags = BSF_NO_FLAGS;
549 sec = NULL;
550 value = sym.st_value;
551 *sym_hash = NULL;
552
553 bind = ELF_ST_BIND (sym.st_info);
554 if (bind == STB_LOCAL)
555 {
556 /* This should be impossible, since ELF requires that all
557 global symbols follow all local symbols, and that sh_info
558 point to the first global symbol. Unfortunatealy, Irix 5
559 screws this up. */
560 continue;
561 }
562 else if (bind == STB_GLOBAL)
563 {
564 if (sym.st_shndx != SHN_UNDEF
565 && sym.st_shndx != SHN_COMMON)
566 flags = BSF_GLOBAL;
567 else
568 flags = 0;
569 }
570 else if (bind == STB_WEAK)
571 flags = BSF_WEAK;
572 else
573 {
574 /* Leave it up to the processor backend. */
575 }
576
577 if (sym.st_shndx == SHN_UNDEF)
578 sec = bfd_und_section_ptr;
579 else if (sym.st_shndx > 0 && sym.st_shndx < SHN_LORESERVE)
580 {
581 sec = section_from_elf_index (abfd, sym.st_shndx);
582 if (sec != NULL)
583 value -= sec->vma;
584 else
585 sec = bfd_abs_section_ptr;
586 }
587 else if (sym.st_shndx == SHN_ABS)
588 sec = bfd_abs_section_ptr;
589 else if (sym.st_shndx == SHN_COMMON)
590 {
591 sec = bfd_com_section_ptr;
592 /* What ELF calls the size we call the value. What ELF
593 calls the value we call the alignment. */
594 value = sym.st_size;
595 }
596 else
597 {
598 /* Leave it up to the processor backend. */
599 }
600
601 name = bfd_elf_string_from_elf_section (abfd, hdr->sh_link, sym.st_name);
602 if (name == (const char *) NULL)
603 goto error_return;
604
605 if (add_symbol_hook)
606 {
607 if (! (*add_symbol_hook) (abfd, info, &sym, &name, &flags, &sec,
608 &value))
609 goto error_return;
610
611 /* The hook function sets the name to NULL if this symbol
612 should be skipped for some reason. */
613 if (name == (const char *) NULL)
614 continue;
615 }
616
617 /* Sanity check that all possibilities were handled. */
618 if (sec == (asection *) NULL)
619 {
620 bfd_set_error (bfd_error_bad_value);
621 goto error_return;
622 }
623
624 if (bfd_is_und_section (sec)
625 || bfd_is_com_section (sec))
626 definition = false;
627 else
628 definition = true;
629
630 size_change_ok = false;
631 type_change_ok = false;
632 if (info->hash->creator->flavour == bfd_target_elf_flavour)
633 {
634 /* We need to look up the symbol now in order to get some of
635 the dynamic object handling right. We pass the hash
636 table entry in to _bfd_generic_link_add_one_symbol so
637 that it does not have to look it up again. */
638 h = elf_link_hash_lookup (elf_hash_table (info), name,
639 true, false, false);
640 if (h == NULL)
641 goto error_return;
642 *sym_hash = h;
643
644 while (h->root.type == bfd_link_hash_indirect
645 || h->root.type == bfd_link_hash_warning)
646 h = (struct elf_link_hash_entry *) h->root.u.i.link;
647
648 /* It's OK to change the type if it used to be a weak
649 definition. */
650 type_change_ok = (h->root.type == bfd_link_hash_defweak
651 || h->root.type == bfd_link_hash_undefweak);
652
653 /* It's OK to change the size if it used to be a weak
654 definition, or if it used to be undefined, or if we will
655 be overriding an old definition.
656 */
657 size_change_ok = (type_change_ok
658 || h->root.type == bfd_link_hash_undefined);
659
660 /* If we are looking at a dynamic object, and this is a
661 definition, we need to see if it has already been defined
662 by some other object. If it has, we want to use the
663 existing definition, and we do not want to report a
664 multiple symbol definition error; we do this by
665 clobbering sec to be bfd_und_section_ptr. */
666 if (dynamic && definition)
667 {
668 if (h->root.type == bfd_link_hash_defined
669 || h->root.type == bfd_link_hash_defweak
670 || (h->root.type == bfd_link_hash_common
671 && bind == STB_WEAK))
672 {
673 sec = bfd_und_section_ptr;
674 definition = false;
675 size_change_ok = true;
676 }
677 }
678
679 /* Similarly, if we are not looking at a dynamic object, and
680 we have a definition, we want to override any definition
681 we may have from a dynamic object. Symbols from regular
682 files always take precedence over symbols from dynamic
683 objects, even if they are defined after the dynamic
684 object in the link. */
685 if (! dynamic
686 && definition
687 && (h->root.type == bfd_link_hash_defined
688 || h->root.type == bfd_link_hash_defweak)
689 && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) != 0
690 && (bfd_get_flavour (h->root.u.def.section->owner)
691 == bfd_target_elf_flavour)
692 && (elf_elfheader (h->root.u.def.section->owner)->e_type
693 == ET_DYN))
694 {
695 /* Change the hash table entry to undefined, and let
696 _bfd_generic_link_add_one_symbol do the right thing
697 with the new definition. */
698 h->root.type = bfd_link_hash_undefined;
699 h->root.u.undef.abfd = h->root.u.def.section->owner;
700 size_change_ok = true;
701 }
702 }
703
704 if (! (_bfd_generic_link_add_one_symbol
705 (info, abfd, name, flags, sec, value, (const char *) NULL,
706 false, collect, (struct bfd_link_hash_entry **) sym_hash)))
707 goto error_return;
708
709 h = *sym_hash;
710 while (h->root.type == bfd_link_hash_indirect
711 || h->root.type == bfd_link_hash_warning)
712 h = (struct elf_link_hash_entry *) h->root.u.i.link;
713 *sym_hash = h;
714
715 new_weakdef = false;
716 if (dynamic
717 && definition
718 && (flags & BSF_WEAK) != 0
719 && ELF_ST_TYPE (sym.st_info) != STT_FUNC
720 && info->hash->creator->flavour == bfd_target_elf_flavour
721 && h->weakdef == NULL)
722 {
723 /* Keep a list of all weak defined non function symbols from
724 a dynamic object, using the weakdef field. Later in this
725 function we will set the weakdef field to the correct
726 value. We only put non-function symbols from dynamic
727 objects on this list, because that happens to be the only
728 time we need to know the normal symbol corresponding to a
729 weak symbol, and the information is time consuming to
730 figure out. If the weakdef field is not already NULL,
731 then this symbol was already defined by some previous
732 dynamic object, and we will be using that previous
733 definition anyhow. */
734
735 h->weakdef = weaks;
736 weaks = h;
737 new_weakdef = true;
738 }
739
740 /* Get the alignment of a common symbol. */
741 if (sym.st_shndx == SHN_COMMON
742 && h->root.type == bfd_link_hash_common)
743 h->root.u.c.p->alignment_power = bfd_log2 (sym.st_value);
744
745 if (info->hash->creator->flavour == bfd_target_elf_flavour)
746 {
747 int old_flags;
748 boolean dynsym;
749 int new_flag;
750
751 /* Remember the symbol size and type. */
752 if (sym.st_size != 0
753 && (definition || h->size == 0))
754 {
755 if (h->size != 0 && h->size != sym.st_size && ! size_change_ok)
756 (*_bfd_error_handler)
757 ("Warning: size of symbol `%s' changed from %lu to %lu in %s",
758 name, (unsigned long) h->size, (unsigned long) sym.st_size,
759 bfd_get_filename (abfd));
760
761 h->size = sym.st_size;
762 }
763 if (ELF_ST_TYPE (sym.st_info) != STT_NOTYPE
764 && (definition || h->type == STT_NOTYPE))
765 {
766 if (h->type != STT_NOTYPE
767 && h->type != ELF_ST_TYPE (sym.st_info)
768 && ! type_change_ok)
769 (*_bfd_error_handler)
770 ("Warning: type of symbol `%s' changed from %d to %d in %s",
771 name, h->type, ELF_ST_TYPE (sym.st_info),
772 bfd_get_filename (abfd));
773
774 h->type = ELF_ST_TYPE (sym.st_info);
775 }
776
777 /* Set a flag in the hash table entry indicating the type of
778 reference or definition we just found. Keep a count of
779 the number of dynamic symbols we find. A dynamic symbol
780 is one which is referenced or defined by both a regular
781 object and a shared object, or one which is referenced or
782 defined by more than one shared object. */
783 old_flags = h->elf_link_hash_flags;
784 dynsym = false;
785 if (! dynamic)
786 {
787 if (! definition)
788 new_flag = ELF_LINK_HASH_REF_REGULAR;
789 else
790 new_flag = ELF_LINK_HASH_DEF_REGULAR;
791 if (info->shared
792 || (old_flags & (ELF_LINK_HASH_DEF_DYNAMIC
793 | ELF_LINK_HASH_REF_DYNAMIC)) != 0)
794 dynsym = true;
795 }
796 else
797 {
798 if (! definition)
799 new_flag = ELF_LINK_HASH_REF_DYNAMIC;
800 else
801 new_flag = ELF_LINK_HASH_DEF_DYNAMIC;
802 if ((old_flags & new_flag) != 0
803 || (old_flags & (ELF_LINK_HASH_DEF_REGULAR
804 | ELF_LINK_HASH_REF_REGULAR)) != 0
805 || (h->weakdef != NULL
806 && (old_flags & (ELF_LINK_HASH_DEF_DYNAMIC
807 | ELF_LINK_HASH_REF_DYNAMIC)) != 0))
808 dynsym = true;
809 }
810
811 h->elf_link_hash_flags |= new_flag;
812 if (dynsym && h->dynindx == -1)
813 {
814 if (! _bfd_elf_link_record_dynamic_symbol (info, h))
815 goto error_return;
816 if (h->weakdef != NULL
817 && ! new_weakdef
818 && h->weakdef->dynindx == -1)
819 {
820 if (! _bfd_elf_link_record_dynamic_symbol (info,
821 h->weakdef))
822 goto error_return;
823 }
824 }
825 }
826 }
827
828 /* Now set the weakdefs field correctly for all the weak defined
829 symbols we found. The only way to do this is to search all the
830 symbols. Since we only need the information for non functions in
831 dynamic objects, that's the only time we actually put anything on
832 the list WEAKS. We need this information so that if a regular
833 object refers to a symbol defined weakly in a dynamic object, the
834 real symbol in the dynamic object is also put in the dynamic
835 symbols; we also must arrange for both symbols to point to the
836 same memory location. We could handle the general case of symbol
837 aliasing, but a general symbol alias can only be generated in
838 assembler code, handling it correctly would be very time
839 consuming, and other ELF linkers don't handle general aliasing
840 either. */
841 while (weaks != NULL)
842 {
843 struct elf_link_hash_entry *hlook;
844 asection *slook;
845 bfd_vma vlook;
846 struct elf_link_hash_entry **hpp;
847 struct elf_link_hash_entry **hppend;
848
849 hlook = weaks;
850 weaks = hlook->weakdef;
851 hlook->weakdef = NULL;
852
853 BFD_ASSERT (hlook->root.type == bfd_link_hash_defined
854 || hlook->root.type == bfd_link_hash_defweak
855 || hlook->root.type == bfd_link_hash_common
856 || hlook->root.type == bfd_link_hash_indirect);
857 slook = hlook->root.u.def.section;
858 vlook = hlook->root.u.def.value;
859
860 hpp = elf_sym_hashes (abfd);
861 hppend = hpp + extsymcount;
862 for (; hpp < hppend; hpp++)
863 {
864 struct elf_link_hash_entry *h;
865
866 h = *hpp;
867 if (h != NULL && h != hlook
868 && (h->root.type == bfd_link_hash_defined
869 || h->root.type == bfd_link_hash_defweak)
870 && h->root.u.def.section == slook
871 && h->root.u.def.value == vlook)
872 {
873 hlook->weakdef = h;
874
875 /* If the weak definition is in the list of dynamic
876 symbols, make sure the real definition is put there
877 as well. */
878 if (hlook->dynindx != -1
879 && h->dynindx == -1)
880 {
881 if (! _bfd_elf_link_record_dynamic_symbol (info, h))
882 goto error_return;
883 }
884
885 break;
886 }
887 }
888 }
889
890 if (buf != NULL)
891 {
892 free (buf);
893 buf = NULL;
894 }
895
896 /* If this object is the same format as the output object, and it is
897 not a shared library, then let the backend look through the
898 relocs.
899
900 This is required to build global offset table entries and to
901 arrange for dynamic relocs. It is not required for the
902 particular common case of linking non PIC code, even when linking
903 against shared libraries, but unfortunately there is no way of
904 knowing whether an object file has been compiled PIC or not.
905 Looking through the relocs is not particularly time consuming.
906 The problem is that we must either (1) keep the relocs in memory,
907 which causes the linker to require additional runtime memory or
908 (2) read the relocs twice from the input file, which wastes time.
909 This would be a good case for using mmap.
910
911 I have no idea how to handle linking PIC code into a file of a
912 different format. It probably can't be done. */
913 check_relocs = get_elf_backend_data (abfd)->check_relocs;
914 if (! dynamic
915 && abfd->xvec == info->hash->creator
916 && check_relocs != NULL)
917 {
918 asection *o;
919
920 for (o = abfd->sections; o != NULL; o = o->next)
921 {
922 Elf_Internal_Rela *internal_relocs;
923 boolean ok;
924
925 if ((o->flags & SEC_RELOC) == 0
926 || o->reloc_count == 0)
927 continue;
928
929 /* I believe we can ignore the relocs for any section which
930 does not form part of the final process image, such as a
931 debugging section. */
932 if ((o->flags & SEC_ALLOC) == 0)
933 continue;
934
935 internal_relocs = elf_link_read_relocs (abfd, o, (PTR) NULL,
936 (Elf_Internal_Rela *) NULL,
937 info->keep_memory);
938 if (internal_relocs == NULL)
939 goto error_return;
940
941 ok = (*check_relocs) (abfd, info, o, internal_relocs);
942
943 if (! info->keep_memory)
944 free (internal_relocs);
945
946 if (! ok)
947 goto error_return;
948 }
949 }
950
951 return true;
952
953 error_return:
954 if (buf != NULL)
955 free (buf);
956 if (dynbuf != NULL)
957 free (dynbuf);
958 return false;
959 }
960
961 /* Create some sections which will be filled in with dynamic linking
962 information. ABFD is an input file which requires dynamic sections
963 to be created. The dynamic sections take up virtual memory space
964 when the final executable is run, so we need to create them before
965 addresses are assigned to the output sections. We work out the
966 actual contents and size of these sections later. */
967
968 boolean
969 elf_link_create_dynamic_sections (abfd, info)
970 bfd *abfd;
971 struct bfd_link_info *info;
972 {
973 flagword flags;
974 register asection *s;
975 struct elf_link_hash_entry *h;
976 struct elf_backend_data *bed;
977
978 if (elf_hash_table (info)->dynamic_sections_created)
979 return true;
980
981 /* Make sure that all dynamic sections use the same input BFD. */
982 if (elf_hash_table (info)->dynobj == NULL)
983 elf_hash_table (info)->dynobj = abfd;
984 else
985 abfd = elf_hash_table (info)->dynobj;
986
987 /* Note that we set the SEC_IN_MEMORY flag for all of these
988 sections. */
989 flags = SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY;
990
991 /* A dynamically linked executable has a .interp section, but a
992 shared library does not. */
993 if (! info->shared)
994 {
995 s = bfd_make_section (abfd, ".interp");
996 if (s == NULL
997 || ! bfd_set_section_flags (abfd, s, flags | SEC_READONLY))
998 return false;
999 }
1000
1001 s = bfd_make_section (abfd, ".dynsym");
1002 if (s == NULL
1003 || ! bfd_set_section_flags (abfd, s, flags | SEC_READONLY)
1004 || ! bfd_set_section_alignment (abfd, s, LOG_FILE_ALIGN))
1005 return false;
1006
1007 s = bfd_make_section (abfd, ".dynstr");
1008 if (s == NULL
1009 || ! bfd_set_section_flags (abfd, s, flags | SEC_READONLY))
1010 return false;
1011
1012 /* Create a strtab to hold the dynamic symbol names. */
1013 if (elf_hash_table (info)->dynstr == NULL)
1014 {
1015 elf_hash_table (info)->dynstr = elf_stringtab_init ();
1016 if (elf_hash_table (info)->dynstr == NULL)
1017 return false;
1018 }
1019
1020 s = bfd_make_section (abfd, ".dynamic");
1021 if (s == NULL
1022 || ! bfd_set_section_flags (abfd, s, flags)
1023 || ! bfd_set_section_alignment (abfd, s, LOG_FILE_ALIGN))
1024 return false;
1025
1026 /* The special symbol _DYNAMIC is always set to the start of the
1027 .dynamic section. This call occurs before we have processed the
1028 symbols for any dynamic object, so we don't have to worry about
1029 overriding a dynamic definition. We could set _DYNAMIC in a
1030 linker script, but we only want to define it if we are, in fact,
1031 creating a .dynamic section. We don't want to define it if there
1032 is no .dynamic section, since on some ELF platforms the start up
1033 code examines it to decide how to initialize the process. */
1034 h = NULL;
1035 if (! (_bfd_generic_link_add_one_symbol
1036 (info, abfd, "_DYNAMIC", BSF_GLOBAL, s, (bfd_vma) 0,
1037 (const char *) NULL, false, get_elf_backend_data (abfd)->collect,
1038 (struct bfd_link_hash_entry **) &h)))
1039 return false;
1040 h->elf_link_hash_flags |= ELF_LINK_HASH_DEF_REGULAR;
1041 h->type = STT_OBJECT;
1042
1043 if (info->shared
1044 && ! _bfd_elf_link_record_dynamic_symbol (info, h))
1045 return false;
1046
1047 s = bfd_make_section (abfd, ".hash");
1048 if (s == NULL
1049 || ! bfd_set_section_flags (abfd, s, flags | SEC_READONLY)
1050 || ! bfd_set_section_alignment (abfd, s, LOG_FILE_ALIGN))
1051 return false;
1052
1053 /* Let the backend create the rest of the sections. This lets the
1054 backend set the right flags. The backend will normally create
1055 the .got and .plt sections. */
1056 bed = get_elf_backend_data (abfd);
1057 if (! (*bed->elf_backend_create_dynamic_sections) (abfd, info))
1058 return false;
1059
1060 elf_hash_table (info)->dynamic_sections_created = true;
1061
1062 return true;
1063 }
1064
1065 /* Add an entry to the .dynamic table. */
1066
1067 boolean
1068 elf_add_dynamic_entry (info, tag, val)
1069 struct bfd_link_info *info;
1070 bfd_vma tag;
1071 bfd_vma val;
1072 {
1073 Elf_Internal_Dyn dyn;
1074 bfd *dynobj;
1075 asection *s;
1076 size_t newsize;
1077 bfd_byte *newcontents;
1078
1079 dynobj = elf_hash_table (info)->dynobj;
1080
1081 s = bfd_get_section_by_name (dynobj, ".dynamic");
1082 BFD_ASSERT (s != NULL);
1083
1084 newsize = s->_raw_size + sizeof (Elf_External_Dyn);
1085 newcontents = (bfd_byte *) bfd_realloc (s->contents, newsize);
1086 if (newcontents == NULL)
1087 return false;
1088
1089 dyn.d_tag = tag;
1090 dyn.d_un.d_val = val;
1091 elf_swap_dyn_out (dynobj, &dyn,
1092 (Elf_External_Dyn *) (newcontents + s->_raw_size));
1093
1094 s->_raw_size = newsize;
1095 s->contents = newcontents;
1096
1097 return true;
1098 }
1099
1100 /* Read and swap the relocs for a section. They may have been cached.
1101 If the EXTERNAL_RELOCS and INTERNAL_RELOCS arguments are not NULL,
1102 they are used as buffers to read into. They are known to be large
1103 enough. If the INTERNAL_RELOCS relocs argument is NULL, the return
1104 value is allocated using either malloc or bfd_alloc, according to
1105 the KEEP_MEMORY argument. */
1106
1107 static Elf_Internal_Rela *
1108 elf_link_read_relocs (abfd, o, external_relocs, internal_relocs, keep_memory)
1109 bfd *abfd;
1110 asection *o;
1111 PTR external_relocs;
1112 Elf_Internal_Rela *internal_relocs;
1113 boolean keep_memory;
1114 {
1115 Elf_Internal_Shdr *rel_hdr;
1116 PTR alloc1 = NULL;
1117 Elf_Internal_Rela *alloc2 = NULL;
1118
1119 if (elf_section_data (o)->relocs != NULL)
1120 return elf_section_data (o)->relocs;
1121
1122 if (o->reloc_count == 0)
1123 return NULL;
1124
1125 rel_hdr = &elf_section_data (o)->rel_hdr;
1126
1127 if (internal_relocs == NULL)
1128 {
1129 size_t size;
1130
1131 size = o->reloc_count * sizeof (Elf_Internal_Rela);
1132 if (keep_memory)
1133 internal_relocs = (Elf_Internal_Rela *) bfd_alloc (abfd, size);
1134 else
1135 internal_relocs = alloc2 = (Elf_Internal_Rela *) bfd_malloc (size);
1136 if (internal_relocs == NULL)
1137 goto error_return;
1138 }
1139
1140 if (external_relocs == NULL)
1141 {
1142 alloc1 = (PTR) bfd_malloc ((size_t) rel_hdr->sh_size);
1143 if (alloc1 == NULL)
1144 goto error_return;
1145 external_relocs = alloc1;
1146 }
1147
1148 if ((bfd_seek (abfd, rel_hdr->sh_offset, SEEK_SET) != 0)
1149 || (bfd_read (external_relocs, 1, rel_hdr->sh_size, abfd)
1150 != rel_hdr->sh_size))
1151 goto error_return;
1152
1153 /* Swap in the relocs. For convenience, we always produce an
1154 Elf_Internal_Rela array; if the relocs are Rel, we set the addend
1155 to 0. */
1156 if (rel_hdr->sh_entsize == sizeof (Elf_External_Rel))
1157 {
1158 Elf_External_Rel *erel;
1159 Elf_External_Rel *erelend;
1160 Elf_Internal_Rela *irela;
1161
1162 erel = (Elf_External_Rel *) external_relocs;
1163 erelend = erel + o->reloc_count;
1164 irela = internal_relocs;
1165 for (; erel < erelend; erel++, irela++)
1166 {
1167 Elf_Internal_Rel irel;
1168
1169 elf_swap_reloc_in (abfd, erel, &irel);
1170 irela->r_offset = irel.r_offset;
1171 irela->r_info = irel.r_info;
1172 irela->r_addend = 0;
1173 }
1174 }
1175 else
1176 {
1177 Elf_External_Rela *erela;
1178 Elf_External_Rela *erelaend;
1179 Elf_Internal_Rela *irela;
1180
1181 BFD_ASSERT (rel_hdr->sh_entsize == sizeof (Elf_External_Rela));
1182
1183 erela = (Elf_External_Rela *) external_relocs;
1184 erelaend = erela + o->reloc_count;
1185 irela = internal_relocs;
1186 for (; erela < erelaend; erela++, irela++)
1187 elf_swap_reloca_in (abfd, erela, irela);
1188 }
1189
1190 /* Cache the results for next time, if we can. */
1191 if (keep_memory)
1192 elf_section_data (o)->relocs = internal_relocs;
1193
1194 if (alloc1 != NULL)
1195 free (alloc1);
1196
1197 /* Don't free alloc2, since if it was allocated we are passing it
1198 back (under the name of internal_relocs). */
1199
1200 return internal_relocs;
1201
1202 error_return:
1203 if (alloc1 != NULL)
1204 free (alloc1);
1205 if (alloc2 != NULL)
1206 free (alloc2);
1207 return NULL;
1208 }
1209
1210 /* Record an assignment to a symbol made by a linker script. We need
1211 this in case some dynamic object refers to this symbol. */
1212
1213 /*ARGSUSED*/
1214 boolean
1215 NAME(bfd_elf,record_link_assignment) (output_bfd, info, name, provide)
1216 bfd *output_bfd;
1217 struct bfd_link_info *info;
1218 const char *name;
1219 boolean provide;
1220 {
1221 struct elf_link_hash_entry *h;
1222
1223 if (info->hash->creator->flavour != bfd_target_elf_flavour)
1224 return true;
1225
1226 h = elf_link_hash_lookup (elf_hash_table (info), name, true, true, false);
1227 if (h == NULL)
1228 return false;
1229
1230 /* If this symbol is being provided by the linker script, and it is
1231 currently defined by a dynamic object, but not by a regular
1232 object, then mark it as undefined so that the generic linker will
1233 force the correct value. */
1234 if (provide
1235 && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) != 0
1236 && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0)
1237 h->root.type = bfd_link_hash_undefined;
1238
1239 h->elf_link_hash_flags |= ELF_LINK_HASH_DEF_REGULAR;
1240 h->type = STT_OBJECT;
1241
1242 if (((h->elf_link_hash_flags & (ELF_LINK_HASH_DEF_DYNAMIC
1243 | ELF_LINK_HASH_REF_DYNAMIC)) != 0
1244 || info->shared)
1245 && h->dynindx == -1)
1246 {
1247 if (! _bfd_elf_link_record_dynamic_symbol (info, h))
1248 return false;
1249
1250 /* If this is a weak defined symbol, and we know a corresponding
1251 real symbol from the same dynamic object, make sure the real
1252 symbol is also made into a dynamic symbol. */
1253 if (h->weakdef != NULL
1254 && h->weakdef->dynindx == -1)
1255 {
1256 if (! _bfd_elf_link_record_dynamic_symbol (info, h->weakdef))
1257 return false;
1258 }
1259 }
1260
1261 return true;
1262 }
1263
1264 /* Array used to determine the number of hash table buckets to use
1265 based on the number of symbols there are. If there are fewer than
1266 3 symbols we use 1 bucket, fewer than 17 symbols we use 3 buckets,
1267 fewer than 37 we use 17 buckets, and so forth. We never use more
1268 than 521 buckets. */
1269
1270 static const size_t elf_buckets[] =
1271 {
1272 1, 3, 17, 37, 67, 97, 131, 197, 263, 521, 0
1273 };
1274
1275 /* Set up the sizes and contents of the ELF dynamic sections. This is
1276 called by the ELF linker emulation before_allocation routine. We
1277 must set the sizes of the sections before the linker sets the
1278 addresses of the various sections. */
1279
1280 boolean
1281 NAME(bfd_elf,size_dynamic_sections) (output_bfd, soname, rpath,
1282 export_dynamic, info, sinterpptr)
1283 bfd *output_bfd;
1284 const char *soname;
1285 const char *rpath;
1286 boolean export_dynamic;
1287 struct bfd_link_info *info;
1288 asection **sinterpptr;
1289 {
1290 bfd *dynobj;
1291 struct elf_backend_data *bed;
1292
1293 *sinterpptr = NULL;
1294
1295 if (info->hash->creator->flavour != bfd_target_elf_flavour)
1296 return true;
1297
1298 dynobj = elf_hash_table (info)->dynobj;
1299
1300 /* If there were no dynamic objects in the link, there is nothing to
1301 do here. */
1302 if (dynobj == NULL)
1303 return true;
1304
1305 /* If we are supposed to export all symbols into the dynamic symbol
1306 table (this is not the normal case), then do so. */
1307 if (export_dynamic)
1308 {
1309 struct elf_info_failed eif;
1310
1311 eif.failed = false;
1312 eif.info = info;
1313 elf_link_hash_traverse (elf_hash_table (info), elf_export_symbol,
1314 (PTR) &eif);
1315 if (eif.failed)
1316 return false;
1317 }
1318
1319 if (elf_hash_table (info)->dynamic_sections_created)
1320 {
1321 struct elf_info_failed eif;
1322 struct elf_link_hash_entry *h;
1323 bfd_size_type strsize;
1324
1325 *sinterpptr = bfd_get_section_by_name (dynobj, ".interp");
1326 BFD_ASSERT (*sinterpptr != NULL || info->shared);
1327
1328 if (soname != NULL)
1329 {
1330 bfd_size_type indx;
1331
1332 indx = _bfd_stringtab_add (elf_hash_table (info)->dynstr, soname,
1333 true, true);
1334 if (indx == (bfd_size_type) -1
1335 || ! elf_add_dynamic_entry (info, DT_SONAME, indx))
1336 return false;
1337 }
1338
1339 if (info->symbolic)
1340 {
1341 if (! elf_add_dynamic_entry (info, DT_SYMBOLIC, 0))
1342 return false;
1343 }
1344
1345 if (rpath != NULL)
1346 {
1347 bfd_size_type indx;
1348
1349 indx = _bfd_stringtab_add (elf_hash_table (info)->dynstr, rpath,
1350 true, true);
1351 if (indx == (bfd_size_type) -1
1352 || ! elf_add_dynamic_entry (info, DT_RPATH, indx))
1353 return false;
1354 }
1355
1356 /* Find all symbols which were defined in a dynamic object and make
1357 the backend pick a reasonable value for them. */
1358 eif.failed = false;
1359 eif.info = info;
1360 elf_link_hash_traverse (elf_hash_table (info),
1361 elf_adjust_dynamic_symbol,
1362 (PTR) &eif);
1363 if (eif.failed)
1364 return false;
1365
1366 /* Add some entries to the .dynamic section. We fill in some of the
1367 values later, in elf_bfd_final_link, but we must add the entries
1368 now so that we know the final size of the .dynamic section. */
1369 h = elf_link_hash_lookup (elf_hash_table (info), "_init", false,
1370 false, false);
1371 if (h != NULL
1372 && (h->elf_link_hash_flags & (ELF_LINK_HASH_REF_REGULAR
1373 | ELF_LINK_HASH_DEF_REGULAR)) != 0)
1374 {
1375 if (! elf_add_dynamic_entry (info, DT_INIT, 0))
1376 return false;
1377 }
1378 h = elf_link_hash_lookup (elf_hash_table (info), "_fini", false,
1379 false, false);
1380 if (h != NULL
1381 && (h->elf_link_hash_flags & (ELF_LINK_HASH_REF_REGULAR
1382 | ELF_LINK_HASH_DEF_REGULAR)) != 0)
1383 {
1384 if (! elf_add_dynamic_entry (info, DT_FINI, 0))
1385 return false;
1386 }
1387 strsize = _bfd_stringtab_size (elf_hash_table (info)->dynstr);
1388 if (! elf_add_dynamic_entry (info, DT_HASH, 0)
1389 || ! elf_add_dynamic_entry (info, DT_STRTAB, 0)
1390 || ! elf_add_dynamic_entry (info, DT_SYMTAB, 0)
1391 || ! elf_add_dynamic_entry (info, DT_STRSZ, strsize)
1392 || ! elf_add_dynamic_entry (info, DT_SYMENT,
1393 sizeof (Elf_External_Sym)))
1394 return false;
1395 }
1396
1397 /* The backend must work out the sizes of all the other dynamic
1398 sections. */
1399 bed = get_elf_backend_data (output_bfd);
1400 if (! (*bed->elf_backend_size_dynamic_sections) (output_bfd, info))
1401 return false;
1402
1403 if (elf_hash_table (info)->dynamic_sections_created)
1404 {
1405 size_t dynsymcount;
1406 asection *s;
1407 size_t i;
1408 size_t bucketcount = 0;
1409 Elf_Internal_Sym isym;
1410
1411 /* Set the size of the .dynsym and .hash sections. We counted
1412 the number of dynamic symbols in elf_link_add_object_symbols.
1413 We will build the contents of .dynsym and .hash when we build
1414 the final symbol table, because until then we do not know the
1415 correct value to give the symbols. We built the .dynstr
1416 section as we went along in elf_link_add_object_symbols. */
1417 dynsymcount = elf_hash_table (info)->dynsymcount;
1418 s = bfd_get_section_by_name (dynobj, ".dynsym");
1419 BFD_ASSERT (s != NULL);
1420 s->_raw_size = dynsymcount * sizeof (Elf_External_Sym);
1421 s->contents = (bfd_byte *) bfd_alloc (output_bfd, s->_raw_size);
1422 if (s->contents == NULL && s->_raw_size != 0)
1423 return false;
1424
1425 /* The first entry in .dynsym is a dummy symbol. */
1426 isym.st_value = 0;
1427 isym.st_size = 0;
1428 isym.st_name = 0;
1429 isym.st_info = 0;
1430 isym.st_other = 0;
1431 isym.st_shndx = 0;
1432 elf_swap_symbol_out (output_bfd, &isym,
1433 (PTR) (Elf_External_Sym *) s->contents);
1434
1435 for (i = 0; elf_buckets[i] != 0; i++)
1436 {
1437 bucketcount = elf_buckets[i];
1438 if (dynsymcount < elf_buckets[i + 1])
1439 break;
1440 }
1441
1442 s = bfd_get_section_by_name (dynobj, ".hash");
1443 BFD_ASSERT (s != NULL);
1444 s->_raw_size = (2 + bucketcount + dynsymcount) * (ARCH_SIZE / 8);
1445 s->contents = (bfd_byte *) bfd_alloc (output_bfd, s->_raw_size);
1446 if (s->contents == NULL)
1447 return false;
1448 memset (s->contents, 0, (size_t) s->_raw_size);
1449
1450 put_word (output_bfd, bucketcount, s->contents);
1451 put_word (output_bfd, dynsymcount, s->contents + (ARCH_SIZE / 8));
1452
1453 elf_hash_table (info)->bucketcount = bucketcount;
1454
1455 s = bfd_get_section_by_name (dynobj, ".dynstr");
1456 BFD_ASSERT (s != NULL);
1457 s->_raw_size = _bfd_stringtab_size (elf_hash_table (info)->dynstr);
1458
1459 if (! elf_add_dynamic_entry (info, DT_NULL, 0))
1460 return false;
1461 }
1462
1463 return true;
1464 }
1465
1466 /* This routine is used to export all defined symbols into the dynamic
1467 symbol table. It is called via elf_link_hash_traverse. */
1468
1469 static boolean
1470 elf_export_symbol (h, data)
1471 struct elf_link_hash_entry *h;
1472 PTR data;
1473 {
1474 struct elf_info_failed *eif = (struct elf_info_failed *) data;
1475
1476 if (h->dynindx == -1
1477 && (h->elf_link_hash_flags
1478 & (ELF_LINK_HASH_DEF_REGULAR | ELF_LINK_HASH_REF_REGULAR)) != 0)
1479 {
1480 if (! _bfd_elf_link_record_dynamic_symbol (eif->info, h))
1481 {
1482 eif->failed = true;
1483 return false;
1484 }
1485 }
1486
1487 return true;
1488 }
1489
1490 /* Make the backend pick a good value for a dynamic symbol. This is
1491 called via elf_link_hash_traverse, and also calls itself
1492 recursively. */
1493
1494 static boolean
1495 elf_adjust_dynamic_symbol (h, data)
1496 struct elf_link_hash_entry *h;
1497 PTR data;
1498 {
1499 struct elf_info_failed *eif = (struct elf_info_failed *) data;
1500 bfd *dynobj;
1501 struct elf_backend_data *bed;
1502
1503 /* If -Bsymbolic was used (which means to bind references to global
1504 symbols to the definition within the shared object), and this
1505 symbol was defined in a regular object, then it actually doesn't
1506 need a PLT entry. */
1507 if ((h->elf_link_hash_flags & ELF_LINK_HASH_NEEDS_PLT) != 0
1508 && eif->info->shared
1509 && eif->info->symbolic
1510 && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) != 0)
1511 h->elf_link_hash_flags &=~ ELF_LINK_HASH_NEEDS_PLT;
1512
1513 /* If this symbol does not require a PLT entry, and it is not
1514 defined by a dynamic object, or is not referenced by a regular
1515 object, ignore it. We do have to handle a weak defined symbol,
1516 even if no regular object refers to it, if we decided to add it
1517 to the dynamic symbol table. FIXME: Do we normally need to worry
1518 about symbols which are defined by one dynamic object and
1519 referenced by another one? */
1520 if ((h->elf_link_hash_flags & ELF_LINK_HASH_NEEDS_PLT) == 0
1521 && ((h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) != 0
1522 || (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) == 0
1523 || ((h->elf_link_hash_flags & ELF_LINK_HASH_REF_REGULAR) == 0
1524 && (h->weakdef == NULL || h->weakdef->dynindx == -1))))
1525 return true;
1526
1527 /* If we've already adjusted this symbol, don't do it again. This
1528 can happen via a recursive call. */
1529 if ((h->elf_link_hash_flags & ELF_LINK_HASH_DYNAMIC_ADJUSTED) != 0)
1530 return true;
1531
1532 /* Don't look at this symbol again. Note that we must set this
1533 after checking the above conditions, because we may look at a
1534 symbol once, decide not to do anything, and then get called
1535 recursively later after REF_REGULAR is set below. */
1536 h->elf_link_hash_flags |= ELF_LINK_HASH_DYNAMIC_ADJUSTED;
1537
1538 /* If this is a weak definition, and we know a real definition, and
1539 the real symbol is not itself defined by a regular object file,
1540 then get a good value for the real definition. We handle the
1541 real symbol first, for the convenience of the backend routine.
1542
1543 Note that there is a confusing case here. If the real definition
1544 is defined by a regular object file, we don't get the real symbol
1545 from the dynamic object, but we do get the weak symbol. If the
1546 processor backend uses a COPY reloc, then if some routine in the
1547 dynamic object changes the real symbol, we will not see that
1548 change in the corresponding weak symbol. This is the way other
1549 ELF linkers work as well, and seems to be a result of the shared
1550 library model.
1551
1552 I will clarify this issue. Most SVR4 shared libraries define the
1553 variable _timezone and define timezone as a weak synonym. The
1554 tzset call changes _timezone. If you write
1555 extern int timezone;
1556 int _timezone = 5;
1557 int main () { tzset (); printf ("%d %d\n", timezone, _timezone); }
1558 you might expect that, since timezone is a synonym for _timezone,
1559 the same number will print both times. However, if the processor
1560 backend uses a COPY reloc, then actually timezone will be copied
1561 into your process image, and, since you define _timezone
1562 yourself, _timezone will not. Thus timezone and _timezone will
1563 wind up at different memory locations. The tzset call will set
1564 _timezone, leaving timezone unchanged. */
1565
1566 if (h->weakdef != NULL)
1567 {
1568 struct elf_link_hash_entry *weakdef;
1569
1570 BFD_ASSERT (h->root.type == bfd_link_hash_defined
1571 || h->root.type == bfd_link_hash_defweak);
1572 weakdef = h->weakdef;
1573 BFD_ASSERT (weakdef->root.type == bfd_link_hash_defined
1574 || weakdef->root.type == bfd_link_hash_defweak);
1575 BFD_ASSERT (weakdef->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC);
1576 if ((weakdef->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) != 0)
1577 {
1578 /* This symbol is defined by a regular object file, so we
1579 will not do anything special. Clear weakdef for the
1580 convenience of the processor backend. */
1581 h->weakdef = NULL;
1582 }
1583 else
1584 {
1585 /* There is an implicit reference by a regular object file
1586 via the weak symbol. */
1587 weakdef->elf_link_hash_flags |= ELF_LINK_HASH_REF_REGULAR;
1588 if (! elf_adjust_dynamic_symbol (weakdef, (PTR) eif))
1589 return false;
1590 }
1591 }
1592
1593 dynobj = elf_hash_table (eif->info)->dynobj;
1594 bed = get_elf_backend_data (dynobj);
1595 if (! (*bed->elf_backend_adjust_dynamic_symbol) (eif->info, h))
1596 {
1597 eif->failed = true;
1598 return false;
1599 }
1600
1601 return true;
1602 }
1603 \f
1604 /* Final phase of ELF linker. */
1605
1606 /* A structure we use to avoid passing large numbers of arguments. */
1607
1608 struct elf_final_link_info
1609 {
1610 /* General link information. */
1611 struct bfd_link_info *info;
1612 /* Output BFD. */
1613 bfd *output_bfd;
1614 /* Symbol string table. */
1615 struct bfd_strtab_hash *symstrtab;
1616 /* .dynsym section. */
1617 asection *dynsym_sec;
1618 /* .hash section. */
1619 asection *hash_sec;
1620 /* Buffer large enough to hold contents of any section. */
1621 bfd_byte *contents;
1622 /* Buffer large enough to hold external relocs of any section. */
1623 PTR external_relocs;
1624 /* Buffer large enough to hold internal relocs of any section. */
1625 Elf_Internal_Rela *internal_relocs;
1626 /* Buffer large enough to hold external local symbols of any input
1627 BFD. */
1628 Elf_External_Sym *external_syms;
1629 /* Buffer large enough to hold internal local symbols of any input
1630 BFD. */
1631 Elf_Internal_Sym *internal_syms;
1632 /* Array large enough to hold a symbol index for each local symbol
1633 of any input BFD. */
1634 long *indices;
1635 /* Array large enough to hold a section pointer for each local
1636 symbol of any input BFD. */
1637 asection **sections;
1638 /* Buffer to hold swapped out symbols. */
1639 Elf_External_Sym *symbuf;
1640 /* Number of swapped out symbols in buffer. */
1641 size_t symbuf_count;
1642 /* Number of symbols which fit in symbuf. */
1643 size_t symbuf_size;
1644 };
1645
1646 static boolean elf_link_output_sym
1647 PARAMS ((struct elf_final_link_info *, const char *,
1648 Elf_Internal_Sym *, asection *));
1649 static boolean elf_link_flush_output_syms
1650 PARAMS ((struct elf_final_link_info *));
1651 static boolean elf_link_output_extsym
1652 PARAMS ((struct elf_link_hash_entry *, PTR));
1653 static boolean elf_link_input_bfd
1654 PARAMS ((struct elf_final_link_info *, bfd *));
1655 static boolean elf_reloc_link_order
1656 PARAMS ((bfd *, struct bfd_link_info *, asection *,
1657 struct bfd_link_order *));
1658
1659 /* This struct is used to pass information to routines called via
1660 elf_link_hash_traverse which must return failure. */
1661
1662 struct elf_finfo_failed
1663 {
1664 boolean failed;
1665 struct elf_final_link_info *finfo;
1666 };
1667
1668 /* Do the final step of an ELF link. */
1669
1670 boolean
1671 elf_bfd_final_link (abfd, info)
1672 bfd *abfd;
1673 struct bfd_link_info *info;
1674 {
1675 boolean dynamic;
1676 bfd *dynobj;
1677 struct elf_final_link_info finfo;
1678 register asection *o;
1679 register struct bfd_link_order *p;
1680 register bfd *sub;
1681 size_t max_contents_size;
1682 size_t max_external_reloc_size;
1683 size_t max_internal_reloc_count;
1684 size_t max_sym_count;
1685 file_ptr off;
1686 Elf_Internal_Sym elfsym;
1687 unsigned int i;
1688 Elf_Internal_Shdr *symtab_hdr;
1689 Elf_Internal_Shdr *symstrtab_hdr;
1690 struct elf_backend_data *bed = get_elf_backend_data (abfd);
1691 struct elf_finfo_failed eif;
1692
1693 if (info->shared)
1694 abfd->flags |= DYNAMIC;
1695
1696 dynamic = elf_hash_table (info)->dynamic_sections_created;
1697 dynobj = elf_hash_table (info)->dynobj;
1698
1699 finfo.info = info;
1700 finfo.output_bfd = abfd;
1701 finfo.symstrtab = elf_stringtab_init ();
1702 if (finfo.symstrtab == NULL)
1703 return false;
1704 if (! dynamic)
1705 {
1706 finfo.dynsym_sec = NULL;
1707 finfo.hash_sec = NULL;
1708 }
1709 else
1710 {
1711 finfo.dynsym_sec = bfd_get_section_by_name (dynobj, ".dynsym");
1712 finfo.hash_sec = bfd_get_section_by_name (dynobj, ".hash");
1713 BFD_ASSERT (finfo.dynsym_sec != NULL && finfo.hash_sec != NULL);
1714 }
1715 finfo.contents = NULL;
1716 finfo.external_relocs = NULL;
1717 finfo.internal_relocs = NULL;
1718 finfo.external_syms = NULL;
1719 finfo.internal_syms = NULL;
1720 finfo.indices = NULL;
1721 finfo.sections = NULL;
1722 finfo.symbuf = NULL;
1723 finfo.symbuf_count = 0;
1724
1725 /* Count up the number of relocations we will output for each output
1726 section, so that we know the sizes of the reloc sections. We
1727 also figure out some maximum sizes. */
1728 max_contents_size = 0;
1729 max_external_reloc_size = 0;
1730 max_internal_reloc_count = 0;
1731 max_sym_count = 0;
1732 for (o = abfd->sections; o != (asection *) NULL; o = o->next)
1733 {
1734 o->reloc_count = 0;
1735
1736 for (p = o->link_order_head; p != NULL; p = p->next)
1737 {
1738 if (p->type == bfd_section_reloc_link_order
1739 || p->type == bfd_symbol_reloc_link_order)
1740 ++o->reloc_count;
1741 else if (p->type == bfd_indirect_link_order)
1742 {
1743 asection *sec;
1744
1745 sec = p->u.indirect.section;
1746
1747 if (info->relocateable)
1748 o->reloc_count += sec->reloc_count;
1749
1750 if (sec->_raw_size > max_contents_size)
1751 max_contents_size = sec->_raw_size;
1752 if (sec->_cooked_size > max_contents_size)
1753 max_contents_size = sec->_cooked_size;
1754
1755 /* We are interested in just local symbols, not all
1756 symbols. */
1757 if (bfd_get_flavour (sec->owner) == bfd_target_elf_flavour)
1758 {
1759 size_t sym_count;
1760
1761 if (elf_bad_symtab (sec->owner))
1762 sym_count = (elf_tdata (sec->owner)->symtab_hdr.sh_size
1763 / sizeof (Elf_External_Sym));
1764 else
1765 sym_count = elf_tdata (sec->owner)->symtab_hdr.sh_info;
1766
1767 if (sym_count > max_sym_count)
1768 max_sym_count = sym_count;
1769
1770 if ((sec->flags & SEC_RELOC) != 0)
1771 {
1772 size_t ext_size;
1773
1774 ext_size = elf_section_data (sec)->rel_hdr.sh_size;
1775 if (ext_size > max_external_reloc_size)
1776 max_external_reloc_size = ext_size;
1777 if (sec->reloc_count > max_internal_reloc_count)
1778 max_internal_reloc_count = sec->reloc_count;
1779 }
1780 }
1781 }
1782 }
1783
1784 if (o->reloc_count > 0)
1785 o->flags |= SEC_RELOC;
1786 else
1787 {
1788 /* Explicitly clear the SEC_RELOC flag. The linker tends to
1789 set it (this is probably a bug) and if it is set
1790 assign_section_numbers will create a reloc section. */
1791 o->flags &=~ SEC_RELOC;
1792 }
1793
1794 /* If the SEC_ALLOC flag is not set, force the section VMA to
1795 zero. This is done in elf_fake_sections as well, but forcing
1796 the VMA to 0 here will ensure that relocs against these
1797 sections are handled correctly. */
1798 if ((o->flags & SEC_ALLOC) == 0)
1799 o->vma = 0;
1800 }
1801
1802 /* Figure out the file positions for everything but the symbol table
1803 and the relocs. We set symcount to force assign_section_numbers
1804 to create a symbol table. */
1805 abfd->symcount = info->strip == strip_all ? 0 : 1;
1806 BFD_ASSERT (! abfd->output_has_begun);
1807 if (! _bfd_elf_compute_section_file_positions (abfd, info))
1808 goto error_return;
1809
1810 /* That created the reloc sections. Set their sizes, and assign
1811 them file positions, and allocate some buffers. */
1812 for (o = abfd->sections; o != NULL; o = o->next)
1813 {
1814 if ((o->flags & SEC_RELOC) != 0)
1815 {
1816 Elf_Internal_Shdr *rel_hdr;
1817 register struct elf_link_hash_entry **p, **pend;
1818
1819 rel_hdr = &elf_section_data (o)->rel_hdr;
1820
1821 rel_hdr->sh_size = rel_hdr->sh_entsize * o->reloc_count;
1822
1823 /* The contents field must last into write_object_contents,
1824 so we allocate it with bfd_alloc rather than malloc. */
1825 rel_hdr->contents = (PTR) bfd_alloc (abfd, rel_hdr->sh_size);
1826 if (rel_hdr->contents == NULL && rel_hdr->sh_size != 0)
1827 goto error_return;
1828
1829 p = ((struct elf_link_hash_entry **)
1830 bfd_malloc (o->reloc_count
1831 * sizeof (struct elf_link_hash_entry *)));
1832 if (p == NULL && o->reloc_count != 0)
1833 goto error_return;
1834 elf_section_data (o)->rel_hashes = p;
1835 pend = p + o->reloc_count;
1836 for (; p < pend; p++)
1837 *p = NULL;
1838
1839 /* Use the reloc_count field as an index when outputting the
1840 relocs. */
1841 o->reloc_count = 0;
1842 }
1843 }
1844
1845 _bfd_elf_assign_file_positions_for_relocs (abfd);
1846
1847 /* We have now assigned file positions for all the sections except
1848 .symtab and .strtab. We start the .symtab section at the current
1849 file position, and write directly to it. We build the .strtab
1850 section in memory. */
1851 abfd->symcount = 0;
1852 symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
1853 /* sh_name is set in prep_headers. */
1854 symtab_hdr->sh_type = SHT_SYMTAB;
1855 symtab_hdr->sh_flags = 0;
1856 symtab_hdr->sh_addr = 0;
1857 symtab_hdr->sh_size = 0;
1858 symtab_hdr->sh_entsize = sizeof (Elf_External_Sym);
1859 /* sh_link is set in assign_section_numbers. */
1860 /* sh_info is set below. */
1861 /* sh_offset is set just below. */
1862 symtab_hdr->sh_addralign = 4; /* FIXME: system dependent? */
1863
1864 off = elf_tdata (abfd)->next_file_pos;
1865 off = _bfd_elf_assign_file_position_for_section (symtab_hdr, off, true);
1866
1867 /* Note that at this point elf_tdata (abfd)->next_file_pos is
1868 incorrect. We do not yet know the size of the .symtab section.
1869 We correct next_file_pos below, after we do know the size. */
1870
1871 /* Allocate a buffer to hold swapped out symbols. This is to avoid
1872 continuously seeking to the right position in the file. */
1873 if (! info->keep_memory || max_sym_count < 20)
1874 finfo.symbuf_size = 20;
1875 else
1876 finfo.symbuf_size = max_sym_count;
1877 finfo.symbuf = ((Elf_External_Sym *)
1878 bfd_malloc (finfo.symbuf_size * sizeof (Elf_External_Sym)));
1879 if (finfo.symbuf == NULL)
1880 goto error_return;
1881
1882 /* Start writing out the symbol table. The first symbol is always a
1883 dummy symbol. */
1884 elfsym.st_value = 0;
1885 elfsym.st_size = 0;
1886 elfsym.st_info = 0;
1887 elfsym.st_other = 0;
1888 elfsym.st_shndx = SHN_UNDEF;
1889 if (! elf_link_output_sym (&finfo, (const char *) NULL,
1890 &elfsym, bfd_und_section_ptr))
1891 goto error_return;
1892
1893 #if 0
1894 /* Some standard ELF linkers do this, but we don't because it causes
1895 bootstrap comparison failures. */
1896 /* Output a file symbol for the output file as the second symbol.
1897 We output this even if we are discarding local symbols, although
1898 I'm not sure if this is correct. */
1899 elfsym.st_value = 0;
1900 elfsym.st_size = 0;
1901 elfsym.st_info = ELF_ST_INFO (STB_LOCAL, STT_FILE);
1902 elfsym.st_other = 0;
1903 elfsym.st_shndx = SHN_ABS;
1904 if (! elf_link_output_sym (&finfo, bfd_get_filename (abfd),
1905 &elfsym, bfd_abs_section_ptr))
1906 goto error_return;
1907 #endif
1908
1909 /* Output a symbol for each section. We output these even if we are
1910 discarding local symbols, since they are used for relocs. These
1911 symbols have no names. We store the index of each one in the
1912 index field of the section, so that we can find it again when
1913 outputting relocs. */
1914 elfsym.st_value = 0;
1915 elfsym.st_size = 0;
1916 elfsym.st_info = ELF_ST_INFO (STB_LOCAL, STT_SECTION);
1917 elfsym.st_other = 0;
1918 for (i = 1; i < elf_elfheader (abfd)->e_shnum; i++)
1919 {
1920 o = section_from_elf_index (abfd, i);
1921 if (o != NULL)
1922 o->target_index = abfd->symcount;
1923 elfsym.st_shndx = i;
1924 if (! elf_link_output_sym (&finfo, (const char *) NULL,
1925 &elfsym, o))
1926 goto error_return;
1927 }
1928
1929 /* Allocate some memory to hold information read in from the input
1930 files. */
1931 finfo.contents = (bfd_byte *) bfd_malloc (max_contents_size);
1932 finfo.external_relocs = (PTR) bfd_malloc (max_external_reloc_size);
1933 finfo.internal_relocs = ((Elf_Internal_Rela *)
1934 bfd_malloc (max_internal_reloc_count
1935 * sizeof (Elf_Internal_Rela)));
1936 finfo.external_syms = ((Elf_External_Sym *)
1937 bfd_malloc (max_sym_count
1938 * sizeof (Elf_External_Sym)));
1939 finfo.internal_syms = ((Elf_Internal_Sym *)
1940 bfd_malloc (max_sym_count
1941 * sizeof (Elf_Internal_Sym)));
1942 finfo.indices = (long *) bfd_malloc (max_sym_count * sizeof (long));
1943 finfo.sections = ((asection **)
1944 bfd_malloc (max_sym_count * sizeof (asection *)));
1945 if ((finfo.contents == NULL && max_contents_size != 0)
1946 || (finfo.external_relocs == NULL && max_external_reloc_size != 0)
1947 || (finfo.internal_relocs == NULL && max_internal_reloc_count != 0)
1948 || (finfo.external_syms == NULL && max_sym_count != 0)
1949 || (finfo.internal_syms == NULL && max_sym_count != 0)
1950 || (finfo.indices == NULL && max_sym_count != 0)
1951 || (finfo.sections == NULL && max_sym_count != 0))
1952 goto error_return;
1953
1954 /* Since ELF permits relocations to be against local symbols, we
1955 must have the local symbols available when we do the relocations.
1956 Since we would rather only read the local symbols once, and we
1957 would rather not keep them in memory, we handle all the
1958 relocations for a single input file at the same time.
1959
1960 Unfortunately, there is no way to know the total number of local
1961 symbols until we have seen all of them, and the local symbol
1962 indices precede the global symbol indices. This means that when
1963 we are generating relocateable output, and we see a reloc against
1964 a global symbol, we can not know the symbol index until we have
1965 finished examining all the local symbols to see which ones we are
1966 going to output. To deal with this, we keep the relocations in
1967 memory, and don't output them until the end of the link. This is
1968 an unfortunate waste of memory, but I don't see a good way around
1969 it. Fortunately, it only happens when performing a relocateable
1970 link, which is not the common case. FIXME: If keep_memory is set
1971 we could write the relocs out and then read them again; I don't
1972 know how bad the memory loss will be. */
1973
1974 for (sub = info->input_bfds; sub != NULL; sub = sub->next)
1975 sub->output_has_begun = false;
1976 for (o = abfd->sections; o != NULL; o = o->next)
1977 {
1978 for (p = o->link_order_head; p != NULL; p = p->next)
1979 {
1980 if (p->type == bfd_indirect_link_order
1981 && (bfd_get_flavour (p->u.indirect.section->owner)
1982 == bfd_target_elf_flavour))
1983 {
1984 sub = p->u.indirect.section->owner;
1985 if (! sub->output_has_begun)
1986 {
1987 if (! elf_link_input_bfd (&finfo, sub))
1988 goto error_return;
1989 sub->output_has_begun = true;
1990 }
1991 }
1992 else if (p->type == bfd_section_reloc_link_order
1993 || p->type == bfd_symbol_reloc_link_order)
1994 {
1995 if (! elf_reloc_link_order (abfd, info, o, p))
1996 goto error_return;
1997 }
1998 else
1999 {
2000 if (! _bfd_default_link_order (abfd, info, o, p))
2001 goto error_return;
2002 }
2003 }
2004 }
2005
2006 /* That wrote out all the local symbols. Finish up the symbol table
2007 with the global symbols. */
2008
2009 /* The sh_info field records the index of the first non local
2010 symbol. */
2011 symtab_hdr->sh_info = abfd->symcount;
2012 if (dynamic)
2013 elf_section_data (finfo.dynsym_sec->output_section)->this_hdr.sh_info = 1;
2014
2015 /* We get the global symbols from the hash table. */
2016 eif.failed = false;
2017 eif.finfo = &finfo;
2018 elf_link_hash_traverse (elf_hash_table (info), elf_link_output_extsym,
2019 (PTR) &eif);
2020 if (eif.failed)
2021 return false;
2022
2023 /* Flush all symbols to the file. */
2024 if (! elf_link_flush_output_syms (&finfo))
2025 return false;
2026
2027 /* Now we know the size of the symtab section. */
2028 off += symtab_hdr->sh_size;
2029
2030 /* Finish up and write out the symbol string table (.strtab)
2031 section. */
2032 symstrtab_hdr = &elf_tdata (abfd)->strtab_hdr;
2033 /* sh_name was set in prep_headers. */
2034 symstrtab_hdr->sh_type = SHT_STRTAB;
2035 symstrtab_hdr->sh_flags = 0;
2036 symstrtab_hdr->sh_addr = 0;
2037 symstrtab_hdr->sh_size = _bfd_stringtab_size (finfo.symstrtab);
2038 symstrtab_hdr->sh_entsize = 0;
2039 symstrtab_hdr->sh_link = 0;
2040 symstrtab_hdr->sh_info = 0;
2041 /* sh_offset is set just below. */
2042 symstrtab_hdr->sh_addralign = 1;
2043
2044 off = _bfd_elf_assign_file_position_for_section (symstrtab_hdr, off, true);
2045 elf_tdata (abfd)->next_file_pos = off;
2046
2047 if (bfd_seek (abfd, symstrtab_hdr->sh_offset, SEEK_SET) != 0
2048 || ! _bfd_stringtab_emit (abfd, finfo.symstrtab))
2049 return false;
2050
2051 /* Adjust the relocs to have the correct symbol indices. */
2052 for (o = abfd->sections; o != NULL; o = o->next)
2053 {
2054 struct elf_link_hash_entry **rel_hash;
2055 Elf_Internal_Shdr *rel_hdr;
2056
2057 if ((o->flags & SEC_RELOC) == 0)
2058 continue;
2059
2060 rel_hash = elf_section_data (o)->rel_hashes;
2061 rel_hdr = &elf_section_data (o)->rel_hdr;
2062 for (i = 0; i < o->reloc_count; i++, rel_hash++)
2063 {
2064 if (*rel_hash == NULL)
2065 continue;
2066
2067 BFD_ASSERT ((*rel_hash)->indx >= 0);
2068
2069 if (rel_hdr->sh_entsize == sizeof (Elf_External_Rel))
2070 {
2071 Elf_External_Rel *erel;
2072 Elf_Internal_Rel irel;
2073
2074 erel = (Elf_External_Rel *) rel_hdr->contents + i;
2075 elf_swap_reloc_in (abfd, erel, &irel);
2076 irel.r_info = ELF_R_INFO ((*rel_hash)->indx,
2077 ELF_R_TYPE (irel.r_info));
2078 elf_swap_reloc_out (abfd, &irel, erel);
2079 }
2080 else
2081 {
2082 Elf_External_Rela *erela;
2083 Elf_Internal_Rela irela;
2084
2085 BFD_ASSERT (rel_hdr->sh_entsize
2086 == sizeof (Elf_External_Rela));
2087
2088 erela = (Elf_External_Rela *) rel_hdr->contents + i;
2089 elf_swap_reloca_in (abfd, erela, &irela);
2090 irela.r_info = ELF_R_INFO ((*rel_hash)->indx,
2091 ELF_R_TYPE (irela.r_info));
2092 elf_swap_reloca_out (abfd, &irela, erela);
2093 }
2094 }
2095
2096 /* Set the reloc_count field to 0 to prevent write_relocs from
2097 trying to swap the relocs out itself. */
2098 o->reloc_count = 0;
2099 }
2100
2101 /* If we are linking against a dynamic object, or generating a
2102 shared library, finish up the dynamic linking information. */
2103 if (dynamic)
2104 {
2105 Elf_External_Dyn *dyncon, *dynconend;
2106
2107 /* Fix up .dynamic entries. */
2108 o = bfd_get_section_by_name (dynobj, ".dynamic");
2109 BFD_ASSERT (o != NULL);
2110
2111 dyncon = (Elf_External_Dyn *) o->contents;
2112 dynconend = (Elf_External_Dyn *) (o->contents + o->_raw_size);
2113 for (; dyncon < dynconend; dyncon++)
2114 {
2115 Elf_Internal_Dyn dyn;
2116 const char *name;
2117 unsigned int type;
2118
2119 elf_swap_dyn_in (dynobj, dyncon, &dyn);
2120
2121 switch (dyn.d_tag)
2122 {
2123 default:
2124 break;
2125
2126 /* SVR4 linkers seem to set DT_INIT and DT_FINI based on
2127 magic _init and _fini symbols. This is pretty ugly,
2128 but we are compatible. */
2129 case DT_INIT:
2130 name = "_init";
2131 goto get_sym;
2132 case DT_FINI:
2133 name = "_fini";
2134 get_sym:
2135 {
2136 struct elf_link_hash_entry *h;
2137
2138 h = elf_link_hash_lookup (elf_hash_table (info), name,
2139 false, false, true);
2140 if (h != NULL
2141 && (h->root.type == bfd_link_hash_defined
2142 || h->root.type == bfd_link_hash_defweak))
2143 {
2144 dyn.d_un.d_val = h->root.u.def.value;
2145 o = h->root.u.def.section;
2146 if (o->output_section != NULL)
2147 dyn.d_un.d_val += (o->output_section->vma
2148 + o->output_offset);
2149 else
2150 {
2151 /* The symbol is imported from another shared
2152 library and does not apply to this one. */
2153 dyn.d_un.d_val = 0;
2154 }
2155
2156 elf_swap_dyn_out (dynobj, &dyn, dyncon);
2157 }
2158 }
2159 break;
2160
2161 case DT_HASH:
2162 name = ".hash";
2163 goto get_vma;
2164 case DT_STRTAB:
2165 name = ".dynstr";
2166 goto get_vma;
2167 case DT_SYMTAB:
2168 name = ".dynsym";
2169 get_vma:
2170 o = bfd_get_section_by_name (abfd, name);
2171 BFD_ASSERT (o != NULL);
2172 dyn.d_un.d_ptr = o->vma;
2173 elf_swap_dyn_out (dynobj, &dyn, dyncon);
2174 break;
2175
2176 case DT_REL:
2177 case DT_RELA:
2178 case DT_RELSZ:
2179 case DT_RELASZ:
2180 if (dyn.d_tag == DT_REL || dyn.d_tag == DT_RELSZ)
2181 type = SHT_REL;
2182 else
2183 type = SHT_RELA;
2184 dyn.d_un.d_val = 0;
2185 for (i = 1; i < elf_elfheader (abfd)->e_shnum; i++)
2186 {
2187 Elf_Internal_Shdr *hdr;
2188
2189 hdr = elf_elfsections (abfd)[i];
2190 if (hdr->sh_type == type
2191 && (hdr->sh_flags & SHF_ALLOC) != 0)
2192 {
2193 if (dyn.d_tag == DT_RELSZ || dyn.d_tag == DT_RELASZ)
2194 dyn.d_un.d_val += hdr->sh_size;
2195 else
2196 {
2197 if (dyn.d_un.d_val == 0
2198 || hdr->sh_addr < dyn.d_un.d_val)
2199 dyn.d_un.d_val = hdr->sh_addr;
2200 }
2201 }
2202 }
2203 elf_swap_dyn_out (dynobj, &dyn, dyncon);
2204 break;
2205 }
2206 }
2207 }
2208
2209 /* If we have created any dynamic sections, then output them. */
2210 if (dynobj != NULL)
2211 {
2212 if (! (*bed->elf_backend_finish_dynamic_sections) (abfd, info))
2213 goto error_return;
2214
2215 for (o = dynobj->sections; o != NULL; o = o->next)
2216 {
2217 if ((o->flags & SEC_HAS_CONTENTS) == 0
2218 || o->_raw_size == 0)
2219 continue;
2220 if ((o->flags & SEC_IN_MEMORY) == 0)
2221 {
2222 /* At this point, we are only interested in sections
2223 created by elf_link_create_dynamic_sections. FIXME:
2224 This test is fragile. */
2225 continue;
2226 }
2227 if ((elf_section_data (o->output_section)->this_hdr.sh_type
2228 != SHT_STRTAB)
2229 || strcmp (bfd_get_section_name (abfd, o), ".dynstr") != 0)
2230 {
2231 if (! bfd_set_section_contents (abfd, o->output_section,
2232 o->contents, o->output_offset,
2233 o->_raw_size))
2234 goto error_return;
2235 }
2236 else
2237 {
2238 file_ptr off;
2239
2240 /* The contents of the .dynstr section are actually in a
2241 stringtab. */
2242 off = elf_section_data (o->output_section)->this_hdr.sh_offset;
2243 if (bfd_seek (abfd, off, SEEK_SET) != 0
2244 || ! _bfd_stringtab_emit (abfd,
2245 elf_hash_table (info)->dynstr))
2246 goto error_return;
2247 }
2248 }
2249 }
2250
2251 if (finfo.symstrtab != NULL)
2252 _bfd_stringtab_free (finfo.symstrtab);
2253 if (finfo.contents != NULL)
2254 free (finfo.contents);
2255 if (finfo.external_relocs != NULL)
2256 free (finfo.external_relocs);
2257 if (finfo.internal_relocs != NULL)
2258 free (finfo.internal_relocs);
2259 if (finfo.external_syms != NULL)
2260 free (finfo.external_syms);
2261 if (finfo.internal_syms != NULL)
2262 free (finfo.internal_syms);
2263 if (finfo.indices != NULL)
2264 free (finfo.indices);
2265 if (finfo.sections != NULL)
2266 free (finfo.sections);
2267 if (finfo.symbuf != NULL)
2268 free (finfo.symbuf);
2269 for (o = abfd->sections; o != NULL; o = o->next)
2270 {
2271 if ((o->flags & SEC_RELOC) != 0
2272 && elf_section_data (o)->rel_hashes != NULL)
2273 free (elf_section_data (o)->rel_hashes);
2274 }
2275
2276 elf_tdata (abfd)->linker = true;
2277
2278 return true;
2279
2280 error_return:
2281 if (finfo.symstrtab != NULL)
2282 _bfd_stringtab_free (finfo.symstrtab);
2283 if (finfo.contents != NULL)
2284 free (finfo.contents);
2285 if (finfo.external_relocs != NULL)
2286 free (finfo.external_relocs);
2287 if (finfo.internal_relocs != NULL)
2288 free (finfo.internal_relocs);
2289 if (finfo.external_syms != NULL)
2290 free (finfo.external_syms);
2291 if (finfo.internal_syms != NULL)
2292 free (finfo.internal_syms);
2293 if (finfo.indices != NULL)
2294 free (finfo.indices);
2295 if (finfo.sections != NULL)
2296 free (finfo.sections);
2297 if (finfo.symbuf != NULL)
2298 free (finfo.symbuf);
2299 for (o = abfd->sections; o != NULL; o = o->next)
2300 {
2301 if ((o->flags & SEC_RELOC) != 0
2302 && elf_section_data (o)->rel_hashes != NULL)
2303 free (elf_section_data (o)->rel_hashes);
2304 }
2305
2306 return false;
2307 }
2308
2309 /* Add a symbol to the output symbol table. */
2310
2311 static boolean
2312 elf_link_output_sym (finfo, name, elfsym, input_sec)
2313 struct elf_final_link_info *finfo;
2314 const char *name;
2315 Elf_Internal_Sym *elfsym;
2316 asection *input_sec;
2317 {
2318 boolean (*output_symbol_hook) PARAMS ((bfd *,
2319 struct bfd_link_info *info,
2320 const char *,
2321 Elf_Internal_Sym *,
2322 asection *));
2323
2324 output_symbol_hook = get_elf_backend_data (finfo->output_bfd)->
2325 elf_backend_link_output_symbol_hook;
2326 if (output_symbol_hook != NULL)
2327 {
2328 if (! ((*output_symbol_hook)
2329 (finfo->output_bfd, finfo->info, name, elfsym, input_sec)))
2330 return false;
2331 }
2332
2333 if (name == (const char *) NULL || *name == '\0')
2334 elfsym->st_name = 0;
2335 else
2336 {
2337 elfsym->st_name = (unsigned long) _bfd_stringtab_add (finfo->symstrtab,
2338 name, true,
2339 false);
2340 if (elfsym->st_name == (unsigned long) -1)
2341 return false;
2342 }
2343
2344 if (finfo->symbuf_count >= finfo->symbuf_size)
2345 {
2346 if (! elf_link_flush_output_syms (finfo))
2347 return false;
2348 }
2349
2350 elf_swap_symbol_out (finfo->output_bfd, elfsym,
2351 (PTR) (finfo->symbuf + finfo->symbuf_count));
2352 ++finfo->symbuf_count;
2353
2354 ++finfo->output_bfd->symcount;
2355
2356 return true;
2357 }
2358
2359 /* Flush the output symbols to the file. */
2360
2361 static boolean
2362 elf_link_flush_output_syms (finfo)
2363 struct elf_final_link_info *finfo;
2364 {
2365 Elf_Internal_Shdr *symtab;
2366
2367 symtab = &elf_tdata (finfo->output_bfd)->symtab_hdr;
2368
2369 if (bfd_seek (finfo->output_bfd, symtab->sh_offset + symtab->sh_size,
2370 SEEK_SET) != 0
2371 || (bfd_write ((PTR) finfo->symbuf, finfo->symbuf_count,
2372 sizeof (Elf_External_Sym), finfo->output_bfd)
2373 != finfo->symbuf_count * sizeof (Elf_External_Sym)))
2374 return false;
2375
2376 symtab->sh_size += finfo->symbuf_count * sizeof (Elf_External_Sym);
2377
2378 finfo->symbuf_count = 0;
2379
2380 return true;
2381 }
2382
2383 /* Add an external symbol to the symbol table. This is called from
2384 the hash table traversal routine. */
2385
2386 static boolean
2387 elf_link_output_extsym (h, data)
2388 struct elf_link_hash_entry *h;
2389 PTR data;
2390 {
2391 struct elf_finfo_failed *eif = (struct elf_finfo_failed *) data;
2392 struct elf_final_link_info *finfo = eif->finfo;
2393 boolean strip;
2394 Elf_Internal_Sym sym;
2395 asection *input_sec;
2396
2397 /* If we are not creating a shared library, and this symbol is
2398 referenced by a shared library but is not defined anywhere, then
2399 warn that it is undefined. If we do not do this, the runtime
2400 linker will complain that the symbol is undefined when the
2401 program is run. We don't have to worry about symbols that are
2402 referenced by regular files, because we will already have issued
2403 warnings for them. */
2404 if (! finfo->info->relocateable
2405 && ! finfo->info->shared
2406 && h->root.type == bfd_link_hash_undefined
2407 && (h->elf_link_hash_flags & ELF_LINK_HASH_REF_DYNAMIC) != 0
2408 && (h->elf_link_hash_flags & ELF_LINK_HASH_REF_REGULAR) == 0)
2409 {
2410 if (! ((*finfo->info->callbacks->undefined_symbol)
2411 (finfo->info, h->root.root.string, h->root.u.undef.abfd,
2412 (asection *) NULL, 0)))
2413 {
2414 eif->failed = true;
2415 return false;
2416 }
2417 }
2418
2419 /* We don't want to output symbols that have never been mentioned by
2420 a regular file, or that we have been told to strip. However, if
2421 h->indx is set to -2, the symbol is used by a reloc and we must
2422 output it. */
2423 if (h->indx == -2)
2424 strip = false;
2425 else if (((h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) != 0
2426 || (h->elf_link_hash_flags & ELF_LINK_HASH_REF_DYNAMIC) != 0)
2427 && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0
2428 && (h->elf_link_hash_flags & ELF_LINK_HASH_REF_REGULAR) == 0)
2429 strip = true;
2430 else if (finfo->info->strip == strip_all
2431 || (finfo->info->strip == strip_some
2432 && bfd_hash_lookup (finfo->info->keep_hash,
2433 h->root.root.string,
2434 false, false) == NULL))
2435 strip = true;
2436 else
2437 strip = false;
2438
2439 /* If we're stripping it, and it's not a dynamic symbol, there's
2440 nothing else to do. */
2441 if (strip && h->dynindx == -1)
2442 return true;
2443
2444 sym.st_value = 0;
2445 sym.st_size = h->size;
2446 sym.st_other = 0;
2447 if (h->root.type == bfd_link_hash_undefweak
2448 || h->root.type == bfd_link_hash_defweak)
2449 sym.st_info = ELF_ST_INFO (STB_WEAK, h->type);
2450 else
2451 sym.st_info = ELF_ST_INFO (STB_GLOBAL, h->type);
2452
2453 switch (h->root.type)
2454 {
2455 default:
2456 case bfd_link_hash_new:
2457 abort ();
2458 return false;
2459
2460 case bfd_link_hash_undefined:
2461 input_sec = bfd_und_section_ptr;
2462 sym.st_shndx = SHN_UNDEF;
2463 break;
2464
2465 case bfd_link_hash_undefweak:
2466 input_sec = bfd_und_section_ptr;
2467 sym.st_shndx = SHN_UNDEF;
2468 break;
2469
2470 case bfd_link_hash_defined:
2471 case bfd_link_hash_defweak:
2472 {
2473 input_sec = h->root.u.def.section;
2474 if (input_sec->output_section != NULL)
2475 {
2476 sym.st_shndx =
2477 _bfd_elf_section_from_bfd_section (finfo->output_bfd,
2478 input_sec->output_section);
2479 if (sym.st_shndx == (unsigned short) -1)
2480 {
2481 eif->failed = true;
2482 return false;
2483 }
2484
2485 /* ELF symbols in relocateable files are section relative,
2486 but in nonrelocateable files they are virtual
2487 addresses. */
2488 sym.st_value = h->root.u.def.value + input_sec->output_offset;
2489 if (! finfo->info->relocateable)
2490 sym.st_value += input_sec->output_section->vma;
2491 }
2492 else
2493 {
2494 BFD_ASSERT ((bfd_get_flavour (input_sec->owner)
2495 == bfd_target_elf_flavour)
2496 && elf_elfheader (input_sec->owner)->e_type == ET_DYN);
2497 sym.st_shndx = SHN_UNDEF;
2498 input_sec = bfd_und_section_ptr;
2499 }
2500 }
2501 break;
2502
2503 case bfd_link_hash_common:
2504 input_sec = bfd_com_section_ptr;
2505 sym.st_shndx = SHN_COMMON;
2506 sym.st_value = 1 << h->root.u.c.p->alignment_power;
2507 break;
2508
2509 case bfd_link_hash_indirect:
2510 case bfd_link_hash_warning:
2511 return (elf_link_output_extsym
2512 ((struct elf_link_hash_entry *) h->root.u.i.link, data));
2513 }
2514
2515 /* If this symbol should be put in the .dynsym section, then put it
2516 there now. We have already know the symbol index. We also fill
2517 in the entry in the .hash section. */
2518 if (h->dynindx != -1
2519 && elf_hash_table (finfo->info)->dynamic_sections_created)
2520 {
2521 struct elf_backend_data *bed;
2522 size_t bucketcount;
2523 size_t bucket;
2524 bfd_byte *bucketpos;
2525 bfd_vma chain;
2526
2527 sym.st_name = h->dynstr_index;
2528
2529 /* Give the processor backend a chance to tweak the symbol
2530 value, and also to finish up anything that needs to be done
2531 for this symbol. */
2532 bed = get_elf_backend_data (finfo->output_bfd);
2533 if (! ((*bed->elf_backend_finish_dynamic_symbol)
2534 (finfo->output_bfd, finfo->info, h, &sym)))
2535 {
2536 eif->failed = true;
2537 return false;
2538 }
2539
2540 elf_swap_symbol_out (finfo->output_bfd, &sym,
2541 (PTR) (((Elf_External_Sym *)
2542 finfo->dynsym_sec->contents)
2543 + h->dynindx));
2544
2545 bucketcount = elf_hash_table (finfo->info)->bucketcount;
2546 bucket = (bfd_elf_hash ((const unsigned char *) h->root.root.string)
2547 % bucketcount);
2548 bucketpos = ((bfd_byte *) finfo->hash_sec->contents
2549 + (bucket + 2) * (ARCH_SIZE / 8));
2550 chain = get_word (finfo->output_bfd, bucketpos);
2551 put_word (finfo->output_bfd, h->dynindx, bucketpos);
2552 put_word (finfo->output_bfd, chain,
2553 ((bfd_byte *) finfo->hash_sec->contents
2554 + (bucketcount + 2 + h->dynindx) * (ARCH_SIZE / 8)));
2555 }
2556
2557 /* If we're stripping it, then it was just a dynamic symbol, and
2558 there's nothing else to do. */
2559 if (strip)
2560 return true;
2561
2562 h->indx = finfo->output_bfd->symcount;
2563
2564 if (! elf_link_output_sym (finfo, h->root.root.string, &sym, input_sec))
2565 {
2566 eif->failed = true;
2567 return false;
2568 }
2569
2570 return true;
2571 }
2572
2573 /* Link an input file into the linker output file. This function
2574 handles all the sections and relocations of the input file at once.
2575 This is so that we only have to read the local symbols once, and
2576 don't have to keep them in memory. */
2577
2578 static boolean
2579 elf_link_input_bfd (finfo, input_bfd)
2580 struct elf_final_link_info *finfo;
2581 bfd *input_bfd;
2582 {
2583 boolean (*relocate_section) PARAMS ((bfd *, struct bfd_link_info *,
2584 bfd *, asection *, bfd_byte *,
2585 Elf_Internal_Rela *,
2586 Elf_Internal_Sym *, asection **));
2587 bfd *output_bfd;
2588 Elf_Internal_Shdr *symtab_hdr;
2589 size_t locsymcount;
2590 size_t extsymoff;
2591 Elf_External_Sym *esym;
2592 Elf_External_Sym *esymend;
2593 Elf_Internal_Sym *isym;
2594 long *pindex;
2595 asection **ppsection;
2596 asection *o;
2597
2598 output_bfd = finfo->output_bfd;
2599 relocate_section =
2600 get_elf_backend_data (output_bfd)->elf_backend_relocate_section;
2601
2602 /* If this is a dynamic object, we don't want to do anything here:
2603 we don't want the local symbols, and we don't want the section
2604 contents. */
2605 if (elf_elfheader (input_bfd)->e_type == ET_DYN)
2606 return true;
2607
2608 symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
2609 if (elf_bad_symtab (input_bfd))
2610 {
2611 locsymcount = symtab_hdr->sh_size / sizeof (Elf_External_Sym);
2612 extsymoff = 0;
2613 }
2614 else
2615 {
2616 locsymcount = symtab_hdr->sh_info;
2617 extsymoff = symtab_hdr->sh_info;
2618 }
2619
2620 /* Read the local symbols. */
2621 if (locsymcount > 0
2622 && (bfd_seek (input_bfd, symtab_hdr->sh_offset, SEEK_SET) != 0
2623 || (bfd_read (finfo->external_syms, sizeof (Elf_External_Sym),
2624 locsymcount, input_bfd)
2625 != locsymcount * sizeof (Elf_External_Sym))))
2626 return false;
2627
2628 /* Swap in the local symbols and write out the ones which we know
2629 are going into the output file. */
2630 esym = finfo->external_syms;
2631 esymend = esym + locsymcount;
2632 isym = finfo->internal_syms;
2633 pindex = finfo->indices;
2634 ppsection = finfo->sections;
2635 for (; esym < esymend; esym++, isym++, pindex++, ppsection++)
2636 {
2637 asection *isec;
2638 const char *name;
2639 Elf_Internal_Sym osym;
2640
2641 elf_swap_symbol_in (input_bfd, esym, isym);
2642 *pindex = -1;
2643
2644 if (elf_bad_symtab (input_bfd))
2645 {
2646 if (ELF_ST_BIND (isym->st_info) != STB_LOCAL)
2647 {
2648 *ppsection = NULL;
2649 continue;
2650 }
2651 }
2652
2653 if (isym->st_shndx == SHN_UNDEF)
2654 isec = bfd_und_section_ptr;
2655 else if (isym->st_shndx > 0 && isym->st_shndx < SHN_LORESERVE)
2656 isec = section_from_elf_index (input_bfd, isym->st_shndx);
2657 else if (isym->st_shndx == SHN_ABS)
2658 isec = bfd_abs_section_ptr;
2659 else if (isym->st_shndx == SHN_COMMON)
2660 isec = bfd_com_section_ptr;
2661 else
2662 {
2663 /* Who knows? */
2664 isec = NULL;
2665 }
2666
2667 *ppsection = isec;
2668
2669 /* Don't output the first, undefined, symbol. */
2670 if (esym == finfo->external_syms)
2671 continue;
2672
2673 /* If we are stripping all symbols, we don't want to output this
2674 one. */
2675 if (finfo->info->strip == strip_all)
2676 continue;
2677
2678 /* We never output section symbols. Instead, we use the section
2679 symbol of the corresponding section in the output file. */
2680 if (ELF_ST_TYPE (isym->st_info) == STT_SECTION)
2681 continue;
2682
2683 /* If we are discarding all local symbols, we don't want to
2684 output this one. If we are generating a relocateable output
2685 file, then some of the local symbols may be required by
2686 relocs; we output them below as we discover that they are
2687 needed. */
2688 if (finfo->info->discard == discard_all)
2689 continue;
2690
2691 /* Get the name of the symbol. */
2692 name = bfd_elf_string_from_elf_section (input_bfd, symtab_hdr->sh_link,
2693 isym->st_name);
2694 if (name == NULL)
2695 return false;
2696
2697 /* See if we are discarding symbols with this name. */
2698 if ((finfo->info->strip == strip_some
2699 && (bfd_hash_lookup (finfo->info->keep_hash, name, false, false)
2700 == NULL))
2701 || (finfo->info->discard == discard_l
2702 && strncmp (name, finfo->info->lprefix,
2703 finfo->info->lprefix_len) == 0))
2704 continue;
2705
2706 /* If we get here, we are going to output this symbol. */
2707
2708 osym = *isym;
2709
2710 /* Adjust the section index for the output file. */
2711 osym.st_shndx = _bfd_elf_section_from_bfd_section (output_bfd,
2712 isec->output_section);
2713 if (osym.st_shndx == (unsigned short) -1)
2714 return false;
2715
2716 *pindex = output_bfd->symcount;
2717
2718 /* ELF symbols in relocateable files are section relative, but
2719 in executable files they are virtual addresses. Note that
2720 this code assumes that all ELF sections have an associated
2721 BFD section with a reasonable value for output_offset; below
2722 we assume that they also have a reasonable value for
2723 output_section. Any special sections must be set up to meet
2724 these requirements. */
2725 osym.st_value += isec->output_offset;
2726 if (! finfo->info->relocateable)
2727 osym.st_value += isec->output_section->vma;
2728
2729 if (! elf_link_output_sym (finfo, name, &osym, isec))
2730 return false;
2731 }
2732
2733 /* Relocate the contents of each section. */
2734 for (o = input_bfd->sections; o != NULL; o = o->next)
2735 {
2736 if ((o->flags & SEC_HAS_CONTENTS) == 0)
2737 continue;
2738
2739 if ((o->flags & SEC_IN_MEMORY) != 0
2740 && input_bfd == elf_hash_table (finfo->info)->dynobj)
2741 {
2742 /* Section was created by elf_link_create_dynamic_sections.
2743 FIXME: This test is fragile. */
2744 continue;
2745 }
2746
2747 /* Read the contents of the section. */
2748 if (! bfd_get_section_contents (input_bfd, o, finfo->contents,
2749 (file_ptr) 0, o->_raw_size))
2750 return false;
2751
2752 if ((o->flags & SEC_RELOC) != 0)
2753 {
2754 Elf_Internal_Rela *internal_relocs;
2755
2756 /* Get the swapped relocs. */
2757 internal_relocs = elf_link_read_relocs (input_bfd, o,
2758 finfo->external_relocs,
2759 finfo->internal_relocs,
2760 false);
2761 if (internal_relocs == NULL
2762 && o->reloc_count > 0)
2763 return false;
2764
2765 /* Relocate the section by invoking a back end routine.
2766
2767 The back end routine is responsible for adjusting the
2768 section contents as necessary, and (if using Rela relocs
2769 and generating a relocateable output file) adjusting the
2770 reloc addend as necessary.
2771
2772 The back end routine does not have to worry about setting
2773 the reloc address or the reloc symbol index.
2774
2775 The back end routine is given a pointer to the swapped in
2776 internal symbols, and can access the hash table entries
2777 for the external symbols via elf_sym_hashes (input_bfd).
2778
2779 When generating relocateable output, the back end routine
2780 must handle STB_LOCAL/STT_SECTION symbols specially. The
2781 output symbol is going to be a section symbol
2782 corresponding to the output section, which will require
2783 the addend to be adjusted. */
2784
2785 if (! (*relocate_section) (output_bfd, finfo->info,
2786 input_bfd, o,
2787 finfo->contents,
2788 internal_relocs,
2789 finfo->internal_syms,
2790 finfo->sections))
2791 return false;
2792
2793 if (finfo->info->relocateable)
2794 {
2795 Elf_Internal_Rela *irela;
2796 Elf_Internal_Rela *irelaend;
2797 struct elf_link_hash_entry **rel_hash;
2798 Elf_Internal_Shdr *input_rel_hdr;
2799 Elf_Internal_Shdr *output_rel_hdr;
2800
2801 /* Adjust the reloc addresses and symbol indices. */
2802
2803 irela = internal_relocs;
2804 irelaend = irela + o->reloc_count;
2805 rel_hash = (elf_section_data (o->output_section)->rel_hashes
2806 + o->output_section->reloc_count);
2807 for (; irela < irelaend; irela++, rel_hash++)
2808 {
2809 unsigned long r_symndx;
2810 Elf_Internal_Sym *isym;
2811 asection *sec;
2812
2813 irela->r_offset += o->output_offset;
2814
2815 r_symndx = ELF_R_SYM (irela->r_info);
2816
2817 if (r_symndx == 0)
2818 continue;
2819
2820 if (r_symndx >= locsymcount
2821 || (elf_bad_symtab (input_bfd)
2822 && finfo->sections[r_symndx] == NULL))
2823 {
2824 long indx;
2825
2826 /* This is a reloc against a global symbol. We
2827 have not yet output all the local symbols, so
2828 we do not know the symbol index of any global
2829 symbol. We set the rel_hash entry for this
2830 reloc to point to the global hash table entry
2831 for this symbol. The symbol index is then
2832 set at the end of elf_bfd_final_link. */
2833 indx = r_symndx - extsymoff;
2834 *rel_hash = elf_sym_hashes (input_bfd)[indx];
2835
2836 /* Setting the index to -2 tells
2837 elf_link_output_extsym that this symbol is
2838 used by a reloc. */
2839 BFD_ASSERT ((*rel_hash)->indx < 0);
2840 (*rel_hash)->indx = -2;
2841
2842 continue;
2843 }
2844
2845 /* This is a reloc against a local symbol. */
2846
2847 *rel_hash = NULL;
2848 isym = finfo->internal_syms + r_symndx;
2849 sec = finfo->sections[r_symndx];
2850 if (ELF_ST_TYPE (isym->st_info) == STT_SECTION)
2851 {
2852 /* I suppose the backend ought to fill in the
2853 section of any STT_SECTION symbol against a
2854 processor specific section. */
2855 if (sec != NULL && bfd_is_abs_section (sec))
2856 r_symndx = 0;
2857 else if (sec == NULL || sec->owner == NULL)
2858 {
2859 bfd_set_error (bfd_error_bad_value);
2860 return false;
2861 }
2862 else
2863 {
2864 r_symndx = sec->output_section->target_index;
2865 BFD_ASSERT (r_symndx != 0);
2866 }
2867 }
2868 else
2869 {
2870 if (finfo->indices[r_symndx] == -1)
2871 {
2872 unsigned long link;
2873 const char *name;
2874 asection *osec;
2875
2876 if (finfo->info->strip == strip_all)
2877 {
2878 /* You can't do ld -r -s. */
2879 bfd_set_error (bfd_error_invalid_operation);
2880 return false;
2881 }
2882
2883 /* This symbol was skipped earlier, but
2884 since it is needed by a reloc, we
2885 must output it now. */
2886 link = symtab_hdr->sh_link;
2887 name = bfd_elf_string_from_elf_section (input_bfd,
2888 link,
2889 isym->st_name);
2890 if (name == NULL)
2891 return false;
2892
2893 osec = sec->output_section;
2894 isym->st_shndx =
2895 _bfd_elf_section_from_bfd_section (output_bfd,
2896 osec);
2897 if (isym->st_shndx == (unsigned short) -1)
2898 return false;
2899
2900 isym->st_value += sec->output_offset;
2901 if (! finfo->info->relocateable)
2902 isym->st_value += osec->vma;
2903
2904 finfo->indices[r_symndx] = output_bfd->symcount;
2905
2906 if (! elf_link_output_sym (finfo, name, isym, sec))
2907 return false;
2908 }
2909
2910 r_symndx = finfo->indices[r_symndx];
2911 }
2912
2913 irela->r_info = ELF_R_INFO (r_symndx,
2914 ELF_R_TYPE (irela->r_info));
2915 }
2916
2917 /* Swap out the relocs. */
2918 input_rel_hdr = &elf_section_data (o)->rel_hdr;
2919 output_rel_hdr = &elf_section_data (o->output_section)->rel_hdr;
2920 BFD_ASSERT (output_rel_hdr->sh_entsize
2921 == input_rel_hdr->sh_entsize);
2922 irela = internal_relocs;
2923 irelaend = irela + o->reloc_count;
2924 if (input_rel_hdr->sh_entsize == sizeof (Elf_External_Rel))
2925 {
2926 Elf_External_Rel *erel;
2927
2928 erel = ((Elf_External_Rel *) output_rel_hdr->contents
2929 + o->output_section->reloc_count);
2930 for (; irela < irelaend; irela++, erel++)
2931 {
2932 Elf_Internal_Rel irel;
2933
2934 irel.r_offset = irela->r_offset;
2935 irel.r_info = irela->r_info;
2936 BFD_ASSERT (irela->r_addend == 0);
2937 elf_swap_reloc_out (output_bfd, &irel, erel);
2938 }
2939 }
2940 else
2941 {
2942 Elf_External_Rela *erela;
2943
2944 BFD_ASSERT (input_rel_hdr->sh_entsize
2945 == sizeof (Elf_External_Rela));
2946 erela = ((Elf_External_Rela *) output_rel_hdr->contents
2947 + o->output_section->reloc_count);
2948 for (; irela < irelaend; irela++, erela++)
2949 elf_swap_reloca_out (output_bfd, irela, erela);
2950 }
2951
2952 o->output_section->reloc_count += o->reloc_count;
2953 }
2954 }
2955
2956 /* Write out the modified section contents. */
2957 if (! bfd_set_section_contents (output_bfd, o->output_section,
2958 finfo->contents, o->output_offset,
2959 (o->_cooked_size != 0
2960 ? o->_cooked_size
2961 : o->_raw_size)))
2962 return false;
2963 }
2964
2965 return true;
2966 }
2967
2968 /* Generate a reloc when linking an ELF file. This is a reloc
2969 requested by the linker, and does come from any input file. This
2970 is used to build constructor and destructor tables when linking
2971 with -Ur. */
2972
2973 static boolean
2974 elf_reloc_link_order (output_bfd, info, output_section, link_order)
2975 bfd *output_bfd;
2976 struct bfd_link_info *info;
2977 asection *output_section;
2978 struct bfd_link_order *link_order;
2979 {
2980 reloc_howto_type *howto;
2981 long indx;
2982 bfd_vma offset;
2983 struct elf_link_hash_entry **rel_hash_ptr;
2984 Elf_Internal_Shdr *rel_hdr;
2985
2986 howto = bfd_reloc_type_lookup (output_bfd, link_order->u.reloc.p->reloc);
2987 if (howto == NULL)
2988 {
2989 bfd_set_error (bfd_error_bad_value);
2990 return false;
2991 }
2992
2993 /* If this is an inplace reloc, we must write the addend into the
2994 object file. */
2995 if (howto->partial_inplace
2996 && link_order->u.reloc.p->addend != 0)
2997 {
2998 bfd_size_type size;
2999 bfd_reloc_status_type rstat;
3000 bfd_byte *buf;
3001 boolean ok;
3002
3003 size = bfd_get_reloc_size (howto);
3004 buf = (bfd_byte *) bfd_zmalloc (size);
3005 if (buf == (bfd_byte *) NULL)
3006 return false;
3007 rstat = _bfd_relocate_contents (howto, output_bfd,
3008 link_order->u.reloc.p->addend, buf);
3009 switch (rstat)
3010 {
3011 case bfd_reloc_ok:
3012 break;
3013 default:
3014 case bfd_reloc_outofrange:
3015 abort ();
3016 case bfd_reloc_overflow:
3017 if (! ((*info->callbacks->reloc_overflow)
3018 (info,
3019 (link_order->type == bfd_section_reloc_link_order
3020 ? bfd_section_name (output_bfd,
3021 link_order->u.reloc.p->u.section)
3022 : link_order->u.reloc.p->u.name),
3023 howto->name, link_order->u.reloc.p->addend,
3024 (bfd *) NULL, (asection *) NULL, (bfd_vma) 0)))
3025 {
3026 free (buf);
3027 return false;
3028 }
3029 break;
3030 }
3031 ok = bfd_set_section_contents (output_bfd, output_section, (PTR) buf,
3032 (file_ptr) link_order->offset, size);
3033 free (buf);
3034 if (! ok)
3035 return false;
3036 }
3037
3038 /* Figure out the symbol index. */
3039 rel_hash_ptr = (elf_section_data (output_section)->rel_hashes
3040 + output_section->reloc_count);
3041 if (link_order->type == bfd_section_reloc_link_order)
3042 {
3043 indx = link_order->u.reloc.p->u.section->target_index;
3044 BFD_ASSERT (indx != 0);
3045 *rel_hash_ptr = NULL;
3046 }
3047 else
3048 {
3049 struct elf_link_hash_entry *h;
3050
3051 h = elf_link_hash_lookup (elf_hash_table (info),
3052 link_order->u.reloc.p->u.name,
3053 false, false, true);
3054 if (h != NULL)
3055 {
3056 /* Setting the index to -2 tells elf_link_output_extsym that
3057 this symbol is used by a reloc. */
3058 h->indx = -2;
3059 *rel_hash_ptr = h;
3060 indx = 0;
3061 }
3062 else
3063 {
3064 if (! ((*info->callbacks->unattached_reloc)
3065 (info, link_order->u.reloc.p->u.name, (bfd *) NULL,
3066 (asection *) NULL, (bfd_vma) 0)))
3067 return false;
3068 indx = 0;
3069 }
3070 }
3071
3072 /* The address of a reloc is relative to the section in a
3073 relocateable file, and is a virtual address in an executable
3074 file. */
3075 offset = link_order->offset;
3076 if (! info->relocateable)
3077 offset += output_section->vma;
3078
3079 rel_hdr = &elf_section_data (output_section)->rel_hdr;
3080
3081 if (rel_hdr->sh_type == SHT_REL)
3082 {
3083 Elf_Internal_Rel irel;
3084 Elf_External_Rel *erel;
3085
3086 irel.r_offset = offset;
3087 irel.r_info = ELF_R_INFO (indx, howto->type);
3088 erel = ((Elf_External_Rel *) rel_hdr->contents
3089 + output_section->reloc_count);
3090 elf_swap_reloc_out (output_bfd, &irel, erel);
3091 }
3092 else
3093 {
3094 Elf_Internal_Rela irela;
3095 Elf_External_Rela *erela;
3096
3097 irela.r_offset = offset;
3098 irela.r_info = ELF_R_INFO (indx, howto->type);
3099 irela.r_addend = link_order->u.reloc.p->addend;
3100 erela = ((Elf_External_Rela *) rel_hdr->contents
3101 + output_section->reloc_count);
3102 elf_swap_reloca_out (output_bfd, &irela, erela);
3103 }
3104
3105 ++output_section->reloc_count;
3106
3107 return true;
3108 }
3109