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