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