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